Tải bản đầy đủ (.docx) (31 trang)

NHẬP MÔN PHÁT TRIỂN GAME ĐỀ TÀI Game Mario

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1009.16 KB, 31 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
------o0o------

NHẬP MÔN PHÁT TRIỂN GAME

ĐỀ TÀI:

Game Mario

Giảng viên hướng dẫn:
TS. Ngô Thanh Hùng.
Sinh viên thực hiện:

Thành Phố Hồ Chí Minh 27/11/2011

Võ Quang Thiều

08520597

Nguyễn Trọng Sang

08520583

Nguyễn Hữu Tâm

08520589

Đỗ Trung Vinh

08520617



Ngô Văn Toàn

08520411



Game Mario

TS. Ngô Thanh Hùng

Lời mở đầu.
Khi nói tới game, cả game online và game offline thì bạn đọc có thể dễ dàng
nhận định rằng đó là một phương tiện giải trí sau những giờ làm việc, học tập căng
thẳng, là liệu pháp xả stress hữu ích nhất. Cũng có những loại game ngoài việc giải
trí còn giúp người chơi có thể cải thiện được trí nhớ, tư duy, cũng như những phản
xạ nhạy bén hơn,…
Trong đề tài là tạo một game Mario, một game rất quen thuộc với nhiều người,
game nhằm mục đích giải trí. Đề tài nói lên cách để xây dựng một game cơ bản và
các công nghệ được sử dụng trong đó đề giúp tạo nên một game thực sự thân thiện
với người dùng. Directx là một trong những công nghệ được sử dụng phổ biến trong
phát triển game, hổ trợ rất tốt cho người lập trình.

Tp Hồ Chí Minh, ngày 27 tháng 11 năm 2011


Game Mario

TS. Ngô Thanh Hùng
MỤC LỤC



Game Mario
Hùng

TS. Ngô Thanh

A. Game Mario
I.

Giới Thiệu.
 Mario là một trong những game lâu đời nhất và có số lượng người chơi khá lớn
và đặc biệt là ngày nay nó vẫn còn thịnh hành. Tuy nhiên Game Mario nay có rất
nhiều các phiên bản khác nhau, nhiều loại khác nhau, nhưng nội dung vẫn giống
như game Mario thuần.
 Đồ án Game Mario này cũng phát triển trên tinh thần game Mario cơ bản, chỉ
thay đổi về hình ảnh (giao diện trong đẹp hơn), cũng như thêm một số vật thể
mới trong game nhằm tạo cho game sinh động hơn, đặc biệt là tạo ra các map
chơi mang tính chinh phục, thử thách hơn cho người chơi.
 Người chơi sẽ điều khiển Mario để vượt qua các màn game. Mỗi màn sẽ có một
đích đến, khi Mario đến đích thì sẽ chuyển sang màn tiếp theo. Trên đường đi
Mario sẽ gặp nhiều quái vật. Khi Mario chạm vào quái vật sẽ bị chết, bị nhỏ
lại… Ngoài ra Mario cũng sẽ bị chết khi rơi xuống vực thẳm.
 Mario có thể giết chết quái vật bằng cách nhảy lên trên đầu quái vật hoặc nhảy
đụng vào phần gạch bên dưới quái vật (khi Mario còn nhỏ). Giết chết quái vật thì
người chơi sẽ được cộng thêm điểm.
 Độ khó của màn game sẽ tăng dần: quái vật nhiều hơn, chướng ngại vật khó
vượt qua hơn, quái vật di chuyển nhanh hơn, các vật phẩm cho Mario sẽ ít hơn…
 Ban đầu người chơi sẽ được tặng cho 4 mạng sống của Mario (hết mạng sống là
Game Over). Trong quá trình chơi mạng sống sẽ tăng khi người chơi ăn được

nấm hoặc người chơi đạt được một số điểm nhất định.

II. Chương Trình.
1. Giao diện chính:
 Màn hình lúc khởi động game:
• New Game: Chơi từ đầu.
• Load: tải game đã lưu trước đó để tiếp tục chơi.
• Options: tùy chọn tắt mở âm thanh.
• Help: hiển thị thông tin giúp đỡ cách chơi.
• Quit: thoát khỏi trò chơi.

Nhóm Sinh Viên - UIT

Trang 5/27


Game Mario
Hùng

TS. Ngô Thanh

 Màn hình Play Game:

 Màn hình Pause Game: (nhấn ESC để tạm dừng game)
• Resume: tiếp tục trò chơi.
• Load: tải lại game đã lưu trước đó.
• Save: lưu lại thời điểm hiện tại của game.
• Opntions: là tùy chọn tắt mở âm thanh.
• Close: quay về màn hình Menu chính lúc mới vào game.


Nhóm Sinh Viên - UIT

Trang 6/27


Game Mario
Hùng

TS. Ngô Thanh

 Màn hình Load Game:

Có tối đa 10 thời điểm game được lưu ở đây.
 Màn hình Save Game:

Nhóm Sinh Viên - UIT

Trang 7/27


Game Mario
Hùng

TS. Ngô Thanh

Được lưu tối đa 10 thời điểm trong game.
 Màn hình Options:

• SoundTrack: tắt/ mở nhạc nền.
• Other Sounds: tắt mở âm thanh di chuyển, va chạm, …

• Mute All: tắt tất cả âm thanh.
 Màn hình Help:

Nhóm Sinh Viên - UIT

Trang 8/27


Game Mario
Hùng

TS. Ngô Thanh

2. Đối tượng trong game:
2.1 Đối tượng không xét va chạm:
 Bao gồm các thành phần nhầm tạo nên background cho khung cảnh game.
 Các đối tượng như: lùm cây, lùm hoa, núi, mây… là các đối tượng này sẽ
không được xét va chạm trong game.
2.2




Đối tượng có xét va chạm:
Các đối tượng này cũng được phân ra thành nhiều loại:
Nhóm các khối gạch: nhóm này một phần tạo nên background cho game.
Nhóm các enemy (quái): nhóm này sẽ là thành phần các quái tiêu diệt
Mario.
 Nhóm Bonus: các items mà Mario ăn vào sẽ được thay đổi trạng thái hiện
tại.


3. Một số thuộc tính của đối tượng:
3.1 Mario:
 Nhân vật chính trong game, được người chơi điều khiển trực tiếp bằng các
phím di chuyển tương ứng trên bàn phím. (Left – qua trái, Right – qua phải,
Up – nhảy lên, Down – ngồi xuống).
 Mario có thể chạy nhanh hơn và nhảy xa hơn nếu người chơi sử dụng phím
“A”. Khi nhấn Left hoặc Right + “A” thì Mario sẽ di chuyển tốc độ nhanh
hơn bình thường.
 Mario có các trạng thái:
• Ban đầu Mario sẽ nhỏ 48x60.
• Ăn được nấm đỏ: Mario sẽ lớn hơn 47x90.
• Mario sung: nếu đang ở trạng thái lớn, Mario ăn được cây hoa thì sẽ
được trang bị thêm súng, người chơi có thể nhấn “S” để bắn tiêu diệt
các quái vật.

Nhóm Sinh Viên - UIT

Trang 9/27


Game Mario
Hùng


TS. Ngô Thanh
Mario bất tử: nếu Mario ăn được ngôi sao sẽ trở nên bất tử trong vòng
15s, trong thời gian này bất kỳ quái nào chạm phải Mario sẽ chết ngay.
Tuy nhiên Mario sẽ chết nếu rơi xuống vực.


3.2 Enemy:
 Súng tự động:
tự động bắn đạn để giết Mario.
• Súng sẽ tự bắn ra loại đạn giống như đạn của Mario khi được trang bị
súng, nhưng đạn bắn ra trong 1 lần nhiều viên hơn và đặc biệt là chỉ sát
hại Mario, không tiêu diệt các quái khác.
• Súng sẽ có mức máu nhất định, chỉ có đạn của Mario có thể tiêu diệt
được nó.
 Rùa:
Mario sẽ chết khi chạm ngang với rùa và bị thu người lại khi
bị Mario va chạm bên trên xuống.
• Lúc rùa bị thu người, thì bị Mario đá di chuyển sẽ giết các quái khác
nếu va chạm với nó.
• Rùa sẽ bị thu người trong vòng 5s, sau thời gian đó nó sẽ hoạt động lại
bình thường.
• Rùa chỉ chết khi trúng đạn của Mario, bị rơi xuống vực hoặc Mario va
chạm phía dưới lên khi rùa di chuyển trên hàng gạch.
 Nấm thường:
của Mario.

Mario chạm vào sẽ chết, nấm chết khi bị trúng đạn

 Nấm ẩn hiện:

cũng giống như nấm thường.

 Quái di chuyển:
Mario cũng sẽ chết nếu chạm phải và quái sẽ chết
khi Mario va chạm từ trên xuống hoặc từ dưới lên khi quái này đang di
chuyển trên hàng gạch. Quái cũng sẽ chết nếu trúng đạn của Mario.

 Quái Mario:
hình dạng giống Mario và tính năng giống các quái
khác.
• Nếu Mario va chạm từ trên xuống thì quái này sẽ trở thành quái nhỏ có
hình dạng giống Mario nhỏ nhưng di chuyển tốc độ nhanh hơn, lúc này
nếu bị va chạm từ trên xuống thì sẽ chết.
• Quái lúc lớn bị Mario va chạm từ dưới lên lúc quái đang di chuyển trên
hàng gạch hoặc trúng đạn của Mario thì sẽ chết ngay.
3.3 Bonus:
 Nấm đỏ
:
• Mario nhỏ ăn vào sẽ trở thành Mario lớn.
• Được cộng thêm 200 điểm.
 Nấm xanh
 Cây hoa
Nhóm Sinh Viên - UIT

: Được tăng thêm 1 mạng.
:
Trang 10/27


Game Mario
Hùng

TS. Ngô Thanh



Biến thành Mario súng nếu Mario đang ở trạng thái lơn hoặc thành

Mario lớn khi đang nhỏ.
Được cộng thêm 200 điểm.




Sao
:
• Mario sẽ trở thành bất tử trong 15s như đã nói ở trên.
• Được cộng thêm 300 điểm.
 Cộng tiền:


Được cộng thêm 10 điểm.



Được cộng thêm 5 điểm.

III. Cài Đặt.
1. Định nghĩa các đối tượng.
Type
ID
0
0
0

1

0


2

0

8

0

9

0

10

0

3

0

4

0

11

0

12


0

7

0

15

0

23

0

31

0

32

Nhóm Sinh Viên - UIT

Object

Trang 11/27

Ghi Chú



Game Mario
Hùng

TS. Ngô Thanh
0

33

0

34

0

35

0

36

0

37

0

38

0


39

1

0

1

1

1

2

1

4

1

5

1

3

2

0


Không xét va chạm

2

1

Không xét va chạm

2

6

Không xét va chạm

2

8

Không xét va chạm

2

2

Không xét va chạm

2

5


Không xét va chạm

2

9

Không xét va chạm

3

2

Không được hiển thị

Nhóm Sinh Viên - UIT

Trang 12/27


Game Mario
Hùng

TS. Ngô Thanh
3

0

Qua màn

3


1

Mario

4

0

4

1

4

2

4

3

4

4

4

5

4


6

2. Object:

 Class object dùng để khởi tạo một đối tượng trong game.
 Class gồm các thuộc tính để nhận diện đó là loại nào: bao gồm ID, Type
như đã được định nghĩa trước ở trên.
 Ngoài ra còn có các thuộc tính _Pos (xác định vị trí), _Rect (khung
hình), …
 Ngoài ra còn có class mở rộng class Object: sử dụng cho các đối tượng
di chuyển.

Nhóm Sinh Viên - UIT

Trang 13/27


Game Mario
Hùng

TS. Ngô Thanh

3. Cây tứ phân (QuadTree)
 Sử dụng cây tứ phân để có thể duyệt các đối tượng được tối ưu và
nhanh chống.
 Cây tứ phân nhầm mục đích phân nhỏ không gian để có thể giảm thiểu
việc tìm kiếm như mô hình sau:

 Cây tứ phân gần giống như cây nhị phân, tuy nhiên trong cây tứ phân

mỗi node sẽ chứa 4 node con, thay vì 2 node như ở cây nhị phân.
 Cấu trúc một Node trong cây tứ phân:

 Cấu trúc khi một node được thêm vào cây tứ phân:

Nhóm Sinh Viên - UIT

Trang 14/27


Game Mario
Hùng

TS. Ngô Thanh

 Xây dựng một cây tứ phân có cấu trúc như sau: bao gồm một NodeRoot
và các hàm hổ trợ việc thêm Node, di chuyển Node …

 Một biến quan trọng đó là RECT Screen, biến này giúp ta có thể xác
định được vị trí hiện tại cần xét tồn tại các đối tượng nào.
4. Init.
Bao gồm các class khởi tạo các thành phần chính trong game.
4.1 Game_init:
Đây là lớp chính để khởi tạo một cửa sổ chính của game và là nơi khởi tạo
các thông số cần thiết sử dụng trong game.
 bool InitWindow(); : đây là hàm cần thiết mà bất kỳ một ứng dụng

muốn tạo một cửa sổ trên màn hình desktop đều phải thông qua –
đăng ký một lớp đối tượng thuộc lớp window.
 static LRESULT CALLBACK WndProc(): đây cũng là một hàm

quan trọng không kém, cần được khai báo cho cửa sổ ứng dụng.
Hàm này sẽ có nhiệm vụ đón nhận những sự kiện mà hệ thống gởi
đến cho ứng dụng.
 2 biến toàn cục cần thiết trong quá trình lưu trữ con trỏ đối tượng
đến toàn bộ ứng dụng sử dụng đó là:
• LPDIRECT3D9 _d3d: đối tượng Direct3D
• LPDIRECT3DDEVICE9 _d3ddv: thiết bị hiển thị Direct3D.

Nhóm Sinh Viên - UIT

Trang 15/27


Game Mario
Hùng

TS. Ngô Thanh


Ngoài ra còn một số biến cần thiết để thể hiện (render) đối
tượng ra màn hình như HINSTANCE hInstance, HWND
hWnd, …

4.2 Input:
Đây là lớp sử dụng để bắt các sự kiện bàn phím từ người chơi.
 DirectXInput cũng giống như các thành phần khác của DiretX. Nó cần
tạo một DirectInput Object cung cấp giao diện cần thiết để truy cập vào
DirectInput Device. Qua giao diện này ta có thể tạo các Device, liệt kê
hoặc kiểm tra trạng thái của một Device riêng biệt.
 Một số biến cần dùng: HWND m_hWnd: dùng để lưu giá trị trả về.


IDirectInputDevice8 *keyboard: tạo DirectInput Object như đã
nói ở trên.
 Hàm int IsKeyDown(int): kiểm tra xem có một phím nào được
nhấn hay không.
 Hàm int GetKeyDown(): trả về phím được nhấn.
 Hàm void Update(): dùng để cập nhận trạng thái bàn phím, bắt sự
kiện xảy ra.
4.3 Audio:
Class này sử dụng thư viện fmodex_vc.lib, hổ trợ các phương thức về việc
khởi tạo và play một sound. Trong class này có một số hàm cơ bản để sử
dụng:
 Hàm bool Init(): hàm khởi tạo.
 Hàm bool Load(std::string filename, std::string name): tải một âm

thanh lên bộ nhớ đệm.
 Hàm bool Play(std::string name): play một âm thanh được tải lên
bộ nhớ trước đó.
 Hàm void Stop(std::string name); void StopAll(); dùng để stop
một âm thanh hoặc dừng tất cả.
 Hàm bool IsPlaying(std::string name): dùng kiểm tra xem một âm
thanh đang được play hay không.
4.4 Texture:
Đây là class dùng để tạo một đối tượng lưu các thông tin một bức ảnh trong
bộ nhớ đệm và sử dụng cho sau này một cách dễ dàng.
 Sử dụng đối tượng Direct3D LPDIRECT3DDEVICE9 được khởi

tạo từ đầu.
 Biến D3DXIMAGE_INFO image_info: lưu lại thông tin của bức


ảnh được load lên.
 Hàm bool LoadImage(std::string filename, D3DCOLOR
transcolor): hàm này sử dụng để load lên một ảnh theo tên và màu
nền cần loại bỏ.
4.5 Imagestore:
 Đây là class dùng để khởi tạo tất cả các Texture cần sử dụng trong
game. Class nằm mục đích dễ quản lý tất cả hình ảnh trong game và dễ
thay đổi.
 Class này sẽ được khởi tạo đối tượng dùng chung cho tất cả các class
khác trong chương trình.
4.6 Rectstore:

Nhóm Sinh Viên - UIT

Trang 16/27


Game Mario
Hùng

TS. Ngô Thanh

Cũng gần giống như class ImageStore, ở đây nó khởi tạo các đối tương là
kích thước của các vật thể trong game, nhằm mục đích dễ sử dụng và dễ
chỉnh sửa.
5. Screens:
Bao gồm các màn hình có trong game. Đó là:
5.1 Screen:
 Là class chính, bao gồm các thành phần cơ bản để tạo nên một màn
hình cho game.

 Định nghĩa thông số cho từng loại màn hình:

 Class Screen có một số biến cần thiết như: Screen *_OldScreen: dùng

để lưu lại màn hình trước đó, bool _CloseScreen: dùng xác định
xem màn hình bị đóng lại hay không, Screen_Type _NextScreen:
xác định màn hình tiếp theo là gì.
 Ngoài ra có một số hàm sẽ được override lại trong từng màn hình
kế thừa nó như:
• virtual void update(): cập nhật lại trạng thái của màn hình, tùy
thuộc vào từng màn hình cụ thể.
• virtual void Input_update(): cập nhật sự kiện bàn phím.
• virtual void Screen_Update(): cập nhật trạng thái các đối
tượng trên màn hình.
• virtual void Draw(): thể hiện các đối tượng ra màn hình.

5.2 Menu:
Class này sẽ kế thừa từ class Screen: class Menu:public Screen, một số

biến và hàm chính trong class:
 Biến LPD3DXSPRITE SpriteHandle: con trỏ chứa Sprite dùng để
vẽ đối tượng, được lấy từ class Init_game.
 Các biến Texture *_Menu, *_TSelect; *background: sẽ load ảnh
lên để vẽ. Và D3DXVECTOR3 _PosMS: biến để xác định vị trí
của *TSelect trên màn hình.
 Các hàm Update(), Input_update(), Screen_Update() và Draw()
được override lại từ các hàm trong Screen. Ở đây hàm
Input_Update() ta sẽ gán lại vị trí của ảnh(*TSelect) khi nhấn bàn
phím và đồng thời xác định xem nó đang ở tùy chọn nào.
 Hàm Draw() ta sẽ thực hiện vẽ các đối tượng ra màn hình:


Nhóm Sinh Viên - UIT

Trang 17/27


Game Mario
Hùng

TS. Ngô Thanh

5.3 Play:
Đây chính là màn hình chính trong game, nơi mà người dùng tương tác với
trò chơi.
 Class cũng kế thừa từ class Screen.
 Một phần quan trọng trong class này chinh là: Cây tứ phân






__QuadTree *_MapQuadTree: nơi sẽ quản lý toàn bộ đối tượng
trong game.
Biến D3DXVECTOR3 _PosScreen: giúp xác định tọa độ hiện tại
của Mario trong game.
list<Object*> _ListObjs: đây là danh sách các object được lấy ra
từ cây tứ phân chỉ xét trong phạm vi hiển thị ra màn hình.
Các đối tượng được tạo trong game: Texture *PointTexture,
*_TBlock, *_TScenery, *_Marks, **_Mario…

Một số hàm trong game:
• void update(): thực hiện di chuyển trong cây tứ phân, kiểm
tra trạng thái Mario, kiểm tra qua màn,…
• void Input_update(): cập nhật trạng thái của màn hình, trạng
thái các object,…
• void Screen_Update():thực hiện việc cập nhật lại tạo độ màn
hình, danh sách object hiện tại trong cây tứ phân sẽ được vẽ,

• void Draw(): vẽ tất cả các đối tượng trong list object, vẽ
Mario, vẽ ra điểm, mạng người chơi, màn chơi hiện tại, …

5.4 Pause:
Màn hình này sẽ hiển thị một Menu cho phép quay trở lại game(Resume)
Load/ Save game, tùy chọn âm thanh hoặc thoát ra màn hình khởi động.
 Class này kế thừa class Screen.
 Một số biến cần thiết: Texture *_Menu,*_TSelect: lưu hình ảnh của

một menu và ảnh select.
 Các hàm override từ các hàm trong Screen tương tự như các hàm trong
class Menu.
5.5 LoadSave:
Class này dùng lưu lại thời điểm dang chơi hoặc tải lên gaem đã lưu.
 Các biến cũng gần giống như các biến trong class Menu hay Pause.
 Một số biến cần thiết: XML *_Xml: class XML dùng đọc/ ghi dữ

liệu từ file. char **_Info, * name: dùng tạo một list các file đã
lưu/save để thể hiện ra màn hình.
 Hàm Input_update(): thực hiện kiểm tra phím và thực hiện việc
load hoặc save file.
5.6 Options:

Nhóm Sinh Viên - UIT

Trang 18/27


Game Mario
Hùng

TS. Ngô Thanh

Class cũng giống như các class trước, thể hiện việc chọn tùy chỉnh âm thanh.
5.7 NextMap:
Class tạo màn hình chuyển đổi, màn hình này sẽ tự chạy nếu Mario chết hoặc
qua màn. Màn hình tự cập nhật màn hình tiếp theo sau 5s.
Class biến và hàm tương tự như các class khác, chỉ khác việc sử dụng đối
tượng nào.
5.8 Help:
Class thể hiện di nhất một ảnh hướng dẫn người dùng cách chơi.
6. Mario:
Mario có các trạng thái khác nhau như đã mô tả trong game, mỗi trạng thái được
thể hiện trong 1 class riêng lẻ để dễ quản lý.
6.1 Class Mario:
 Các biến cần thiết:
• float _Vx,_VxR,_Vy,_VyR,_Vmin,_Vtd: vận tốc di chuyển
• float _g: gia tốc trọng trường.
• bool_LEFT, _RUN, _JUM, _SIT, _Stand, _MoveL, _MoveR,

_JumF: xác định di chuyển.
• list<Object*> *_ListCollison: danh sách va chạm.
• LPD3DXSPRITE _SpriteHandle: đối tượng Sprite dùng để

vẽ.
• Texture** _Image: danh sách hình ảnh các trạng thái Mario.
 Các hàm chính:
• Sự kiện bàn phím:



Hàm xét các đối tượng khác:



Các hàm được override:

Nhóm Sinh Viên - UIT

Trang 19/27


Game Mario
Hùng

TS. Ngô Thanh

6.2 Các trạng thái khác:
Các trạng thái khác của Mario sẽ kế thừa class Mario.
 Class MarioBig: thay đổi kích thước của Mario so với Mario cơ bản.
 Class MarioWhite: giống MarioBig, nhưng được thêm sự kiện khi nhấn
“S” bắn ra đạn.
 Class Mario AmuletSmall và AmuletBig: trạng thái Mario sẽ xét va
chạm với các quái 1 trường hợp – quái sẽ chết.

 Class MarioConvert: vẽ ra Mario chuyển đổi giữa các trạng thái.
 Class Mariodie: vẽ Mario chết.
7. Colission:
Bao gồm các class xậy dựng tạo nên đối tượng.
7.1 Enemy:
 Class Enemy dùng để tạo ra một đối tượng quái, có khả năng tự chuyển
động.
 Một số biến cần thiết trong class: Texture *_Goomba: lấy hình ảnh

của một enemy để vẽ. RECT RectResource: xác định khung ảnh
cần được thể hiện ra trong bức ảnh load lên. D3DXVECTOR3
pos: xác định vị trí của enemy cần vẽ.
 Ngoài ra còn có một số biến như: float _Vx: xác định vận tốc di
chuyển cho enemy, float _Gravity: xác định gia tốc trọng trường
khi rơi.
 Hàm void Animation() xác định khung ảnh được vẽ.
 Hàm bool CheckMoveX(),bool CheckMoveY(): quản lý việc di
chuyển của đối tượng.
7.2 Tortoise:
 Class Tortoise dùng để tạo ra con rùa trong game.
 Class có cấu trúc gần giống như class Enemy, tuy nhiên class Tortoise
có những điểm khác biệt: Có 2 hình dạng của rùa trong game là lúc
bình thường và lúc thu người, vì vậy sẽ cần 2 Texture để lưu ảnh. Đặc
biệt là Rùa có khả năng tiêu diệt các quái khác nên sẽ có trường hợp xét
riêng trong xử lý di chuyển va chạm - list<Object*> *_ListEnemy:

lưu các đối tượng cần xét va chạm.
 Hàm void Animation(): cũng xác định hình ảnh hiện tại của rùa

cần được vẽ.

 Hàm khác là void CheckEnemyDie(): kiểm tra các đối tượng khác
khi va chạm với rùa trong 2 trường hợp lúc bình thường và lúc thu
người di chuyển.
7.3 EMario:
 Class EMario tạo ra đối tượng quái giống như Mario mà người chơi
điều khiển.
 Class này cũng gần giống như class Tortoise, ở đây thay vì thu người lại
thì EMario sẽ trở thành Mario nhỏ.
 Các hàm cũng tương tự.

Nhóm Sinh Viên - UIT

Trang 20/27


Game Mario
Hùng

TS. Ngô Thanh

7.4 Bonus:
 Class Bonus tạo ra các đối tượng như gạch dấu hỏi, gạch thường và
tiền.
 Các đối tượng này có 7 loại khác nhau:
• Nấm đỏ, nấm xanh, cây hoa, ngôi sao và gạch dấu hỏi sẽ được thể
hiện chung 1 hình ảnh là dấu hỏi.
• Gạch thường.
• Coin
 Các hàm cơ bản:


7.5 Mushroom:
 Class Mushroom sẽ tạo ra 3 loại đối tượng đó là nấm ăn thịt, nấm ẩn
hiện và súng.
 Các biến và các hàm cơ bản cũng được xây dựng giống các class trước.
 Có thêm đối tượng Blood thể hiện máu của súng – đối tượng đặc biệt –
chỉ có súng mới có.
 Hàm void setBlood() là hàm dùng để cập nhật hình ảnh cho Blood

khi bị trúng đạn của Mario thì máu sẽ giảm.

7.6 Item:
 Class Item là class tạo ra các đối tượng Bonus tự duy chuyển khác với
class Bonus tạo ra đối tượng cố định.
 Class Item cũng giống các class tạo đối tượng tự di chuyển khác.
 Class tạo ra các đối tượng như nấm đỏ, nấm xanh, ngôi sao…
 Các hàm cũng tương tự các class khác, tuy nhiên có thêm một hàm

void Add() dùng để thêm đối tượng vào cây tứ phân mỗi khi một
đối tượng mới được tạo ra.

Nhóm Sinh Viên - UIT

Trang 21/27


Game Mario
Hùng

TS. Ngô Thanh


7.7 Bullet:
 Class Bullet là class sẽ tạo ra đạn sử dụng cho súng của Mario và súng
chống lại Mario.
 Class này có một Struct hổ trợ đó là Struct B_Items: tạo ra 1 phần tử
đạn và class Bullet sẽ là tạo ra một mảng các B_items.

 Vì Bullet phục vị cho 2 đối tượng khác nhau là Mario và Súng nên sẽ
có 2 hàm void Draw() – Mario thì chỉ bắn ra duy nhất 1 viên đạn 1

lần, còn Súng thì bắn ra 4 viên đạn một lần.
8. Effect:
Tạo ra các hiệu ứng trong game như là gạch vỡ khi va chạm với Mario, quái bị
chết, hiển thị coin khi Mario va chạm ô gạch dấu hỏi và thể hiện thông tin ra màn
hình.
 Class Brokenbrick: tạo ra hiệu ứng gạch vỡ, class có một struct hổ trợ
đó là struct Brick: tạo một viên gạch nhỏ, Brokenbrick sẽ là danh sách
của nhiều Brick.

 Class EnemyDie: sẽ gồm một danh sách chứa các Enemy bị chết để thể
hiện.
 Class ShowCoin cũng gần giống như Brokenbrick, ở đây ShowCoin
cũng có một struct hổ trợ là struct Coin, và ShowCoin sẽ là danh sách
các Coin.

Nhóm Sinh Viên - UIT

Trang 22/27


Game Mario

Hùng

TS. Ngô Thanh

 Class Text: là class để hiển thị thông tin trên màn hình như: số điểm,
tiền, map hiện tại và hiển thị số điểm có được khi Mario giết quái hoặc
ăn tiền. Class cũng có struct Score để tính điểm.

9. Game:
Đây là class Game_main, nơi sẽ điều hành toàn bộ game.
 Game có một số biến toàn cục được sử dụng trong toàn bộ chương trình:

 Class bao gồm tất cả các đối tượng sẽ được dùng trong game. Đối tượng đầu
tiên được khởi tạo là Game_init – khởi tạo của sổ chính cho game.

 Một số hàm chính trong game_main đó là:
• Init()

Nhóm Sinh Viên - UIT

Trang 23/27


Game Mario
Hùng

TS. Ngô Thanh




Vòng lặp vô hạn để điều khiển game:



Và một hàm chính nữa là Update(): cập nhật tất cả các đối tượng trong
game và thể hiện ra màn hình.

Nhóm Sinh Viên - UIT

Trang 24/27


Game Mario
Hùng

TS. Ngô Thanh

IV. Ưu Nhược Điểm.
1. Ưu điểm:
 Game đáp ứng được các yêu cầu cần thiết phải có.
 Giao diện tương đối thu hút người chơi.
 Game có có đối tượng mới như súng, EMario…
 Game có các màn chơi có tính chinh phục và thử thách người chơi.
2. Nhược điểm:
 Game vẫn còn một số lỗi nhỏ: như Mario bị dính vào gạch (chỉ có khi ăn nấm
lớn lên)
 Chưa có được sự khác biệt lớn giữa các game Mario khác
 Hạn chế ý tưởng trong game.
B. MapEditor
I.


Giới Thiệu.
 Việc chơi game Mario sẽ tạo ra trong mỗi người chơi một cảm giác khác nhau,
tùy theo cảm nhận của mỗi người mà game hay hay dở, khó hay dễ…
 Việc tạo MapEditor phần quan trọng là giúp cho người phát triển game có thể dễ
dàng thể hiện ý tưởng của mình, giúp cho các Map trong game đáp ứng được
nhu cầu giải trí của người dùng.
 Ngoài ra MapEditor sẽ giúp người chơi (có ít kỹ năng sử dụng) có thể tạo ra
những Map khác nhau, tùy theo sở thích, tư duy của mỗi người.
II. Chương Trình.
Chương trình cup cấp giao diện giúp người dùng chỉ việc kéo thả các items để tạo
thành Map theo ý.
1. Giao diện chính:
• Màn hình chính nơi chứa các items, thể hiện của 1 map:

Nhóm Sinh Viên - UIT

Trang 25/27


×