0
Tải bản đầy đủ (.pdf) (62 trang)

“tì i-89)t.|eir-l 0n nn

Một phần của tài liệu LUẬN VĂN LẬP TRÌNH GAME DI ĐỘNG VỚI J2ME (Trang 34 -62 )

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

Một phần của tài liệu LUẬN VĂN LẬP TRÌNH GAME DI ĐỘNG VỚI J2ME (Trang 34 -62 )

×