Lợp Actor co 5 hanh đơng: Move Úp, 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ư
dụng lơp đan (tên la Fire — đan cung la nhân vât vi no co thể đi chuyển va co thuộc
tinh va cham).
Player va Turret co thêm phương thưc quay vong (Spimning) con Black co thêm phương thực di chuyền bất ki trong ban đồ.
2 State Diapram
Biể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 chỉ ra chu ki sống cua đối tượng.
Tơ Trong Hiến Lập trình game di động vơi .J2ME Tin2 K50 High Scores Game Scores
Intro Level Game
Game Over Pausina
Hình 15: Use Case chuyển trang thai cua game
Đây co thê xem la một bơ khung cac trang thai cua game, v1 dụ 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 chọn, tran thai
đo cua game øolI la infro øame sfafe.
Kế đến khi chọn new øame để bắt đầu, một man hinh cho biết cac mưc chơi. Đĩ là
intro level statc.
Trong lúc đang chơi game thì đến trang thai Playing, khi tạm dừng game thì đến trang thai pause game sfafe.
Khi ngươi chơi thua thi đến trang thai Game Over va cho phep lựa chọn 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.
Tin2 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 dụ ta khơng thể đi tư trang thai Game over đến trang thai
Game Score được.
3 Class Diapram
Biểu đồ lợp cho một cach nhin tĩnh về cấu truc trưu tượng cua hê thống, cụ thể la
mơ hinh hoa dươi dang cac lơp, cac go1 va mơi quan hê g1ưa chung. 1 lass Diapram cua cac nhân vật trong øame
Biểu đồ gồm bốn lơp: Constants, Actor, SpritePlayer, SpriteBlack, SpriteTurret. Mơ hmh 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 lại kế thưa (extends) tư lợp trưu tượng Actor.
Cũnsfants Acfar
ÝtFram Chass } Fam Ậctoraz } ,AMrihbukee
#&trjbuia
gublie PLAYEF: LIVE5 = 50 puhliz RLAEK _LIES = 1đ puhliz TUREET LIEB = 10ữ guhliz F IäHTER LIwES = 3đ gubliz PLAYEF FIRINB HELAY = 1 puhliz BLADK FIRINB_HELAY = 8đ puhliz TIERET FIEIMB ELAY = 1đnđ puhliz FISHTEE FIBINB_DELAY = 400 puhliz PLAYER_FIRINB_BAHIUS = 1Bữ guhlie BLAEK FIRING R&HIU3 = 140 gublls TIBEET FIRINB BADIUS = 200
gubllz FIBHTER F =.10n publiz PLAYER BULL n=10
pivate sprite Erivata liưaxz nackaqe 5P EED = ]ũ pacl:afIe spIite Eznlasinni private last Time Ernlasinn piwate isExplasian = false
—
puhlic &ctor( Bame 5creen qs, sprite, senWidth, scnHainht 1 _—_| puhllz setLives[ liwes ]
pubiliz get Liưes[ } puthlic lives[owni dawn 1 puhlie gel 1 puhlic getY(_ } puhlic startFøsitian( ] Snrite Turref { Fram Ậctars } Altribuies
private tirrie Last Firerl pnIivate firinil
publie ŠpriteTurret( đame5eresn gs, sprfe, senWidth, senHeight ) pul HUẾ -
Hoy Giới hệ
Hình 16: Mối quan hê lơp giữa cac nhân vật
Đâ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ư mục.
SnriteHIack {Fram Aelars } JÄIlr hung publie last Hireetian = Baine Zanvas.DWM pđvate nũ 5n.head = 2Ú
Erivate tirne Last Firarl piivate Tiïng ESTESELEEDIRSesniiESeissErlIRINE-seItUsINiTch š EU bào ¬priteFlaver {Fram ®œtors } JÄtrAhuleg: private autafire = false
private time LastFirarl Brivate scnre = Ï
Eublie SprteFlaysr[ BaisSereen qs, sprte, scnUWidth, senHaight }
public run{ } publis setAuitafire puhliz Bullet - Page 36
Giai thích cac lợp:
Lợp Interface Constants chưa cac hẳng số tỉnh được sư dụng trong tất ca cac lợp khac. Trong lập trinh Game J2ME khuyến khích dung cac biến fĩnh vị tốc độ truy
câp nhanh hơn biến thương va biến tính chỉ co một thể hiện la chính no nên tiết
kiêm bộ nhơ.
Lợp trưu tượng Acfor thực hiên lợp Constants va chưa cac thuộc tính 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 tạo ra một Sprite mơi.
lives la số mạng cua mỗi nhân vật
SPEED = 10 la tốc đơ cua nhân vật
Cac phương thực quan trọng cua lợp:
Một phương thưc khơi tạo Sprite trong GameScreen 4 phương thưc di chuyển (Move )
getXQ, getYQ lấy vi trí cua nhân vật
spriteCollidesWith_() xac đỉnh nhân vật co chạm khơng
øetActorDirection(): xac đinh hương di chuyền cua nhân vật khac nhắm mục
đích bắn
makeExplosion(Q): tạo hiêu ưng nổ
Lợp SpritePlayer kế thưa lơp Actor do đo cũng dung được cac tham số trong
Interface Constants. No co thêm 3 thuộc tĩnh la autoFire:xac đinh chế đơ tự bắn tự đơng
score : số điểm ghi được
lastTimeFired: 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ư Actor
RunQ: la phương thưc liên quan đến Thread cua lợp nay
FireQ): bắn vao cac đối tượng Actor khac, đối tượng tra về la đạn (Bullet) getScore(): lấy số điểm hiên tại cua ngươi chơi
Tin2 K50
Hai lợp SpriteBlack va SpriteTurret cũng kế thưa tư lợp Actor va co thêm cac thuộc tính va phương thưc bổ xung riêng cho no, vi dụ thuộc tính lastDirection cua
SpriteBlack lưu hương đi trược đo cua nhân vật để nhân vật khơng bị đi luần
quần. Phương thưc run() cua lợp nay chạy 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 chính, em khơng đi
sâu vao code.
.5 Class diapram 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 tính va cac phương thưc public chuyên về
tạo ra cac đối tượng đồ họa như Sprite, TiledLayer, Image ...
2. VisualMIDIet: ban chất đây la một MIDIet vi no được mơ Tơng tư lợp MIDIet cua J2ME. Lợp nay co nhiệm vụ tao ra ø1ao 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 Hiph Scores lựu gi điêm cua 3 ngươi chơi co điệm sơ cao nhát trong may. Cạc điểm
số được lưu trong bơ nhơ RMS cua may, vì thê cac thơng số nay vẫn lưu lại ngay ca khi ta tặt ưng. dụng.
3. GameScreen: ban chất đây la một GameCanvas lợp nay chưa tất ca cac đối tượng đồ họa lấy tư lợp GameDesign. Lợp nay co rất nhiều phương
thưc như:
1. 2. 3.
Ve cac đối tượng lên man hinh
Chơ va xac nhân phim bấm Tao cac hinh anh chuyền động
¡.. Cac nhân vật 1. Đan
Xac nhân trang thai cua game: Game Over, Game Vicfory, RunnIng
. Lợp nay la co một phương thưc runQ 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 Các lợp nhân vật. Qua trinh chơi øame chỉ
Mối quan hê cua ba lơp được mơ ta qua hình ve:
VisualMIDI GameScree GameDesi et n gn
Properties 4 —*†> Properties 4 '__ Properties
Methods Methods Methods
Được hiểu la lơp MIDIet va lơp GameScreen se co quan hệ kết hợp (Association) vơi nhau (VisualMIDIet <-> 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 chính
Trong lợp GameScreen (GameCanvas) co một luồng chính thực hiện tất ca cac cơng việc trong đo — Man Loop
While (running) {
+Xư. ly“ sư, kiên nhâ n phi m
+Câ,b nhâ,t man hi `nh
+Ve` la i¡i man hi nh
+Xư. ly. thơ i gian tỉ nh toan cho mơ i vo ng lă,Ðb
Chu y: khi lam game co một yếu tổ ta phai quan tâm la tốc đơ refresh lại man hinh. Được tĩnh bằng. số lần trong một gIây. Thương số lần refresh lại 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 dụng vao một tỉnh huống cụ thể, nếu thơi gian cho một vong lắp chính ma nho hơn 50 ms thi vơi mục đích 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 chính lơn hơn 50 thi chỉ nhương tạm thơi xư ly cho cac chương trinh đang chạy khac.
Tin2 K50
Đi tư dươi lên trên, nều biến
running la sai thi thoat khoi chương
trinh. Ngược lại, 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 [Back] 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.
-_ Tĩnh thơi gian cho một vong lấp (băng thơi .ølan hiện tại — 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 Fiish
đụng (thơi gian một vong lấp chưa vn Ầ đến 50ms) thi ta se cho dưng nang ï
WE5 SIđRET
Thread nay một khoang thơi gian la (50 - me Take). Ngược lại Thread
nay se tạm thơi nhương xư ly cho Hình 17: Luồng xư ly chính trong chương trinh
cac thread khac.
4.2 Luồng sư ly phím bấm s[aT H_ FEfLITI Í TEET` | [FIEE_EIEE5SELI| [EIGHT_FIRESSED] =—mmmm di =—=—— lastIiregctinlt == FIGHT \Ì _[Mư
Hinh 1§: Luơng xư ly phim bẩm trên canvas
Giai thích: phương thực getKeyStatesQ cua lơp GameCanvas lấy ma phím tư ngươi chơi. Sau đo xư ly theo tưng tinh huống cụ 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 lại xet tiếp điều kiên hương đi lục 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. Vĩ
dụ player thay đổi hương đi tử UP: 4L -> RIGHT Đ . Sau đo vẫn được di
chuyên sang phai.
Tin2 K50
Tiếp theo nếu Player va cham vơi biên hoặc vơi cac đối tượng khac thì no phai đi
theo hương ngược lại tực la MoveLeftQ.
4.3 Luồng xac đỉnh đối tượng bắn cua Plaver f=Eurri [7ESI [HO] Khnäng cšch = Tẩm hắn của Player
Tại mật vang lặp cac nhẫn
vải chỉ hãn được mất viễn
đạn và một đối tượng [YES]
Hình 19: Luơng xac đinh đối tượng bắn cua Player
Mơ hinh trên noi lên tính ư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 tục 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.
Tin2 K50
4.4 Luồng quan ly đan cua Player trong man hình.
Mơ hinh hoạt đơng quan ly đạn trong man hinh kha phưc tap nên em chia lam 3 phần:
1. Nếu đạn Day ra khoi man hinh > xoa đạn khoi bơ nhơ 2. Duyệt qua cac nhân vật Black xem co trung đan khơng 3. Duyêt qua cac nhân vật Turret xem co trung đạn khơng
Duyệt qua tất ca số đạn cua Player, gọi
moveBullet la viên đan thư ¡. Viên đan nay thực hiên nhiêm vụ di chuyền
về phia trược theo [NG]
hương đã xac định
trược. Bơi khi khơi tạo
cho một đối tượng đan tư lợp Bullet, no đa xac định ro hương di
chuyển.
Sau đo xac định
viên đạn con năm trong man hinh khơng. Nếu
khơng th TeInov€ no Ko
khỏi bộ nhơ vả mản | =
hình. Nếu chưa ra khoi HN: ng man hinh. Ta phai quan
tâm đến sự va cham. [rEBI ärr| rang mản hình magBull let nã
Hình20: Sơ đồ hoạt đơng khi đan ra ngoai man hình
Trương hợp viên đạn thư ¡ đo chưa ra khoi man hình 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.
4.5 Luồng xư ly khi đan chưa ra khoi man hình
Black j va chạm với Bullet ¡ ⁄
¬Í at a
Hình 21: sơ đồ hoạt đơng khi đạn cua Player chưa ra ngoai man hinh
Vơi mỗi viên đạn cua Player ta duyệt qua tất ca Các nhân vật Black xem co va cham khơng. Nếu khơng va cham th duyệt qua Cac Turret, nếu nhân vật thư j co va cham thi ta giam mạng cua Black j đi l va tăng điểm cua Player lên 1. Sau đo xet số mạng cua Black j đã đ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
loại bo no ma chỉ đặ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 đạn
đo khoi bộ nhơ va man hinh. Tiếp tục 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 đạn cua Player ta phai xem mạng cua Turret co lơn hơn 0 khơng? Nếu khơng thi Turret đa bi “ha gục” > Victory!
Ơ trên mơi chi xet đến đạn cua nhân vật Player, khi xet đến đan cua Black hay Turret cung gần tương tự chi khac la ta lại xet va cham cua đạn vơi Player. Nếu bị trung đạn cua Black thi Player giam mạng đi một con chung đạn cua Turret th
giam mạng ổi 5. lrong mơi vong lấp đạn nay cũng phai xet xem mạng cua Player co lơn hơn 0 khơng? Nếu khơng thi Game Overl
Chu y: Vơi một hệ thống phưc tạp thi ngươi ta sư dụng 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 mạng >
Tin2 K50
Game Over. Sự kiên victory khi tất ca phao bỉ chay hết...vi quy mơ chương
trinh em chi sư dụng mơt vai Diagram cơ ban nhất.
` Phân 5
Cơng cu lâp trình Game J2ME cua Netbeans
Phần nay giơi thiêu hai cơng cụ thiết kế game la GameDesign va VisualMidlet. Trong đo GamelDesign lam phân giao diện game con phân VisualMIDIet lam phân menu cho game.
1. GameDesign ˆ ¬ -
Sau 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 cụ cụ thể. Đây la khung man hinh GameDesign cua Netbeans. tr TU FđFEst ã $ã Tế “g # tt
Create LiErl layer...
BasE Thinns LE== walEr
@ +
kLraaLe sprILg...
kar El Thamas
Hinh 22: giao diện một chương trinh demo cua GameDesign
Tin2 K50
Cơng cụ GameDesign cua Netbeans hỗ trợ lam game J2ME như sau: e - Tao cac nhân vật chuyền động (Create Sprite)
e - Tao cac TiledLayer (Create tild layer) ® Tao cac khung canh (Scenes)
1.1Anh dung để lam same
VI dụ sau đây chỉ sư dụng mơt anh cho tất ca cac đối tượng đồ họa trong game. VI