79
Tô Trng Hin Lp trnh game di đng vi J2ME Tin2_K50 TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN Thc Tp Cơ S Lp Trnh Game Di Đng Vi J2ME Ging viên hưng dn: Thy gio Thc Bnh Cưng E-mail cuongtb@ it-hut.edu.vn Sinh viên thc tp: Tô Trng Hin Lp tin2 – K50 ĐHBKHN E-mail [email protected] Page 1

Thuc Tap Co So to Trong Hien Tin2 K50

Embed Size (px)

Citation preview

Page 1: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN

Thưc Tâp Cơ SơLâp Trinh Game Di Đông Vơi J2ME

Giang viên hương dân:Thây giao Thac Binh CươngE-mail cuongtb@ it-hut.edu.vn

Sinh viên thưc tâp: Tô Trong Hiên Lơp tin2 – K50 ĐHBKHNE-mail [email protected]

Page 1

Page 2: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Nôi Dung

Lơi mơ đâu.............................................................................................................................................4

Phân 1.....................................................................................................................................................5

Cơ Sơ Ly Thuyêt Lâp Trinh Di Đông..................................................................................................5

1. Nhưng han chê cua lâp trinh di đông...........................................................................................5

2. Tông quan vê ngôn ngư J2ME......................................................................................................6

2.1 Sư phô biên cua J2ME.................................................................................................................6

2.2 Nên tang J2ME............................................................................................................................7

2.3 Căn ban lâp trinh J2ME...............................................................................................................9

2.3.1 Bô MIDlet..........................................................................................................................10

2.3.2 API cua J2ME....................................................................................................................11

Phân 2...................................................................................................................................................13

J2ME Game API..................................................................................................................................13

1. J2ME Game API..............................................................................................................................13

1.1 GameCanvas class.....................................................................................................................14

1.2 Layer class.................................................................................................................................17

1.3 Sprite Class................................................................................................................................17

1.4 TiledLayer class.........................................................................................................................24

1.5 LayerManager class...................................................................................................................26

Phân 3...................................................................................................................................................28

Tông Quan, Kich Ban Va Phân Tich Lâp Trinh Game....................................................................28

1. Tông quan vê lam Game.................................................................................................................28

1.1 Phân loai game...........................................................................................................................28

1.2 Nhưng đoi hoi chung cua môt game..........................................................................................28

1.3 Quy trinh phat triên game..........................................................................................................28

2. Cac Nhân Vât Game Va Phân Tich Lâp Trinh.............................................................................29

2.1 Cac nhân vât trong game va đăc điêm:......................................................................................29

2.2 Phân tich cac nhân vât theo lơp..................................................................................................30

2.3 Môt sô vân đê đăt ra va hương giai quyêt:.................................................................................32

Phân 4...................................................................................................................................................33

Xây dưng mô hinh UML cho chương trinh.......................................................................................33

1 Use Case Diagram.............................................................................................................................33

Page 2

Page 3: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

2 State Diagram...................................................................................................................................34

3 Class Diagram...................................................................................................................................36

.1 Class Diagram cua cac nhân vât trong game..................................................................................36

.2 Class diagram cua lơp giao diên....................................................................................................38

4 Môt sô luông quan trong trong chương trinh.................................................................................39

4.1 Luông chinh.................................................................................................................................39

4.2 Luông sư ly phim bâm.................................................................................................................41

4.3 Luông xac đinh đôi tương băn cua Player....................................................................................42

4.4 Luông quan ly đan cua Player trong man hinh.............................................................................43

4.5 Luông xư ly khi đan chưa ra khoi man hinh................................................................................44

Phân 5...................................................................................................................................................46

Công cu lâp trinh Game J2ME cua Netbeans...................................................................................46

1. GameDesign.....................................................................................................................................46

1.1 Anh dung đê lam game..............................................................................................................47

1.2 Tao hinh anh nhân vât chuyên đông..........................................................................................47

1.3 Tao cac TiledLayer....................................................................................................................49

1.4 Tao cac tile đông trên TiledLayer..............................................................................................50

1.5 Tao ban đô.................................................................................................................................51

2 VisualMIDlet....................................................................................................................................52

Phân 6...................................................................................................................................................54

Giơi thiêu luât chơi..............................................................................................................................54

1. Nhiêm vu:..........................................................................................................................................54

2. Cach chơi...........................................................................................................................................54

3. Môt sô thông tin vê game..................................................................................................................55

4. Môt sô hinh anh trong game..............................................................................................................56

Phân 7...................................................................................................................................................58

Kêt luân................................................................................................................................................58

1. Nhưng kêt qua đat đươc.....................................................................................................................58

2. Nhưng han chê...................................................................................................................................58

3. Hương phat triên................................................................................................................................59

Danh muc cac tư viêt tăt.....................................................................................................................59

Danh muc hinh.....................................................................................................................................60

Tai liêu tham khao...............................................................................................................................60

Page 3

Page 4: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Lơi mơ đâu

Dich vu di đông đươc băt đâu đươc cung câp tai Viêt Nam vao năm 1992, khơi đâu vơi nhưng điên thoai “cuc gach” phai đeo vai ma gia trên 2000 đô la. Vơi chi vai truc thuê bao đăng ki đâu tiên thi cho đên nay đa hơn 20 triêu thuê bao. Cung vơi tôc đô phat triên đo la nhưng tiên bô vươt bâc vê tôc đô xư ly. Nhơ đo lâp trinh cac ưng dung cho loai thiêt bi nay tăng lên nhanh chong, đăc biêt la cac dich vu gia tri gia tăng trên mang di đông như SMS, RSS, WAP va ưng dung dich vu game. Qua tim hiêu vê, em thây thi trương Game di đông tai Viêt Nam đang phat triên va co tiêm năng lơn; đo la ly do em chon đê tai nay.

Page 4

Page 5: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Phân 1

Cơ Sơ Ly Thuyêt Lâp Trinh Di Đông

Phân nay em xin trinh bay tư tông quan đên chi tiêt. Trươc hêt noi vê cac đăc điêm riêng biêt cua lâp trinh di đông, đăc biêt la nhưng han chê cua no, sau đo đên cơ sơ cua ngôn ngư lâp trinh di đông J2ME va cuôi chương giơi thiêu vê công cu giup lâp trinh game di đông.

1. Nhưng han chê cua lâp trinh di đông

Sư khac nhau lơn nhât giưa lâp trinh cho di đông so vơi lâp trinh cho PC la ta phai quan tâm lơn đên bô nhơ, kich thươc man hinh hay thâm chi la mau săc cua thiêt bi. Nhưng vân đê đo lai không quan trong bâc nhât đôi vơi PC. Hơn thê nưa ta con phai quan tâm đên sư khac nhau giưa cac hang san xuât cung như dong may di đông cua hang. Cac dong may khac nhau se co bô nhơ, kich thươc, mau săc man hinh va ca hô trơ cho lâp trinh cung khac nhau.

Cac loai bô nhơBô nhơ lam viêc hay con goi la heap memory la phân bô nhơ đươc dung trong suôt qua trinh chay va đươc giai phong khi ưng dung kêt thuc. Ưng dung danh cho di đông phai co bô nhơ nho hơn vung nhơ nay mơi co thê chay đươc.

Môt loai bô nhơ khac dung đê lưu trư la bô nhơ RMS (Record Management System). RMS la bô nhơ ma thông tin vân con đươc lưu khi ta tăt ưng dung. Lây môt vi du trong game ta dung bô nhơ nay đê lưu top nhưng ngươi chơi cao điêm nhât. Cac thông tin đo vân đươc câp nhât cho lân chơi tiêp theo.

Sư phân manhGiông như PC phân manh bô nhơ co thê xay ra vơi điên thoai.

Sư đa dang vê giao diên điên thoai

Page 5

Page 6: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Ngoai vân đê vê bô nhơ khi lâp trinh ta con phai quan tâm đên kich thươc cua tưng loai thiêt bi cu thê. Kich thươc man hinh cua điên thoai ma ta lâp trinh co anh hương rât lơn đên cach thiêt kê giao diên va lâp trinh.

Hinh 1: sư đa dang vê chung loai điên thoai

2. Tông quan vê ngôn ngư J2ME

2.1 Sư phô biên cua J2ME

Tương ưng vơi sư han chê cua cac thiêt bi di đông thi ngôn ngư lâp trinh cho chung cung co phân han chê so vơi trong PC. Trong đo ngôn ngư chiêm thi phân nhiêu nhât la J2ME (Java 2 Mobile Edition) do tâp đoan SUN phat triên. Đây la ngôn ngư lâp trinh Mobile băng Java. Lâp trinh băng J2ME hay băng Java noi chung co thê chay trên nhiêu thiêt bi phân cưng khac nhau “Write one, run everywhere”, miên la hô trơ môi trương java (JRE – Java Runtime Enviromment). Biêu đô dươi đây noi lên sư phat triên cua cac thiêt bi di đông co hô trơ may ao Java (Java Virtual Machine).

Page 6

1. Sư phô biên cua J2ME2. Nên tang cua J2ME3. Căn ban lâp trinh J2ME

Page 7: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Hinh 2: Sư phô biên cua cac thiêt bi hô trơ may ao Java

Tuy nhiên do sư đa dang cua cac dong may, môi dong hô trơ môt API riêng đê lâp trinh cho thiêt bi đo nên khi lam môt ưng dung co hô trơ cac tinh năng câp cao như âm thanh, đô hoa thi ta không thê viêt code môt lân ma phai viêt riêng cho tưng loai may va sư dung thư viên ma may đo hô trơ.

2.2 Nên tang J2ME

Muc tiêu cua J2ME la cho phep ngươi lâp trinh viêt cac ưng dung đôc lâp vơi thiêt bi di đông ma không cân quan tâm đên phân cưng cua may. Sau đây la phân lơp theo tâng cua J2ME đươc xây dưng trên CLDC (thiêt bi kêt nôi han chê vê câu hinh).

Page 7

Page 8: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Hinh 3: Cac tâng trong nên tang J2ME

Như vây J2ME gôm cac tâng sau: Tâng phân cưng thiêt bi Tâng may ao Java Tâng câu hinh Tâng hiên trang

1.2.1 Tâng phân cưng thiêt bi

Đây la thiêt bi di đông, co bô nhơ va bô xư ly. Măc du phân nay không phai la môt phân cua J2ME nhưng no la “vât chu” cung câp phân cưng thich hơp cho viêc cai đăt va thưc thi cac ưng dung J2ME. Môi môt thiêt bi di đông khac nhau se co cac bô xư ly khac nhau va tâp lênh khac nhau. J2ME co vai tro la cung câp môt môi trương chuân cho tât ca cac loai thiêt bi di đông.

1.2.2 Tâng may ao java

Khi ma nguôn Java đươc biên dich no chuyên đôi thanh ma bytecode. Ma nay sau đo đươc chuyên thanh ma may cua cac thiêt bi di đông. Vây co thê noi tâng may ao Java (K Virtual Machine - KVM) la bô biên dich ma bytecode, co nhiêm vu

Page 8

Page 9: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

chuyên ma bytecode cua chương trinh Java thanh ngôn ngư may đê chay trên cac thiêt bi di đông. Co nghia la thiêt bi nao hô trơ KVM thi co thê chay đươc cac chương trinh J2ME.KVM (Kernel Virtual Machine): may ao đươc thêt kê vơi nho gon vơi muc tiêu tiêt kiêm bô nhơ thiêt bi.

Hinh 4: Qua trinh xây dưng ưng dung cho thiêt bi di đông

1.2.3 Tâng câu hinh

Tâng câu hinh CLDC (Connected, Limited Device Confinguation – thiêt bi kêt nôi han chê vê câu hinh) đinh nghia đăc ta may ao KVM va đinh nghia môt tâp hơp cac lơp co kha năng hô trơ diên rông nhưng thiêt bi thuôc loai CLDC.

1.2.4 Tâng hiên trang

Tâng hiên trang MIDP (Mobile Information Device Profile- thông tin thiêt bi di đông) cung câp cac API thân thiên cho lâp trinh viên. Tâng hiên trang đươc xây dưng trên lơp câu hinh va cung câp nhiêu thư viên hơn so vơi tâng câu hinh.

2.3 Căn ban lâp trinh J2ME

Page 9

Page 10: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

2.3.1 Bô MIDlet

MIDlet la môt ưng dung Java đươc thiêt kêt đê chay trên cac thiêt bi di đông. Môt MIDlet chưa cac lơp Java dung bơi CLDC va MIDP. Môt bô MIDlet gôm môt hoăc nhiêu MIDlet đươc đong goi cung nhau va nen trong file JAR. File JAR săn sang cho viêc cai đăt vao điên thoai. Vân đê cua lâp trinh viên la tao ra cac MIDlet. Sau đây la câu truc lâp trinh cua môt MIDlet.

Môt MIDlet co 3 phương thưc: startApp(), pauseApp(), va destroyApp(). Dươi đây la môt bô khung lâp trinh cua môt MIDlet:

Thanh phân import:Khai bao sư dung cac lơp cân thiêt trong thư viên MIDP va CLDC.

Ham khơi tao MIDletExample ():Ham khơi tao đươc thưc hiên môt lân khi MIDlet khơi đông.

startApp():phương thưc nay đươc goi bơi bô quan ly ưng dung khi khơi tao MIDlet va

môi khi MIDlet trơ vê tư trang thai paused.

pauseApp():

Page 10

import javax.microedition.midlet.*;

public class MIDletExample extends MIDlet {

public void MIDletExample() { }public void startApp() { }public void pauseApp() { }public void destroyApp(boolean unconditional) { }

}

Page 11: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

phương thưc nay goi bô quan ly ưng dung môi khi ưng dung cân tam dưng ưng dung đang thưc thi. Khi sư dung pauseApp ta giai phong môt phân tai nguyên cua MIDlet đê danh bô nhơ cho cac ưng dung khac.

destroyApp():Phương thưc nay đươc dung khi thoat khoi MIDlet. Trươc đo phai giai

phong hoan toan bô nhơ đươc lây bơi MIDlet.

Co chu y la tât ca cac ưng dung MIDlet đươc viêt ra đêu kê thưa tư lơp MIDlet co săn trong MIDP. Lơp MIDlet năm trong goi: javax.microedition.midlet.* . Lơp nay quan ly chu ki sông cua cac ưng dung MIDlet.

Hinh 5: Cac trang thai va vong đơi cua Midlet

2.3.2 API cua J2ME

Page 11

Page 12: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Hinh 6: Phân lơp API cua J2ME

J2ME cung câp hai mưc đô hoa cho lơp MIDlet. Mưc cao (High Level) gôm nhưng thanh phân như: Textbox, Form, Alert, List … Đăc điêm cua cac thanh phân mưc thâp la tinh kha chuyên ( kha năng dung lai) tuy nhiên cac thanh phân nay không thê thay đôi tuy y đươc. Thanh phân mưc thâp (Low Level) chi co Canvas. Lơp Canvas đươc sư dung trong cac chương trinh game hay cac ưng dung cân ve nhưng đôi tương riêng biêt, đăc điêm cua no la it tinh kha chuyên, ta thao tac vơi lơp nay đê ve cac đôi tương lên man hinh. Lơp Canvas cung co thê băt cac sư kiên băng nhân phim bâm. Vi la mưc thâp cho phep ngươi lâp trinh thoa mai thao tac vơi man hinh. Ca hai lơp trên đêu năm trong goi; import javax.microedition.lcdui.*;

Trong chương trinh game em lam co sư dung ca hai thanh phân trên, trong đo cac thanh phân mưc cao (Textbox, List, Form..) đê tao menu game con mưc thâp (Canvas) đê tao ra cac nhân vât va giao diên game.

Page 12

Page 13: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Phân 2

J2ME Game API

Phân môt đa noi tông quan vê lâp trinh cho di đông, sau đây em xin đươc băt tay vao luôn vơi môt mang kiên thưc rât thu vi cua J2ME la Game API. Phân hai gôm hai muc:

Giơi thiêu ly thuyêt Game API cua J2MECông cu lâp trinh Java Game cua Netbeans

1. J2ME Game API

Thưc tê ta hoan toan co thê lam game J2ME vơi kiên thưc vê lâp trinh di đông J2ME, va đăc biêt la thanh phân giao diên mưc thâp Canvas cua no. Lơp Canvas cho phep ta ve lên man hinh điên thoai, no hô trơ ve cac đôi tương như đương thăng, đương tron, tô mau môt vung man hinh, hay co thê copy môt vung man hinh vao vung đêm va đăt no vao chô khac …. Vơi nhưng công cu như thê ta co thê lam đươc môt chương trinh game tư đơn gian đên phưc tap. Tuy nhiên thơi gian lam game se rât tôn kem va khôi lương công viêc liên quan đên ve giao diên la rât lơn.

Qua tim hiêu em thây J2ME co môt goi hô trơ tôt cho lâp trinh game goi la chung la Game API. Cac lơp cua no năm trong javax.microedition.lcdui.game. Môt sô lơp quan trong cua no như: GameCanvas, Layer, Sprites, TiledLayer, va LayerManager.

GameCanvas: kê thưa tư lơp Canvas, co thê coi đay la man hinh điên thoai

Page 13

1 Lơp Canvas2 Lơp Layer3 Lơp Sprite4 Lơp TiledLayer5 Lơp LayerManager

Page 14: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Layer: it đươc sư dung trưc tiêp nhưng đươc kêt bơi lơp Sprite va TiledLayer

Sprites: lơp đê tao cac nhân vât va cac đôi tương chuyên đông TiledLayer: lơp đê tao cac khung canh khac nhau cua game va tao ban đô LayerManager: lơp quan ly cac Sprites va cac TiledLayer

Ta se đi phân tich tưng lơp môt.

1.1GameCanvas class

GameCanvas kêt thưa cac thuôc tinh va phương thưc cua lơp Canvas va co thêm môt sô phương thưc quan trong giup cho viêc giam thơi gian tinh toan nhơ đo tăng tôc đô refresh cua man hinh. No co thêm hai mơ rông so vơi Canvas la Polling Input – lươc bo đâu vao va Frame Buffer – dung vung đêm đê chưa nôi dung Canvas.

Polling InputPhương thưc int getKeyStates() lây thông tin vê phim bâm cua

điên thoai đê biêt ngươi chơi nhân nut gi. Đê hiêu ham nay ta cân năm ro câu tao phim bâm cua điên thoai.

Page 14

Page 15: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Hinh 7: Nokia Series 40 SDK, 3rd Edition

Trong game di đông ngươi ta thương sư dung cac phim chưc năng đê thao tac. Môt game hoan chinh co thê chi thao tac vơi 5 phim chưc năng la UP, DOWN, LEFT, RIGHT va phim FIRE (phim băn). Ta co thê dung cac phim sô tương ưng thay cho cac phim chưc năng như bang trên. Điên thoai bô tri cac phim chưc năng đăt gân nhau đê dê thao tac.

Page 15

Canvas

Cac phim sô(môt sô phim sô tương ưng vơi cac

phim chưc năng)

Nhom cac phim co nhiêu chưc năng

UP

DOWN

RIGHT

LEFTFIRE

2 UP8 DOWN4 LEFT6 RIGHT5 FIRE

Page 16: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Quay trơ lai vơi phương thưc getKeyStates(); nêu như môt phương thưc lây

ma cua phim nhân tương tư cua lơp Canvas la getKeyCodes() se kiêm tra tât

ca cac phim xem phim nao nhân thi phương thưc mơi cua lơp GameCanvas chi kiêm tra vơi cac phim chưc năng do đo thơi gian nhân biêt đươc phim bâm cua lơp GameCanvas se nhanh hơn cua lơp Canvas (ky thuât nay goi la Polling Input – lươc bo đâu vao).

Vi du nhân biêt phim bâm FIRE:

Hơn nưa viêc lăng nghe môt phim đươc bâm bơi ngươi dung phai đươc đăt trong đoan chương trinh lăp chinh cua chương trinh while(isRunning) { …} nên tân xuât sư dung no la rât lơn.

Frame BufferKy thuât nay sư dung phương thưc protected Graphics getGraphics(); đê lây nôi dung cua Canvas va cho vao bô đêm. Y tương cua

Frame Buffer la moi thao tac ve trên Canvas se đươc gian tiêp thao tac vơi vung đêm sau đo dung phương thưc public void flushGraphics() đê đây nôi

dung vung đêm ra Canvas. Vơi cai tiên nay thi Frame Buffer co tôc đô ve lên Canvas nhanh hơn la ve trưc tiêp lên Canvas vi thao tac vơi vung đêm nhanh la hơn thao tac vơi môt đôi tương Canvas cu thê, ta chi mât thêm hai thao tac la lây nôi dung Canvas vao đôi tương cua lơp Graphics vơi phương thưc get va đây nôi dung tư đôi tương Graphics vao Canvas vơi phương thưc flush.

Cung giông như thu tuc nhân biêt phim bâm thao tac ve lên Canvas cung đươc đăt trong đoan chương trinh lăp chinh nên tân xuât sư dung la rât lơn. Hơn nưa đê đam bao hinh chuyên đông đươc “trung thưc” – không bi giât thi sô lân refresh lai Canvas, tưc la sô lân ve lai phai lơn hơn 24 lân trong 1 giây!.

Page 16

int pattern = getKeyState();if ((pattern & GameCanvas.FIRE_PRESSED) != 0){ System.out.println("Fire!");}

Page 17: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

1.2Layer class

Trươc khi đi đên hai lơp quan trong tiêp theo la Sprite va TiledLayer ta phai noi vê khai niêm Layer. Lơp layer cua Game API rât đơn gian nhưng no đươc kê thưa bơi hai lơp Sprite va TiledLayer.Layer đươc hiêu la môt khôi hinh anh trong Game. Tât ca cac hinh anh co thê hiên đươc trên man hinh đêu kê thưa lơp nay. Cac Layer la nhưng anh ma ta co thê ve lên man hinh, ân đi, di chuyên hay la xăp xêp chung theo đô xâu (tưc la khi nhiêu anh chông cheo lên nhau thi anh co đô xâu lơn hơn se bi anh co đô xâu nho hơn che khuât). Cac phương thưc cua lơp Layer la

Public void setPosition(int x, int y): đăt vi tri cua Layer

Public void Move (int dx, int dy): dich chuyên Layer

Public void setVisible (boolean visible): thiêt lâp hiên/ân

Layer

Cac phương thưc nay đêu đươc kê thưa bơi cac lơp Sprite va TiledLayer.

1.3Sprite Class

Sprite la lơp cua nhưng đôi tương chuyên đông trong game. Sprite gôm nhưng chưc năng không chi ve va di chuyên cac hinh anh ma con co thê xac đinh va cham giưa cac Sprite vơi nhau va giưa Sprite vơi TiledLayer. Sprite cung co thê quay theo nhưng goc đô khac nhau. Sprite đươc tao tư môt anh băng phương thưc khơi tao sau:

public Sprite(Image image);

Reference Pixel – điêm tham chiêu cua môt SpriteTheo măc đinh thi vi tri đăt anh cua Sprite la TOP | LEFT tưc la căn theo mep trên va mep trai cua anh. Lơp Sprite hô trơ ta thay đôi vi tri tham chiêu nay băng phương thưc:

public void setRefPixelPosition(int x, int y)

Page 17

Page 18: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Vi du khi đăt môt Sprite vao vi tri (0, 0) trên Canvas nhưng nêu vi tri tham chiêu cua chung lai khac nhau thi vi tri tương đôi cua chung so vơi Canvas cung khac nhau. Vi du băng hinh ve :

Hinh 8: Điêm tham chiêu cua Sprite

Trong hinh 1 thi vi tri tham chiêu măc đinh la (0, 0) con trong hinh 2 vi tri tham chiêu la (20, 20).

Transforms – quay goc đôSprite cho phep chuyên xoay hinh anh đi môt goc nao đo băng phương thưc :

public void setTransform(int transform);

Co 8 kiêu xoay: TRANS_NONE, TRANS_ROT90, TRANS_ROT180, TRANS_ROT270, tương ưng vơi 0, 90, 180, 270 đô theo chiêu kim đông hô.TRANS_MIRROR, TRANS_MIRROR_ROT90, TRANS_MIRROR_ROT180, TRANS_MIRROR_ROT270: tương ưng vơi xoay ngươc theo gương, rôi xoay môt goc nao đo theo chiêu kim đông hô.

Animation – chuyên đông

Tao hinh anh chuyên đông cua nhân vât băng cach gep nôi liên tiêp cac hinh anh gân giông nhau. Vi du trong game em lam co sư dung hinh anh nhân vât (Player) va chuyên đông ơ đây tư quay tron tai chô cua no. Đê tao đươc hinh anh quay như vây thi lam như sau:

Page 18

Hinh 1 Hinh 2

Page 19: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Hinh 9: Nhân vât Player trong chương trinh game

Ơ trên co môt anh lơn chưa 16 anh nho đươc đanh sô tư 0 theo thư tư tư trai sang phai va tư trên xuông dươi, theo thư tư nay thi anh trên tao nên chuyên đông quay cua nhân vât. Gia sư kich thươc cua tâm hinh lơn la 64x64 pixel thi kich thươc cua môi hinh nho la 16x16 pixel. Lơp Sprite cung câp môt ham tao nưa đê tao cac Sprite co chuyên đông.

public Sprite(Image image, int frameWidth, int frameHeight);

image ơ đây la anh lơn (kich thươc 64) frameWidth la chiêu rông cua môi anh nho (16) frameHeight la chiêu cao cua môi anh nho (16)

bây giơ nêu muôn co anh chuyên đông ta chi tao môt mang co sô phân tư la sô anh đê tao chuyên đông, cac gia tri cua mang la chi sô cua cac anh nho cân ghep tương ưng. Ta goi chuôi đo la Frame Sequences.Vi du đê tao môt Sprite chuyên đông gôm 16 anh nho tư anh lơn trên đê tao thanh môt chuôi hinh anh chuyên đông quay tron ngươc chiêu kim đông hô, trươc hêt ta phai tao ra đôi tương sprite

Sprite sprite = new Sprite (playerImage, 16, 16);

Page 19

Page 20: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Sau đo tao ra mang cac chi sô thê hiên cho môt chuôi cac frames như sau:

Int[] frameSequence = { 0, 1, 2, 3, 4, 5 ,6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };

Cuôi cung la gan chuôi anh cho đôi tương sprite vưa khai bao.Sprite.setFrameSequence (frameSequence);Kêt qua cua cac bươc thao tac trên la môt chuôi cac anh gân giông nhau xêp liên tiêp nhau:

Hinh 10: Chuôi anh tao chuyên đông cho Sprire

Nêu muôn cho Sprite hiên thi môt frame cu thê ta dung phương thưc: Sprite.setFrame(int frameIndex);

Ta co thê đinh hương chuyên đông băng cac phương thưc:public void nextFrame()public void prevFrame()

Rectangle Collision – sư va cham cua cac sprite co đương biên hinh chư nhât

Trong lâp trinh game thi kiêm tra sư va cham giưa cac nhân vât hoăc giưa nhân vât vơi cac đôi tương khac thương xuyên đươc tinh đên. Vi du đê cho nhân vât không phep đươc di chuyên ra ngoai khung man hinh thi phai nhân biêt đươc khi nao nhân vât va cham vơi biên đê nêu co cham đương biên thi se đôi hương di chuyên ngươc lai. Môt vi du khac, đê co thê tinh điêm cho ngươi chơi thi phai nhân biêt đươc khi nao đan băn trung quân đich. Lơp Sprite hô trơ 3 loai nhân biêt va cham vơi 3 đôi tương khac nhau la Image, Sprite va TiledLayer.

public boolean collidesWith(Image image, int x, int y, Boolean pixelLevel);

public boolean collidesWith(Sprite s, Boolean pixelLevel);

Page 20

Page 21: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

public boolean collidesWith(TiledLayer t, Boolean pixelLevel);

Phương thưc thư nhât cho biêt liêu co sư va cham giưa Sprite vơi môt anh không. Không giông cac lơp kê thưa tư lơp Layer, lơp hinh anh không co điêm tham chiêu do đo ta phai xac đinh vi tri x va y cua anh. Tham sô cuôi cung xac đinh kiêu va cham la tinh theo tưng điêm anh hay tinh theo đương biên hinh chư nhât cua Sprite, măc đinh gia tri nay la false tưc la chê đô xac đinh va cham ơ đây la xem xet đương biên cua Sprite va anh co giao nhau hay không.

Phương thưc thư hai cho biêt liêu Sprite co va cham vơi môt Sprite khac không phương thưc nay chi đoi hoi hai tham sô: tham sô Sprite (đa bao gôm vi tri anh cua no trên man hinh) va tham sô pixelLevel thi tương tư phương thưc thư nhât.

Phương thưc cuôi cung xac đinh liêu Sprite co va cham vơi môt TiledLayer nao đo hay không. Phương thưc nay dung đê xac đinh Sprite co va cham vơi đôi tương nao đo trong ban đô hay không? Chy y cac đôi tương trong ban đô ơ đây chi không la cac nhân vât chuyên đông.

Theo măc đinh thi chê đô xac đinh va cham la theo đương biên hinh chư nhât cua đôi tương. Chê đô nay co đăc điêm la thao tac nhanh tuy nhiên va cham chi mang tinh tương đôi, vi du co môt Sprite kich thươc 32x32 tuy nhiên phân hinh anh cua Sprite đo lai chi năm trong pham vi han hep tư (8, 8) (24, 24) trong khung đương biên cua Sprite.

Đê khăc phuc nhươc điêm nay lơp Sprite cung câp môt phương thưc cho phep xac đinh lai khung hinh chư nhât.

Page 21

Sprite

3216

Page 22: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

public void defineCollisionRectangle(int x, int y, int width, int height);

Vơi vi du trên đê xac đinh va cham vơi đô chinh xac cao hơn hơn thi ta đinh nghia lai khung hinh chư nhât như sau:

Sprite.defineCollisionRectangle (8, 8, 16, 16);

Bây giơ nhân biêt va cham se chinh xac hơn. Măc du vây tinh toan va cham vân dưa trên biên hinh chư nhât nho hơn. Đê co thê xac đinh chinh xac sư va cham ta dung chê đô xac đinh va cham theo Pixel.

Pixel Collision – va cham theo bitVa cham theo Pixel xay ra khi cac điêm anh cua môt bitmap giao vơi cac điêm anh tương ưng cua môt bitmap khac. Tuy nhiên chê đô nay đoi hoi nhiêu chi phi vê thơi gian hơn phương phap xac đinh theo đương biên chư nhât.

Khai niêm Tile Graphics – cac manh đô hoa

Đô hoa cua game đươc chia lam hai loai la nhân vât (Sprite) va khung nên (background graphics). Sprite như đa noi ơ trên la nhưng nhân vât chuyên đông trong game, thi background đươc đinh nghia la phân đô hoa bên dươi cac nhân vât va la môi trương đê nhân vât hoat đông.

Môt chương trinh game thương bao gôm rât nhiêu khung canh đô hoa nôi tiêp nhau. Môt khung canh lai gôm môt sô lương lơn cac đôi tương đô hoa: Sprite, Tile, Graphics Text … do đo phai co môt cach thưc lưu trư chung sao cho tiêt kiêm đươc bô nhơ vôn han hep cua điên thoai.

Vi du đây la môt vai khung canh trong game Alpha wing:

Page 22

Page 23: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Hinh 11: Môt sô khung canh trong game Alpha Wing

Nhân xet: Nhin vao hinh ve trên ta thây kha nhiêu phân cua man hinh nên đươc lăp lai nên thay vi sư dung bô nhơ lưu tât ca cac hinh anh trên ta lưu chung dươi dang ma trân cac sô nguyên trong đo môi phân tư trong ma trân tương ưng vơi môt tile trong anh lơn.

Vi du chi sư dung môt anh “lơn” co hai tile thi môt ma trân sau đo ta co thê ve đươc môt hinh nên.

Hinh 12: Môt anh gôm hai tile

Đanh sô cac tile nay tương ưng la 0 va 1 thi vơi môt ma trân sau:

Page 23

Page 24: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Ta se co tương ưng môt background:

Hinh 13: Môt background đươc xây dưng tư ma trân

Băng cach sư dung cac tile đê tao background ta co thê tao ra nhưng ban đô mơi ma không cân thêm anh.

1.4 TiledLayer class

Môi lơp TiledLayer co môt anh, anh nay đươc chia nho thanh cac tile theo quy tăc ơ trên, môt TiledLayer no gôm môt mang cac tile đăt theo thư tư nhât đinh. Anh cua TiledLayer đươc phân chia ra nhiêu tiles va đươc đanh sô. Môt ban đô co thê đươc tao nên tư môt TiledLayer hay nhiêu TiledLayer.

Ham tao cua lơp TiledLayer như sau:

public TiledLayer(int columns, int rows, Image image, int tileWidth, int tileHeight);

Page 24

Page 25: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Colums la sô côt cua TiledLayer, hay sô tiles trong môt hang Rows la sô hang cua TiledLayer, hay sô tiles trong môt côt Image la anh cua TiledLayer tileWidth va tileHeight cho biêt kich thươc cua môt tile

Môt sô phương thưc thao tac vơi TiledLayer:

Khi muôn thay đôi nôi dung môt tile cua TiledLayer ta co phương thưc:public void setCell(int col, int row, int tileIndex);

Y nghia la đăt tile co vi tri (col, row) trong TiledLayer vơi môt tile co chi sô tileIndex.

Ta cung co thê đăt môt miên chư nhât trong TiledLayer băng môt tile băng phương thưc:public void fillCells(int col, int row, int numCols, int numRows, int tileIndex);

col, row, numCols, nunRows xac đinh miên chư nhât cân phu tile tileIndex la chi sô cua tile đem phu.

Đê xac đinh chi sô môt tile trong TiledLayer ta dung phương thưcpublic int getCell(int col, int row);

Tile Animation – tile đông

Tile phân lơn đươc dung đê tao ra cac đôi tương tinh như ban đô, tuy nhiên đê tao ra môt khung nên thu vi ta nên co cac tile đông (cac tile nay đơn gian la cac tiles thay đôi hinh anh cua no sau môt chu ki ve lai man hinh). Cac tile đông la nhưng đôi tương hoat đông không chiu sư điêu khiên cua ngươi chơi ma hoat đông theo chu ki. Cac bươc đê tao môt tile đông như sau:

Đê xac đinh tile nao la tile đông trong môt TiledLayer ta dung phương thưc:public int createAnimatedTile(int staticTileIndex);

staticTileIndex la chi sô cua tile trong TiledLayer

Page 25

Page 26: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Sau môi lân ve lai man hinh, cac TiledLayer đươc ve lai va do đo cac tile cua no cung đươc câp nhât theo. Đê thay đôi vi tri cua môt tile vơi môt tile ơ vi tri khac ta dung phương thưc:

public void setAnimatedTile(int animatedTileIndex, int staticTileIndex);

Trong phương thưc trên thi tile co chi sô animatedTileIndex se đươc câp nhât hinh anh cua tile co chi sô staticTileIndex.

1.5 LayerManager class

Lơp nay quan ly tât ca cac đôi tương khac, thay vi trưc tiêp xac đinh vi tri đê ve cac đôi tương lên man hinh băng phương thưc paint(), ta tao môt đôi tương LayerManager va cho vao no tât ca cac đôi tương băng phương thưc:

public void append(Layer l);

Đôi tương append co thê la đôi tương Layer hoăc nhưng đôi tương cua lơp kê thưa tư Layer như Sprite va TiledLayer.

Ơ đây ta vân ve tưng đôi tương lên man hinh nhưng khac so vơi ve trưc tiêp lên man hinh ơ chô cac qua trinh ve đươc thâu tom lai chi trong đôi tương LayerManager ma không ve rơi rac tưng thanh phân môt. Viêc ve tât ca cac đôi tương đông loat như vây se tôt cho tinh thông nhât xuât hiên cua cac đôi tương khac nhau trên man hinh.

Lơp LayerManager cung câp cac phương thưc quan ly Layer như: insert (Layer l, int index) remove (Layer l) getLayerAt (int index)

Phương thưc thư nhât chen môt Layer vao lơp ơ vi tri co chiêu xâu index. Ơ đây môt layer chen vao co tinh đên chiêu sâu ma no đươc đăt (layer co chiêu sâu lơn hơn se bi che bơi nhưng layer co chiêu xâu nho hơn). Do đo viêc đăt môt layer lên

Page 26

Page 27: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

man hinh khi sư dung LayerManager se không phu thuôc vao thư tư viêt code, ma phu thuôc vao biên index ma truyên vao.

Tile Studio (TS)- Công cu thiêt kê cac đôi tương đô hoa đơn gianEm xin giơi thiêu môt công cu hô trơ đô hoa cho cac game 2D vưa va nho ma em đa sư dung cho chương trinh game cua minh.Chưc năng chinh cua TS la:

Ve cac tile set (bô cac tile) co kich thươc đa dang Ve ban đô dưa vao cac tile set đa thiêt kê Export ra anh (.bm; .png) đê dung cho game Ve cac nhân vât, hô trơ lam ra cac nhân vât chuyên đông

Đăc biêt phân mêm chi co khoang 600 Kb va hoan toan miên phi.

Page 27

Page 28: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Phân 3

Tông Quan, Kich Ban Va Phân Tich Lâp Trinh Game

1. Tông quan vê lam GamePhân nay em se noi vê phân loai game, cac đoi hoi vê môt chương trinh game, va cuôi cung la cac bươc phat triên game.

1.1Phân loai game

Thê giơi game rât đa dang va đươc phân loai như sau: Action game: Game hanh đông: đoi hoi nhiêu đâu tư liên quan đên đô hoa

(Game đua xe Harley). Game Puzzle: Game đô – thương đơn gian vê đô hoa (Game Tetris) Adventure Game: Game phưu lưu – (Game Diablo) Strategy Game: Game chiên thuât – la game rât đươc ưa chuông

(Warcraft ..) nhưng game nay kho lam va đoi hoi nhiêu AI. Traditional Game: Game truyên thông – vi du đanh bai, xuc săc..

1.2Nhưng đoi hoi chung cua môt game

Tuy vao tưng loai game ma co nhưng đoi hoi nay khac nhau vê mưc đô: Fun – Chơi game phai vui nhôn Addictive – Game phai co tinh cuôn hut Compelling – Game co tinh canh tranh Commercial successful – Cuôi cung game phai thanh công trên thi trương

1.3Quy trinh phat triên game

Em se không đi xâu vao nhưng phân nay tuy nhiên cung co môt sô chu y quan trong khi lam game.Lam game cung giông như lâp trinh cac ưng dung khac, vân đê tao ra môt khuôn mâu đung đăn cho viêc phat triên ngay tư đâu la rât quan trong. Thay vi co y tương

Page 28

Page 29: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

va băt tay vao viêt code luôn, ta phai tao môt khung sươn chi tiêt cho viêc lâp trinh. No lam cho viêc lâp trinh trơ nên sang sua hơn, va phu hơp vơi lam viêc nhom. Công cu đê lam viêc nay tôt co thê la ngôn ngư mô hinh hoa như UML. Khi đa co môt mô hinh tôt đê nhin vao thi viêc lâp trinh trơ nên đơn gian hơn bơi mô hinh giup ta co đươc môt cai nhin tông quan va hê thông. Nhin vao mô hinh thi moi thư gân như sang to. Hơn thê nưa mô hinh con giup viêc nâng câp nâng câp game dê dang hơn.

Sau khi co khuôn mâu, công viêc con lai la phat triên game. Thương thi thơi gian cho hai công viêc nay la ngang nhau. Khi lam game J2ME co môt sô chu y quan trong la: ta cân phai theo doi kich thươc cua file JAR (file nen đê cai đăt vao điên thoai) trong qua trinh lam bơi sư dung qua nhiêu anh se lam cho kich thươc file JAR tăng lên nhanh chong.

Va môt câu noi em thây rât hay: “The secret to making great games is to make bad games first”.

2. Cac Nhân Vât Game Va Phân Tich Lâp Trinh

Phân nay em giơi thiêu vê cac nhân vât va cach tao ra nhân vât dươi goc đô lâp trinh:

2.1Cac nhân vât trong game va đăc điêm:

1. Player (Ngươi chơi) co nhưng chưc năng sau:a. Di chuyên trai phai lên xuôngb. Quay tai chô theo hai chiêu – đê thiêt lâp chê đô bao vê.c. Găp đich trong ban kinh băn thi co kha năng băn đan theo hai chê đô:

tư đông hay nhân phim.2. Turret (phao) – nhân vât nay không di chuyên.

a. Băn Player nêu player năm trong ban kinh băn cua no3. Black

a. Di chuyên trai phai lên xuôngb. Đi theo quy đao bât ki trong ban đô

Page 29

Page 30: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

c. Găp Player trong ban kinh băn thi băn4. Fighter (Nhân vât nay se bô xung sau nay)

a. Di chuyên trai phai lên xuôngb. Đi va tim Player nêu player năm trong vung phat hiên cua noc. Găp Player trong ban kinh băn thi băn

Cac đăc điêm cua cac nhân vât:Chương trinh em cai đăt đưa vao 3 nhân vât la Player, Black, Turret. Trong đo Player do ngươi chơi đam nhân. Black va Turret do may điêu khiên va ngươi chơi se băn nhau vơi may vu khi sư dung đêu la đan (Bullet). Cac nhân vât đươc xây dưng vơi nhưng đăc điêm sao cho phu hơp nhât, không bên nao qua manh hay qua yêu, môi nhân vât đêu co điêm manh va yêu điêm riêng. Đăc điêm cua nhân vât Player la di chuyên nhanh, tôc đô băn đan nhanh, tâm xa lơn kha năng sat thương trung binh va mang cung lơn tuy nhiên lai đơn đôc chiên đâu môt minh. Nhân vât Black va Turret cung môt phe, Black co đăc điêm la không bao giơ hêt, no chêt đi rôi lai sinh ra, di chuyên nhanh, tôc đô băn đan trung binh, tâm xa trung binh kha năng sat thương kem va mang yêu. Turret co đăc điêm la không di chuyên, tôc đô băn châm, kha năng sat thương lơn, tâm xa rât lơn va mang lơn.

Đo la tông quan vê cac nhân vât, vân đê bây giơ la xây dưng cac nhân vât băng ngôn ngư lâp trinh.

2.2Phân tich cac nhân vât theo lơp

Vi cac nhân vât co môt sô chưc năng giông nhau va cung co môt sô chưc năng khac nhau. Vi du như Black va Fighter co hai điêm chung la co co thê di chuyên theo bôn hương, va khi găp Player thi băn; va co môt điêm khac nhau vê cach thưc di chuyên. Do đo ta sư dung phương phap lâp trinh kê thưa lơp trưu tương.

Tao môt lơp trưu tương (abstract class) mang tên la Actor. Tât ca cac nhân vât trong game đêu kê thưa lơp trưu tương nay. Lơp co môt sô thuôc tinh như: toa đô (x, y) trên man hinh, chiêu rông va chiêu cao cua nhân vât, …va môt sô phương thưc như di chuyên theo bôn hương (phao không di chuyên thi se đươc đanh dâu

Page 30

Page 31: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

không dung phương thưc nay), phương thưc tư nô khi hêt mang. Thêm môt sô phương thưc liên quan đên va cham.

Tao lơp nhân vât Player kê thưa lơp trưu tương Actor, va co thêm chưc năng tư quay vong quanh no (chê đô chông đan cua Player).

Tao lơp nhân vât Turret kê thưa lơp trưu tương Actor, va co thêm chưc năng đinh hương băn đê băn cac đôi tương đang di chuyên.

Tao lơp nhân vât Black kê thưa lơp trưu tương Actor, va co thêm chưc năng di chuyên bât ki trong pham ban đô.

Tao lơp nhân vât Fighter (Mơ rông)kê thưa tư lơp trưu tương Actor, va co thêm chưc năng xac đinh vi tri Player tư xa va di chuyên theo Player khi đôi tương đi vao vung ban kin băn cua no.

Đan cung đươc coi la nhưng nhân vât (Sprite) tuy nhiên do nhiêu khac biêt nên no không kê thưa lơp trưu tương Actor (Sô lương đan trong môt thơi điêm la kha lơn vi vây lơp đan phai đươc thiêt kê riêng). Lơp đan co thuôc tinh quan trong nhât la hương di chuyên, biêt hương di chuyên ta co thê ve đươc đương đi cua đan vi điêm băt đâu cua đan la nhân vât băn ra no.

Chy y: J2ME không hô trơ cac phep tinh dâu phay đông vi tôc đô xư ly cua phân lơn điên thoai la han chê. Co môt giai phap đưa ra la quy đinh chiêu băn cua đan chi theo môt sô chiêu cô đinh. Em quy đinh sô chiêu băn la 16.

Page 31

Page 32: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Nhân xet: viêc han chê 16 chiêu như trên lam cho cac nhân vât băn không chinh xac, tuy vây đo lai la lơi thê vi đoi hoi sư căn chinh cua ngươi chơi đê co thê băn trung đich.

Cac nhân vât co nhưng thuôc tinh khac nhau như: Sô mang – chăng han như nhân vât phao (Turret) se co “Sưc khoe” lơn nhât. Ban kinh băn - vi du nhân vât phao (Turret) se co tâm băn xa nhât, sau đo la

Player… Khoang thơi gian dưng giưa hai lân băn: Player co thơi gian dưng la nho

nhât – co thê băn đươc nhiêu đan hơn so vơi cac nhân vât khac trong môt khoang thơi gian.

Cac thuôc tinh nay đêu đê dang static final (la cac hăng sô tinh) lưu riêng trong môt interface va co thê truy câp đươc truy câp bơi bât ki lơp nao thưc hiên interface đo.

2.3 Môt sô vân đê đăt ra va hương giai quyêt:

Đê cac nhân vât co thê hanh đông đông thơi thi môi nhân vât sinh ra phai co môt Thread riêng, nhân vât đo se thưc hiên hanh đông cua minh khi Thread cua no đươc câp phat CPU. Vơi đan thi nêu giơi han môi nhân vât chi co thê băn ra môt viên đan trong trong man hinh thi quan ly đan se đơn gian hơn, thuôc tinh đan co thê găn ngay vao lơp nhân vât cung vơi phương thưc liên quan đên no. Tuy nhiên, nêu cho phep môt nhân vât co thê băn ra nhiêu đan chay trong man hinh thi se tao môt lơp đan riêng se dê kiêm xoat sô đan trong man hinh. Thêm nưa chưc năng băn đoi hoi ta phai nhân biêt đươc viên đan đo do nhân vât nao băn ra (xem như đan cua Player se không “sat thương” đươc chinh no, va cung như vây đôi vơi cac nhân vât khac). Tư yêu câu trên ta se phai phân chia đan ra thanh cac loai đan khac nhau theo nhân vât.

Page 32

Page 33: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Phân 4Xây dưng mô hinh UML cho chương trinh

Em không đi vao giai thich cac khai niêm cua ngôn ngư nay ma đi trưc tiêp ap dung cho cho bai luôn. Công cu em sư dung la UML trong Netbeans.

Project UML đươc đê trong cung thư muc

1 Use Case DiagramLa biêu đô chi ra sư tương tac giưa Use Case (UC) va cac tac nhân. Tac nhân co thê la con ngươi, hê thông hay thơi gian. Ơ đây cac nhân vât la cac tac nhân gây ra hanh đông. Biêu đô Use Case nhăm muc đich mô ta yêu câu chưc năng cua hê thông va thương đươc xây dưng qua trao đôi giưa khach hang va ngươi phat triên hê thông.Vi chương trinh đơn gian nên em chi dung môt Use Case:

Hinh 14: Use Case cac nhân vât va cac phương thưc cua chung

Giai thich:

Page 33

Page 34: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Lơp Actor co 5 hanh đông: Move Up, Move Down, Move Left, Move Right, va Explosion (nô). Ơ đây môi quan hê la kêt hơp (Assosiation).

Ba lơp nhân vât: Player, Black, Turret kê thưa tư lơp trưu tương Actor – môi quan hê ơ đây la kê thưa (Generalization).

Môi đôi tương nhân vât co môt phương thưc băn riêng, ca ba phương thưc nay sư dung lơp đan (tên la Fire – đan cung la nhân vât vi no co thê di chuyên va co thuôc tinh va cham).

Player va Turret co thêm phương thưc quay vong (Spinning) con Black co thêm phương thưc di chuyên bât ki trong ban đô.

2 State DiagramBiêu đô trang thai cho biêt thông tin vê trang thai khac nhau cua đôi tương, thê hiên cac đôi tương chuyên giưa cac trang thai như thê nao. Biêu đô trang thai chi ra chu ki sông cua đôi tương.

Page 34

Page 35: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Hinh 15: Use Case chuyên trang thai cua game

Đây co thê xem la môt bô khung cac trang thai cua game, vi du khi môt ngươi mơi băt đâu chơi game se co môt man hinh giơi thiêu va co menu đê lưa chon, tran thai đo cua game goi la intro game state.

Kê đên khi chon new game đê băt đâu, môt man hinh cho biêt cac mưc chơi. Đo la intro level state.Trong luc đang chơi game thi đên trang thai Playing, khi tam dưng game thi đên trang thai pause game state.Khi ngươi chơi thua thi đên trang thai Game Over va cho phep lưa chon thoat hay không.Nêu ngươi chơi thăng thi đên trang thai Game Score cho biêt điêm cua ngươi chơi, khi đang ơ trang thai game score ngươi chơi co thê xem tông kêt điêm cua nhưng ngươi chơi khac thi đên trang thai High Scores lưu giưu nhưng điêm cao nhât.

Page 35

Page 36: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Chu y trang thai Playing va Pausing co thê chuyên qua nhau con vơi nhưng trang thai khac thi không. Vi du ta không thê đi tư trang thai Game over đên trang thai Game Score đươc.

3 Class DiagramBiêu đô lơp cho môt cach nhin tinh vê câu truc trưu tương cua hê thông, cu thê la mô hinh hoa dươi dang cac lơp, cac goi va môi quan hê giưa chung.

.1 Class Diagram cua cac nhân vât trong game Biêu đô gôm bôn lơp: Constants, Actor, SpritePlayer, SpriteBlack, SpriteTurret. Mô hinh nay chu yêu noi lên môi quan hê kê thưa cua cac lơp: lơp trưu tương Actor thưc hiên (implementation) Constants, con ba lơp nhân vât SpritePlayer, SpriteBlack, SpriteTurret lai kê thưa (extends) tư lơp trưu tương Actor.

Hinh 16: Môi quan hê lơp giưa cac nhân vât

Page 36

Page 37: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Đây la mô hinh môi quan hê lơp cua cac nhân vât trong game đươc lây tư project UML trong cung thư muc.Giai thich cac lơp:

Lơp Interface Constants chưa cac hăng sô tinh đươc sư dung trong tât ca cac lơp khac. Trong lâp trinh Game J2ME khuyên khich dung cac biên tinh vi tôc đô truy câp nhanh hơn biên thương va biên tinh chi co môt thê hiên la chinh no nên tiêt kiêm bô nhơ.

Lơp trưu tương Actor thưc hiên lơp Constants va chưa cac thuôc tinh quan trong la:

Sprite: lưu giư đôi tương Sprite nhân vât. Môi môt lơp kê thưa tư lơp nay tao ra môt Sprite mơi. lives la sô mang cua môi nhân vâtSPEED = 10 la tôc đô cua nhân vât

Cac phương thưc quan trong cua lơp:Môt phương thưc khơi tao Sprite trong GameScreen4 phương thưc di chuyên (Move_)getX(), getY() lây vi tri cua nhân vâtspriteCollidesWith_() xac đinh nhân vât co cham khônggetActorDirection(): xac đinh hương di chuyên cua nhân vât khac nhăm muc đich bănmakeExplosion(): tao hiêu ưng nô

Lơp SpritePlayer kê thưa lơp Actor do đo cung dung đươc cac tham sô trong Interface Constants. No co thêm 3 thuôc tinh la

autoFire:xac đinh chê đô tư băn tư đôngscore : sô điêm ghi đươclastTimeFired: thơi gian băn trươc đo, dung đê giơi han lương đan băn ra trong môt khoang thơi gian.

Cac phương thưc bô xung cho lơp Actor ma no kê thưa:Phương thưc khơi tao kê thưa tư ActorRun(): la phương thưc liên quan đên Thread cua lơp nayFire(): băn vao cac đôi tương Actor khac, đôi tương tra vê la đan (Bullet)getScore(): lây sô điêm hiên tai cua ngươi chơi

Page 37

Page 38: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Hai lơp SpriteBlack va SpriteTurret cung kê thưa tư lơp Actor va co thêm cac thuôc tinh va phương thưc bô xung riêng cho no, vi du thuôc tinh lastDirection cua SpriteBlack lưu hương đi trươc đo cua nhân vât đê nhân vât không bi đi luân quân. Phương thưc run() cua lơp nay chay trong môt Thread va nhân vât Black co môt giai thuât đê đi long vong bât ki khăp ban đô. Ca hai lơp đêu co phương thưc fire (băn) đôi tương nhăm vao chi la Player…đo la nhưng y chinh, em không đi sâu vao code.

.2 Class diagram cua lơp giao diên

Chương trinh co 3 lơp lam vê giao diên:1. GameDesign: gôm cac thuôc tinh va cac phương thưc public chuyên vê

tao ra cac đôi tương đô hoa như Sprite, TiledLayer, Image ...2. VisualMIDlet: ban chât đây la môt MIDlet vi no đươc mơ rông tư lơp

MIDlet cua J2ME. Lơp nay co nhiêm vu tao ra giao diên menu cua game, đông thơi co môt sô phương thưc cho chưc năng High Score cua game.

Chưc năng High Scores lưu giư điêm cua 3 ngươi chơi co điêm sô cao nhât trong may. Cac điêm sô đươc lưu trong bô nhơ RMS cua may, vi thê cac thông sô nay vân lưu lai ngay ca khi ta tăt ưng dung.

3. GameScreen: ban chât đây la môt GameCanvas lơp nay chưa tât ca cac đôi tương đô hoa lây tư lơp GameDesign. Lơp nay co rât nhiêu phương thưc như:

1. Ve cac đôi tương lên man hinh2. Chơ va xac nhân phim bâm3. Tao cac hinh anh chuyên đông

i. Cac nhân vâtii. Đan

4. Xac nhân trang thai cua game: Game Over, Game Victory, Running

5. Lơp nay la co môt phương thưc run() trong đo co vong lăp While (Running){ … } thưc hiên tât ca cac thao tac ơ trong vong lăp đo, kê ca goi Thread cua cac lơp nhân vât. Qua trinh chơi game chi xay ra giưa hai ngoăc moc đo.

Page 38

Page 39: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Môi quan hê cua ba lơp đươc mô ta qua hinh ve:

Đươc hiêu la lơp MIDlet va lơp GameScreen se co quan hê kêt hơp (Association) vơi nhau (VisualMIDlet <-> menu game va GameScreen <->giao diên chơi game co thê gưi thông diêp đên nhau). Con lơp GameDesign chi co quan hê môt chiêu vơi lơp GameScreen.

4 Môt sô luông quan trong trong chương trinh

4.1Luông chinh

Trong lơp GameScreen (GameCanvas) co môt luông chinh thưc hiên tât ca cac công viêc trong đo – Main Loop

While (running){+Xư ly sư kiên nhân phim+Câp nhât man hinh+Ve lai man hinh+Xư ly thơi gian tinh toan cho môi vong lăp

}

Chu y: khi lam game co môt yêu tô ta phai quan tâm la tôc đô refresh lai man hinh. Đươc tinh băng sô lân trong môt giây. Thương sô lân refresh lai man hinh trong 1 giây la 20 la châp nhân đươc. Khi đo thơi gian cho môt vong lăp se la 1000/20 = 50 ms. Khi ap dung vao môt tinh huông cu thê, nêu thơi gian cho môt vong lăp chinh ma nho hơn 50 ms thi vơi muc đich danh CPU cho cac chương trinh khac ta se tam dưng Thread nay trong khoang thơi gian sao cho khi no chơ xong thi vưa hêt 50 ms. Trương hơp thơi gian cho môi vong lăp chinh lơn hơn 50 thi chi nhương tam thơi xư ly cho cac chương trinh đang chay khac.

Page 39

VisualMIDlet

Properties

Methods

GameScreen

Properties

Methods

GameDesign

Properties

Methods

Page 40: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Hinh 17: Luông xư ly chinh trong chương trinh

Page 40

Gia i thich: Đi tư dươi lên trên, nêu biên running la sai thi thoat khoi chương trinh. Ngươc lai, vong lăp se đươc thưc hiên môt lân lân lươt cac công viêc:- Lây man hinh vao bô đêm- Lây thơi gian băt đâu vong lăp- Lây thông tin vao như: sư kiên

phim bâm đông thơi câp nhât cho layerManager.

- Đây toan bô thông tin tư layerManager vao vung đêm man hinh.

- Đây toan bô thông tin tư vung đêm man hinh lên man hinh.

- Tinh thơi gian cho môt vong lăp (băng thơi gian hiên tai – thơi gian băt đâu).

Ơ đây ta kiêm xoat đươc thơi gian cho môt vong lăp la 50 mili giây. Nêu điêu kiên timeTake < 50 la đung (thơi gian môt vong lăp chưa đên 50ms) thi ta se cho dưng Thread nay môt khoang thơi gian la (50 - timeTake). Ngươc lai Thread nay se tam thơi nhương xư ly cho cac thread khac.

Page 41: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

4.2 Luông sư ly phim bâm

Hinh 18: Luông xư ly phim bâm trên canvas

Giai thich: phương thưc getKeyStates() cua lơp GameCanvas lây ma phim tư ngươi chơi. Sau đo xư ly theo tưng tinh huông cu thê. Nêu la phim FIRE thi Player đươc phep băn. Cac nhân vât khac thi luôn trong trang thai băn.

Nêu phim nhâp vao la RIGHT thi ta lai xet tiêp điêu kiên hương đi luc trươc (lastDirection) đo co phai la RIGHT không. Nêu đung thi Player di chuyên luôn, nêu không thi câp nhât lastDirection va ta phai thay đôi hương đi cho nhân vât. Vi

du player thay đôi hương đi tư UP: RIGHT . Sau đo vân đươc di chuyên sang phai.

Page 41

Page 42: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Tiêp theo nêu Player va cham vơi biên hoăc vơi cac đôi tương khac thi no phai đi theo hương ngươc lai tưc la MoveLeft().

Page 42

Page 43: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

4.3 Luông xac đinh đôi tương băn cua Player

Hinh 19: Luông xac đinh đôi tương băn cua Player

Mô hinh trên noi lên tinh ưu tiên băn Turret cua Player. Player tim turret nao gân nhât. Nêu turret gân nhât đo ma năm trong ban kinh băn thi băn. Sau đo Player tiêp tuc tim Black nao gân nhât, nêu black đo năm trong ban kinh băn thi băn. Sau đo thoat ra ngoai phương thưc băn.

Page 43

Page 44: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

4.4 Luông quan ly đan cua Player trong man hinh.

Mô hinh hoat đông quan ly đan trong man hinh kha phưc tap nên em chia lam 3 phân:

1. Nêu đan bay ra khoi man hinh xoa đan khoi bô nhơ2. Duyêt qua cac nhân vât Black xem co trung đan không3. Duyêt qua cac nhân vât Turret xem co trung đan không

Hinh20: Sơ đô hoat đông khi đan ra ngoai man hinh

Trương hơp viên đan thư i đo chưa ra khoi man hinh ta phai quan tâm no co va cham vơi đôi Black hay Turret hay không. Nêu co thi phai xư ly như thê nao?

Biêu đô sau đây duyêt qua tât ca cac nhân vât Black va xac đinh no co va cham vơi viên đan đang xet hay không. Chy y viêc xư ly va cham vơi Turret va black la gân giông nhau nên chi xet Black.

Page 44

Duyêt qua tât ca sô đan cua Player, goi moveBullet la viên đan thư i. Viên đan nay thưc hiên nhiêm vu di chuyên vê phia trươc theo hương đa xac đinh trươc. Bơi khi khơi tao cho môt đôi tương đan tư lơp Bullet, no đa xac đinh ro hương di chuyên.

Sau đo xac đinh viên đan con năm trong man hinh không. Nêu không thi remove no khoi bô nhơ va man hinh. Nêu chưa ra khoi man hinh. Ta phai quan tâm đên sư va cham.

Page 45: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

4.5 Luông xư ly khi đa n chưa ra khoi man hinh

Hinh 21: sơ đô hoat đông khi đan cua Player chưa ra ngoai man hinh

Vơi môi viên đan cua Player ta duyêt qua tât ca cac nhân vât Black xem co va cham không. Nêu không va cham thi duyêt qua cac Turret, nêu nhân vât thư j co va cham thi ta giam mang cua Black j đi 1 va tăng điêm cua Player lên 1. Sau đo xet sô mang cua Black j đa đa <= 0 chưa, nêu thoa man thi Nhân vât Black thư j nay se tư nô băng phương thưc makeExplosion(). Sau khi nhân vât nay nô ta không loai bo no ma chi đăt no đên môt chô bât ki khac. (chô bât ki nay chăc chăn phai năm trong ban đô nhưng không năm trong man hinh). Sau đo phai remove viên đan đo khoi bô nhơ va man hinh. Tiêp tuc duyêt cho đên khi hêt nhân vât Black rôi chuyên đên duyêt nhân vât Turret. Chi co môt chu y khi xet đên va cham vơi Turret la môi vong lăp đan cua Player ta phai xem mang cua Turret co lơn hơn 0 không? Nêu không thi Turret đa bi “ha guc” Victory!

Ơ trên mơi chi xet đên đan cua nhân vât Player, khi xet đên đan cua Black hay Turret cung gân tương tư chi khac la ta lai xet va cham cua đan vơi Player. Nêu bi trung đan cua Black thi Player giam mang đi môt con chung đan cua Turret thi giam mang đi 5. Trong môi vong lăp đan nay cung phai xet xem mang cua Player co lơn hơn 0 không? Nêu không thi Game Over!

Chu y: Vơi môt hê thông phưc tap thi ngươi ta sư dung rât nhiêu cac Diagram cho viêc mô hinh hoa hê thông, ban chât môt chương trinh game cung la môt hê thông vơi cac đôi tương tac đông hay tac nhân (Actor), cac sư kiên đươc tac đông bơi tac nhân như sư kiên băn khi đôi tương năm trong tâm băn, sư kiên mât mang

Page 45

Page 46: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Game Over. Sư kiên victory khi tât ca phao bi chay hêt…vi quy mô chương trinh em chi sư dung môt vai Diagram cơ ban nhât.

Page 46

Page 47: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Phân 5

Công cu lâp trinh Game J2ME cua Netbeans

Phân nay giơi thiêu hai công cu thiêt kê game la GameDesign va VisualMidlet. Trong đo GameDesign lam phân giao diên game con phân VisualMIDlet lam phân menu cho game.

1. GameDesignSau khi tim hiêu vê ly thuyêt GAME API ta đên vơi viêc thưc hanh nhưng kiên thưc đo trên ngôn ngư va công cu cu thê. Đây la khung man hinh GameDesign cua Netbeans.

Page 47

Page 48: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Hinh 22: giao diên môt chương trinh demo cua GameDesign

Công cu GameDesign cua Netbeans hô trơ lam game J2ME như sau:Tao cac nhân vât chuyên đông (Create Sprite) Tao cac TiledLayer (Create tild layer)Tao cac khung canh (Scenes)

1.1Anh dung đê lam game

Vi du sau đây chi sư dung môt anh cho tât ca cac đôi tương đô hoa trong game. Vi bô nhơ han hep cua di đông, nên dung nhưng anh lơn thay vi nhiêu anh nho. Bơi môi anh se phai co môt Header lưu giư cac thông tin vê no. Nêu dung nhiêu anh thi se phai lưu nhiêu header cua no.

Page 48

Page 49: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Đê tao môt Sprite hoăc TiledLayer ta import anh vao game, công cu tư chia anh lơn thanh cac tile nho tuy vao lưa chon kich thươc cua môi tile yêu câu.

Hinh 23: Môt anh đươc phân chia thanh cac tile cung kich thươc

1.2Ta o hinh anh nhân vât chuyên đông

Đê tao môt nhân vât chuyên đông ta chi cân keo nhưng tile trên vao cac ô tương ưng đê tao thanh môt chuôi cac anh.

Hinh 24: tao nhân vât chuyên đông xang phai

GameDesign hô trơ test thư băng cach nhân nut play hay pause. Sô 100ms ơ trên co nghia la đô trê giưa hai anh kê tiêp nhau. Sau khi chay hêt môt lươt, qua trinh đươc lăp lai.

Page 49

Page 50: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

1.3 Tao cac TiledLayer Tao cac TiledLayer băng cach chon nhưng tile ơ dươi va đăt lên khung hinh trăng ơ trên. Kich thươc cua TiledLayer co thê thay đôi đươc.

Hinh 25: Tao TiledLayer tham co

Page 50

Page 51: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

1.4 Tao cac tile đông trên TiledLayer Tao ra nhưng Tile đông trên môt TiledLayer băng cach kich vao “New Animated Tile”. Tao môt tile đông tương tư như tao môt nhân vât chuyên đông, chi khac la tile đông phai đươc găn cô đinh vao trong môt TiledLayer nao đo. Ơ trên hinh dươi đây ta găn 4 tile đông vao môt TiledLayer.

Hinh 26: Bôn tile đông đươc cho vao TiledLayer vung nươc

Page 51

Page 52: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

1.5 Tao ban đô Bươc cuôi cung la tao ra tao ra ban đô cho game băng cach kêt hơp cac TiledLayer va cac nhân vât.

Hinh 27: Tao scene tư cac TileLayer va cac Sprite

Chy y khi cho cac TiledLayers va cac Sprite vao ban đô ta phai đê TiledLayer ơ mưc sâu hơn con cac nhân vât ơ mưc cao đê nhân vât luôn ơ trên.

Tom lai GameDesign hô trơ tôt lam giao diên con nhưng vân đê con lai như lam kich ban, thiêt kê cac lơp… do ngươi lâp trinh.

Page 52

Page 53: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

2 VisualMIDlet

Đây la công cu tao ra cac ưng dung J2ME băng lưu đô thao tac rât trưc quan. Sau đây la cơ câu MIDlet em sư dung trong Game cua minh.Table 1: Sơ đô chuyên thao tac

Hinh 28: Lưu đô chuyên mach trong thiêt kê menu game

Điêm băt đâu la đôi tương Mobile Device, sau khi chay chương trinh sơ đô chuyên tư started đên đôi tương SplashScreen, đôi tương nay thưc hiên chưc năng tao môt khoang chơ va phong môt anh lên man hinh đê quang cao vê game. Sau môt khoang thơi gian se tư đông chuyên đên đôi tương List. Đôi tương List gôm môt danh sach cac chưc năng cua chương trinh như : New game – băt đâu chơi, Maps - chon ban đô, Settings - tuy chinh, High Score – điêm sô cua nhưng ngươi chơi cao nhât, Help – hương dân phim bâm, About – thông tin tac gia, Exit – thoat. Khi

Page 53

Page 54: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

ngươi chơi chon môt trong cac chưc năng nay cac Form tương ưng se đươc hiên lên man hinh. Gia sư khi ta chon Maps luông man hinh se chuyên đên đôi tương FormMaps. Trong đôi tương nay la 3 Items cho phep ngươi chơi chon kiêu ban đô: Small, Medium, hay Large (Cac Item nay không đươc thê hiên trên lưu đô). Đôi tương FormMaps cung chưa môt lênh Back (BackCommand) đê quay vê danh sach List. Cac Form khac: FormSettings, FormHighScore, FormHelp, FormAbout cung đươc thiêt kê tương tư formMapChu y: thanh phân New Game trong List không chuyên mach tơi đôi tương nao trong menu vi khi chon New Game man hinh chuyên đên đôi tương GameCanvas va băt đâu chơi. Canvas la đôi tương giao diên mưc thâp nên không cho phep thao tac trên lưu đô. Ta phai tư tao cac chưc năng trong môt Canvas, nêu muôn tư Canvas co thê quay lai Menu chinh phai băt sư kiên phim bâm Back cho Canvas.

Page 54

Page 55: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Phân 6Giơi thiêu luât chơi

1. Nhiêm vu:

Câu chuyên băt đâu khi may bay chiên đâu cua ban đươc giao nhiêm vu đăc biêt la xung kich vao hang ô quân đich. Nhiêm vu la phai tiêu diêt hêt sô phao

cua đich đê quân ta co thê vao tiêp ưng.

Ban phai de chưng vơi phao vi chung co sưc công pha, tâm băn rât xa, mang lơn, tuy chi co nhươc điêm băn châm va không di chuyên. Hay lơi dung điêm yêu đo vi ban co tôc đô rât tôt. Tuy nhiên phai luôn luôn canh giac trươc may bay cua đich

. Chung rât đông va luôn rinh râp khăp nơi. Môt điêu không may la ban se không thê “xư ly” chung. Luôn nhơ muc tiêu cua ban la phai diêt hêt phao. Chuc ban thanh công!

2. Cach chơi

Game co 3 loai ban đô tương rông hep khac nhau (măc đinh la ban đô trung binh).Game cho phep chon chê đô autofire trong Settings. Nêu chon chưc năng nay Player se tư băn khi găp quân đich (giông vơi quân đich hê găp Player thi băn). Khuyên khich chon chê đô nay.

Page 55

Page 56: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

3. Môt sô thông tin vê game

Thông tin nhân vâtSTT Mang Tâm xa Tôc đô đan Đô trê cua đan Tôc đôPlayer 100 180 10 15ms 10Turret 100 200 3 2000ms 10Black 10 140 5 600ms 0

Đ kho cua game đươc tinh theo sô lương Turret va Black.ô

STT Easy Normal HardPlayer 1 1 1Turret 7 14 21Black 7 14 21

Đ r ng cua ban đôô ô

Small 448 x 448 (Pixel)Normal 672 x 672Large 784 x 784

Page 56

Page 57: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

4. Môt sô hinh anh trong game

Hinh 29: Man hinh Start Hinh 30: Menu chinh Hinh 31: Chon ban đô

Hinh 32: Chon cac chê đô Hinh 33: Bang thanh tich Hinh 34: Hương dân

Page 57

Page 58: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Hinh 35: Player di chuyên Hinh 36: Player băn Turret Hinh 37: Player băn black

Hinh 38: Black vưa đi vưa băn Hinh 39: Khi player thua Hinh 40: Khi chiên thăng

Page 58

Page 59: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Phân 7

Kêt luân

1. Nhưng kêt qua đat đươc

Sau khi lam xong bai tâp thưc tâp “Lâp trinh game di đông vơi J2ME” em đa đat đươc nhưng kêt qua sau:

Vê kiên thưc

Đa năm băt đươc cơ chê hoat đông cua may ao Java trên điên thoai di đông, nhơ đo hoan thiên ky năng xây dưng môt ưng dung băng ngôn ngư J2ME.

Hoc đươc nhưng kiên thưc cơ ban vê lam game cung như lâp trinh thưc tê trên ngôn ngư J2ME.

Hiêu đươc nhưng khai niêm cơ ban vê ngôn ngư UML.Vê chương trinh

Kich thươc file JAR la 106 KB, phu hơp vơi hâu hêt cac dong điên thoai co hô trơ MIDP 2.0.

Chương trinh chi sư dung nhưng thư viên cơ ban cua J2ME nên co thê chay trên nhiêu dong may.

2. Nhưng han chê

Bên canh nhưng kêt qua trên, ban thân em thây nhưng han chê cân khăc phuc sau: Kich thươc cua chương trinh chưa đươc tôi ưu hoa do cac nguyên nhân:

Chưa tranh khoi lôi lâp trinh hương đôi tương cua J2SE. Môt sô ky thuât ap dung lam cho code sang sua nhưng lai lam tăng kich thươc chương trinh, tăng bô nhơ khi chay.Chưa co nhiêu thơi gian đê tôi ưu hoa cac đoan ma cua chương trinh.

Page 59

1. Nhưng kêt qua đat đươc2. Nhưng han chê3. Hương phat triên

Page 60: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Chưa co điêu kiên test trên may thât. Em mơi chi test trên hai bô công cu hô trơ gia lâp điên thoai la wireless tookit cua SUN va series 40 SDK cua Nokia.

Chưa co âm thanh cho game – em mơi chi tim hiêu công cu Adobe Audition xư ly âm thanh kha tôt. Nhưng vân đê tim dư liêu bô âm thanh va cho âm thanh vao game đoi hoi nhiêu thơi gian va ti mi.

3. Hương phat triênVơi 4 tuân thưc tâp, em mơi chi băt đâu bươc vao thê giơi lam game di đông. Hương phat triên sau nay cua em la nghiên cưu thêm cac ky thuât lam game như tao âm thanh, tao game 3D, va tim hiêu nhưng công cu manh hơn cho viêc xây dưng đô hoa cua Game.

Danh muc cac tư viêt tăt

J2ME Java 2 Mobile Edition Ngôn ngư lâp trinh Java MobileCLDC Connected, Limited Device Confinguation Câu hinh thiêt bi kêt nôi giơi hanMIDP Mobile Information Device Profile Hiên trang thông tin thiêt bi di đôngJVM Java Virtual Machine May ao JavaKVM Kernel Virtual Machine Nhân may aoRMS Record Management System Hê thông quan ly ban ghiSMS Short Message Service Dich vu tin nhăn ngănRSS Really Simple Syndication Phương phap tô trưc tin đơn gianWAP Wireless Application Protocol Giao thưc mang không day

Page 60

Page 61: Thuc Tap Co So to Trong Hien Tin2 K50

Tô Trong Hiên Lâp trinh game di đông vơi J2METin2_K50

Danh muc hinh

Hinh 1: sư đa dang vê chung loai điên thoai................................................................................................6Hinh 2: Sư phô biên cua cac thiêt bi hô trơ may ao Java.............................................................................7Hinh 3: Cac tâng trong nên tang J2ME........................................................................................................8Hinh 4: Qua trinh xây dưng ưng dung cho thiêt bi di đông..........................................................................9Hinh 5: Cac trang thai va vong đơi cua Midlet..........................................................................................11Hinh 6: Phân lơp API cua J2ME................................................................................................................12Hinh 7: Nokia Series 40 SDK, 3rd Edition................................................................................................15Hinh 8: Điêm tham chiêu cua Sprite..........................................................................................................18Hinh 9: Nhân vât Player trong chương trinh game....................................................................................19Hinh 10: Chuôi anh tao chuyên đông cho Sprire.......................................................................................20Hinh 11: Môt sô khung canh trong game Alpha Wing..............................................................................23Hinh 12: Môt anh gôm hai tile...................................................................................................................23Hinh 13: Môt background đươc xây dưng tư ma trân................................................................................24Hinh 14: Use Case cac nhân vât va cac phương thưc cua chung...............................................................33Hinh 15: Use Case chuyên trang thai cua game.........................................................................................34Hinh 16: Môi quan hê lơp giưa cac nhân vât.............................................................................................36Hinh 17: Luông xư ly chinh trong chương trinh........................................................................................40Hinh 18: Luông xư ly phim bâm trên canvas.............................................................................................41Hinh 19: Luông xac đinh đôi tương băn cua Player...................................................................................42Hinh20: Sơ đô hoat đông khi đan ra ngoai man hinh.................................................................................43Hinh 21: sơ đô hoat đông khi đan cua Player chưa ra ngoai man hinh......................................................44Hinh 22: giao diên môt chương trinh demo cua GameDesign...................................................................45Hinh 23: Môt anh đươc phân chia thanh cac tile cung kich thươc............................................................46Hinh 24: tao nhân vât chuyên đông xang phai...........................................................................................47Hinh 25: Tao TiledLayer tham co..............................................................................................................48Hinh 26: Bôn tile đông đươc cho vao TiledLayer vung nươc....................................................................49Hinh 27: Tao scene tư cac TileLayer va cac Sprite....................................................................................50Hinh 28: Lưu đô chuyên mach trong thiêt kê menu game.........................................................................51Hinh 29: Man hinh Start Hinh 30: Menu chinh Hinh 31: Chon ban đô.................................................55Hinh 32: Chon cac chê đô Hinh 33: Bang thanh tich Hinh 34: Hương dân...........................................55Hinh 35: Player di chuyên Hinh 36: Player băn Turret Hinh 37: Player băn black................................56Hinh 38: Black vưa đi vưa băn Hinh 39: Khi player thua Hinh 40: Khi chiên thăng..............................56

Tai liêu tham khao

[1]. J2ME Game Programming – by Martin Wells[2]. Wireless Game Development in Java with MIDP.2.0 - by Ralph Barbagallo [3]. J2ME Game Development with MIDP2 – by Jason Lam

Page 61