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

báo cáo 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 (539.63 KB, 29 trang )

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
LỚP CNPM03
oOo
BÁO CÁO ĐỒ ÁN
MÔN : CA PHƯƠNG PHÁP LẬP TRÌNH
CHỦ ĐỀ : BÁO CÁO GAME MARIO
GVHD : TS. NGÔ THANH HÙNG
Nhóm sinh viên:
1. Trần Quốc Công 08520046
2. Nguyễn Công Huy08520148
3. Cù Duy Khoa 08520181


4. Bùi Ngọc Huy 08520544
Thành phố Hồ Chí Minh, ngày 17 tháng 1 năm 2011
Lời cảm ơn
Chúng em xin chân thành cảm ơn Khoa Công nghệ phần mềm, trường Đại học
Công nghệ thông tin – ĐHQG Tp. HCM đã tạo điều kiện cho chúng em được
thực hiện đồ án môn học “Các phương pháp lập trình”. Chúng em cũng xin chân
thành cám ơn TS. Ngô Thanh Hùng, thầy đã giảng dạy cho chúng em những
kiến thức cần thiết cho môn học này. Những kiến thức đó đã giúp cho chúng em
rất nhiều trong quá trình làm đồ án môn học. Chúng em xin chân thành cám ơn
quý Thầy cô trong Khoa đã tận tình giảng dạy và trang bị cho chúng em những
kiến thức cần thiết trong thời gian qua. Cuối cùng xin gửi lời biết ơn đến gia
đình, bạn bè đã ủng hộ, giúp đỡ và động viên trong những lúc khó khăn cũng

như trong suốt thời gian học tập vừa rồi. Mặc dù nhóm đã cố gắng hoàn thành
đồ án môn học với tất cả nỗ lực của từng thành viên trong nhóm, nhưng đồ án
chắc chắn không tránh khỏi những thiếu sót nhất định, rất mong nhận được sự
cảm thông, chia sẻ và tận tình đóng góp chỉ bảo của quý Thầy Cô.
NHÓM THỰC HIỆN
BÙI NGỌC HUY 08520544
NGUYỄN CÔNG HUY 08520148
CÙ DUY KHOA 08520181
TRẦN QUÔC CÔNG 08520046
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
……………………………………………………………………………………
……………………………………………………………………………………

……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………

……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………

TP Hồ Chí Minh, ngày … tháng… năm 2011
Ký tên
TS. Ngô Thanh Hùng
Contents
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
1 Giới thiệu về game Mario
Mario (Tiếng Nhật:マリオ) là nhân vật trong game được tạo bởi nhà thiết kế
game người Nhật Shigeru Miyamoto. Mario đã trở thành linh vật biểu trưng cho hãng
Nintendo. Mario được phát họa với dáng lùn, là người anh song sinh của Luigi.
Nguyên bản Mario được thiết kế trên nền đồ họa 2D, nhưng với những phiên bản sau
này được thiết kế với đồ họa 3D.

Mario được mô tả là thợ sửa ống nước người Ý với chiều cao 155cm, dáng vẻ bệ vệ,
sống ở Vương quốc Nấm (Mushroom Kingdom). Anh ta được biết đến với việc
thường xuyên ngăn trở kế hoạch bắt cóc công chúa Quả Đào (Princess Peach) và thôn
tính Vương quốc Nấm của Quốc vương Bowser (King Bowser). Trở thành linh vật
của Nintendo, Mario được bình chọn là nhân vật nổi tiếng nhất trong lịch sử video
game. Với việc bán được hơn 193 triệu bản, loạt game Mario trở thành loạt game bán
chạy nhất trong lịch sử.
2 Giới thiệu vấn đề
Yêu cầu chương trình cuả chúng ta ở đây là làm sao thiết kế được 1 chương
trình game giống (hoặc gần giống) như Mario trên dựa vào các phương pháp lập trình
đã học. Cụ thể là sử dụng phương pháp lập trình hướng đối tượng kết hợp với các mẫu
thiết kế và các giải thuật toán học(đệ quy…).

3 Phân tích và thiết kế
3.1 Phân tích
3.1.1 Danh sách các class sử dụng kế thừa trong game
STT Tên Class Chức Năng
1 Object Đây là lớp cha, chứa các hàm ảo và các thuộc
tính cần thiết cho việc lưu trữ.
2 Brick Chứa các hàm xử lý và hiển thị viên gạch trong
game.
3 PowerUp Chứa các hàm xử lý và hiển thị nấm+súng
4 Mario Chứa các hàm xử lý và hiển thị mario
5 Qbrick
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046

Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
6 Clumn
7 Ground
8 Koopa Chứa các hàm xử lý và hiển thị con rùa
9 Cloud Quản lý và hiển thị đám mây
10 LifeFungus
11 Stone
12 Pipe Quản lý và hiể thị ống nước
13 Coin Quản lý và hiển thị đồng tiền
14 Castle

15 Star
16 Flag
17 Pirhana Quản lý và hiển thị bông hoa trong ống nước
18 Hill Quán lý và hiển thị ngọn đồi nền
19 Goomba Xử lý và hiển thị quái vật
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
3.1.2 Sơ đồ các class kế thừa trong game.
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page

Class
Ground
Class
Koopa
Class
PowerUp
Class
Clumn
Class
Brick
Class
QBric

k
Class
Mario
Class
Object
Class
LifeFungu
s
Class
Cloud
Class
Pirhana

Class
Hill
Class
Pipe
Class
Castle
Class
Flag
Class
Stone
Class
Goomba

Class
Star
Class
Coin
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
3.2 Thiết kế:
3.2.1 Other:
3.2.1.1 Class Object : đây là lớp cha. Chủ yếu chứa các biến dùng chung
cho các class dẫn xuất và các hàm ảo.
STT Tên Hàm/ Tên Biến Kiểu Dữ
Liệu / Kiểu

Trả Về
Chức Năng
1 X Float Tọa độ theo phương x trong
màn chơi
2 Y Float Tọa độ theo phương y trong
màn chơi
3 Width Float Chiều rộng trên màn hình
4 Hight Float Chiều cao trên màn hình
5 ID Int Mỗi đối tượng sẽ có một mã
6 Rect RECT Lưu vị trí của đối tượng
trong game
7 Sprite Sprite* Lưu hình ảnh của đối tượng

8 Object() Hàm khởi tạo
9 Object(float _x, float _y, float
_width, float _height)
Hàm khởi tạo giá trị cho các
biến x,y,width,hight
10 ResetRect() Void Hàm ảo
11 ResetWhenReload(Sprite*
_sprite)
Void Hàm ảo
12 SetVariable(char* varName,int
val)
Void Hàm ảo

13 GetVariable(char* varName) Int Hàm ảo
14 Update(list<Object*>*
staObjs,list<Object*>*
dynObjs,Input* input, float
TPF)
Void Hàm ảo
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
15 Render(Camera* camera) Void Hàm ảo
16 Save(fstream *fs) Void Hàm ảo

17 Load(fstream *fs) Void Hàm ảo
3.2.1.2 Class Mario : quản lý mario
STT Tên Hàm/ Tên Biến Kiểu Dữ Liệu
/ Kiểu Trả Về
Chức Năng
1 isBig Bool Nếu là true thì mario đang bự,
ngược lại thì nhỏ
2 waitNextRow Float Thời gian tạo hiệu ứng nhấp nháy
3 isHasStar Bool Nếu là true thì mario có áo giáp,
ngược lại thì ko
4 waitLostStar Float
5 Vx Float Vận tốc mario theo phương x

6 Vy Float Vận tốc mario theo phương y
7 Ax Float Gia tốc mario theo phương x
8 Ay Float Gia tốc mario theo phương y
9 xOld Float Vị trí mario cũ theo phương x
10 yOld Float Vị trí cũ của mario theo phương y
11 oldRECT RECT Vị trí cũ của mario
12 isFaceRight Bool Nếu là true thì đang quay qua phải,
ngược lại thì trái
13 isJumming Bool Nếu là true thì mario đang nhảy,
ngược lại thì ko
14 isShotable Bool Nếu là true thì mario có thể bắn,
ngược lại thì ko

15 timeJumped Float Lưu thời gian mà mario nhảy trên
không
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
16 sBig Sprite* Quản lý hình ảnh mario bự
17 collisionList List<Object*>
*
Lưu các đối tượng mà mario có thể
va chạm
18 Camera Camera* Quản lý màn hình hiển thị

19 Score Int Lưu điểm số
20 Coint Char Lưu số tiền xu ăn đuọc
21 Numlife Char Số mạng
22 Mario() Hàm khởi tạo
23 Mario(float _x, float
_y,float width,float
height,int _ID,Sprite*
_sSmall,Sprite*
_sBig,Camera*
_camera)
Hàm khởi tạo các giá trị
24 Update(list<Object*>*

staObjs,list<Object*>
* dynObjs,Input*
input, float TPF)
Void Cập nhật lại các giá trị
29 ResetRect() Void Cập nhật lại vị trí mario
30 SetVariable(char*
varName,int val)
Void
31 GetVariable(char*
varName)
Int
32 ResetWhenReload(Spr

ite* _sprite)
Void
33 Save(fstream *fs) Void
34 Load(fstream *fs) Void
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
3.2.2 Terrain
3.2.2.1 Class Brick :
STT Tên Hàm/ Tên Biến Kiểu Dữ
Liệu /

Kiểu Trả
Về
Chức Năng
1 State Char Lưu giữ các trạng thái của
viên gạch
2 yOld Float Lưu giữ vị trí trước của viên
gạch
3 Vy Float Vận tốc của viên gạch theo
phương y
4 Ay Float Gia tốc của viên gạch theo
phương y
5 xBreak1, yBreak1, xBreak2,

yBreak2, vyBreak1,vyBreak2,
vxBreak1, vxBreak2, ayBreak
Float Lưu giá trị các mảnh vỡ của
viên gạch
6 isContainCoin Bool Nếu là true thì viên gạch có
chứa đồng xu, ngược lại thì
ko
7 isNeedDelete Bool Nếu là true thì xóa ra khỏi
Quadtree, ngược lại thì ko
8 Brick() Hàm khởi tạo
9 Brick(float _x, float _y,float
width,float height,bool

_isBright,int _ID,Sprite*
_sprite)
Hàm khởi tạo các giá trị
10 SetVariable(char*
varName,int val)
Void Thiết lập trạng thái cho đối
tượng viên gạch đang xét
11 GetVariable(char* varName) Int Trả về trạng thái hiện tại của
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng

đối tượng viên gạch đang xét
12 Update(list<Object*>*
staObjs,list<Object*>*
dynObjs,Input* input, float
TPF)
Void Thiết lập lại các giá trị của
đối tượng viên gạch
13 Render(Camera *camera) Void Vẽ đối tượng viên gạch
14 ChangeState(char _state) Void Thay đổi trạng thái cho đối
tượng
15 ResetWhenReload(Sprite*
_sprite)

Void
16 Save(fstream *fs) Void
17 Load(fstream *fs) void
3.2.2.2 Class Qbrick
STT Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu
trả về
Chức năng
1 State Char Lưu trạng thái của đối
tượng Qbrick
2 Vy Float Vận tốc theo phương y
3 Ay Float Gia tốc theo phương y

4 isBright Bool Nếu là true thì sáng lên,
ngược lại thì ko
5 Qbrick() Hàm khởi tạo
6 QBrick(float _x, float _y,float
width,float height,bool _isBright,int
_ID,Sprite* _sprite)
Hàm khởi tạo các giá trị
7 Update(list<Object*>*
staObjs,list<Object*>*
dynObjs,Input* input, float TPF)
Void Cập nhật lại các giá trị
8 SetVariable(char* varName,int val) Void

Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
9 GetVariable(char* varName) Int
10 Render(Camera *camera) Void Hiển thị lên màn hinh
11 ChangeState(char _state) Void Thay đổi trạng thái
12 UpdateAnimation(float TPF) Void
13 ResetWhenReload(Sprite* _sprite) Void
14 Save(fstream *fs) Void
15 Load(fstream *fs) void
3.2.2.3 Class Castle (lâu đài)

STT Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu trả
về
Chức năng
1 Castle(float _x,float
_y,float width,float
height,bool
_isbright,int _Id,Sprite
* _sprite)
Hàm khởi tạo đối tượng Castle với
vị trí (_x,_y), chiều dài, chiều rộng,
tính chất (ẩn, hiện), được kế thừa

từ Object (_x,_y,width,height).
2 Render() void Vẽ đối tượng Castle lên màn hình.
3.2.2.4 Class Flag
STT Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu trả về
Chức năng
1 Flag() Hàm khởi tạo
2 Flag(float _x, float _y,float
width,float height,int _ID,Sprite*
_sprite)
Hàm khởi tạo các giá trị
3 Render(Camera* camera) Void Hàm ảo

4 Save(fstream *fs) Void Hàm ảo
5 Load(fstream *fs) Void Hàm ảo
6 ResetWhenReload(Sprite*
_sprite)
Void
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
3.2.2.5 Class Ground : mặt đất
ST
T

Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu
trả về
Chức năng
1 isBright Bool Nếu là true thì mặt đất có màu
sáng, ngược lại thì sẽ làm tối
2 Ground() Hàm khởi tạo
3 Ground(float _x, float _y,float
width,float height,bool
_isBright,int _ID,Sprite* _sprite)
Hàm khởi tạo với các giá trị
4 Render(Camera* camera) Void Hiển thị đối tượng lên màn

hình
5 ResetWhenReload(Sprite*
_sprite)
Void
6 Save(fstream *fs) Void
7 Load(fstream *fs) void
3.2.2.6 Class Pipe (ống dẫn)
STT Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu trả về
Chức năng
1 Pipe(float _x,float
_y,float width,float

height, int
_Id,Sprite * _sprite)
Hàm khởi tạo đối tượng Pipe với vị trí
(_x,_y), chiều dài, chiều rộng Được kế
thùa từ Object(_x,_y,width,height).
2 Render() void Vẽ đối tượng Pipe lên màn hình
3.2.2.7 Class Stone (Đá)
STT Tên hàm/ tên biến Kiểu dữ liệu/Kiểu
trả về
Chức năng
1 isBright Bool Thể hiện tính chất của đối tượng
Stone.

2 Stone(float _x,float
_y,float width,float
height,bool _isbright,int
_Id,Sprite * _sprite)
Hàm khởi tạo đối tượng Stone
với vị trí (_x,_y), chiều dài,
chiều rộng, tính chất (ẩn,
hiện), được kế thừa từ Object
(_x,_y,width,height).
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH

GVHD: TS Ngô Thanh Hùng
3 Render() void Vẽ đối tượng Stone lên màn hình
3.2.3 Scene
3.2.3.1 Class Cloud : đám mây
STT Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu trả về
Chức năng
1 Cloud() Hàm khởi tạo
2 Cloud(float _x, float _y,float width,float
height,int _ID,Sprite* _sprite)
Hàm khởi tạo các
giá trị

3 Render(Camera* camera) Void Hiển thị đối tượng
lên màn hình
4 ResetWhenReload(Sprite* _sprite) Void
5 Save(fstream *fs) Void
6 Load(fstream *fs) void
3.2.3.2 Class Clumn :
STT Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu trả về
Chức năng
1 Clumn() Hàm khởi tạo
2 Clumn(float _x, float _y,float
width,float height,int _ID,Sprite*

_sprite)
Hàm khởi tạo các giá trị
3 Render(Camera* camera) Void Hiển thị đối tượng lên màn
hình
4 ResetWhenReload(Sprite* _sprite) Void
5 Save(fstream *fs) Void
6 Load(fstream *fs) void
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
3.2.3.3 Class Hill (núi đồi)

STT Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu trả
về
Chức năng
1 Hill(float _x,float
_y,float width,float
height,bool _isbright,int
_Id,Sprite * _sprite)
Hàm khởi tạo đối tượng Hill với vị trí
(_x,_y), chiều dài, chiều rộng, tính
chất (ẩn, hiện), được kế thừa từ
Object (_x,_y,width,height).

2 Render() void Vẽ đối tượng Hill lên màn hình.
3.2.4 Items
3.2.4.1 Class Coin (Đồng xu)
STT Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu trả về
Chức năng
1 container Object * Chứa các đối tượng trong game.
2 isCheckedContainer Bool Kiểm tra đặc tính chứa đối tượng.
3 isNeedDelete Bool Kiểm tra trạng thái của Coin để xóa
đối tượng.
4 CheckContainer(list<
Object*>*staObjs)

void Kiểm tra xem có đối tượng nào chứa
Coin không.
5 State Char Tên trạng thái hiện tại của đối tượng
Coin.
6 Coin(float _x,float
_y,float width,float
height,bool
_isbright,int _Id,Sprite
* _sprite)
Hàm khởi tạo đối tượng Coin với vị
trí (_x,_y), chiều dài, chiều rộng, tính
chất (ẩn, hiện), Kế thừa từ

Object(_x,_y,width,height).
7 Update(list<Object*>
*staObjs,list<Object*
>*dynObjs,Input*
input,float TPF)
void Cập nhật lại đối tượng Coin về trạng
thái, vị trí sau các xử lý va chạm.
8 Render() void Vẽ đối tượng Coin lên màn hình
9 GetVariable(char
*varName)
Int Lấy giá trị về trạng thái có thể xóa đối
tượng Coin.

3.2.4.2 Class LifeFungus (nấm khi Mario còn nhỏ, nếu mario lớn thì nó là
hoa)
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
STT Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu trả về
Chức năng
1 isChecked bool Thuộc tính thể hiện tính chất kiểm tra
va chạm các đối tượng hay chưa.
2 list<Object*>collision

List
Chứa các đối tượng mà LifeFungus có
thể va chạm.
3 oldRect Rect Rect cũ của đối tượng LifeFungus.
4 Container Object * Chứa các đối tượng trong Game.
5 xOld float Vị trí cũ của LifeFungus theo trục x.
6 yOld Float Vị trí cũ của LifeFungus theo trục y
7 Vx Float Vận tốc x của LifeFungus
8 Vy float Vận tốc y của LifeFungus.
9 ay Float Gia tốc của LifeFungus.
10 State Char Thể hiện tên trạng thái của đối tượng
LifeFungus.

11 isNeedDelete bool Thể hiện tính chất của LifeFungus là
xóa chưa.
12 LifeFungus (float
_x,float _y,float
width,float height,bool
_isbright,int _Id,Sprite
* _sprite)
Hàm khởi tạo đối tượng LifeFungus
với vị trí (_x,_y), chiều dài, chiều
rộng, tính chất (ẩn, hiện), Kế thừa từ
Object(_x,_y,width,height).
13 Update(list<Object*>

*staObjs,list<Object*
>*dynObjs,Input*
input,float TPF)
void Cập nhật lại đối tượng LifeFungus về
trạng thái, vị trí sau các xử lý va
chạm.
14 ChangeState(char
_state)
void Thay đổi tên trạng thái của đối tượng
LifeFungus.
15 CheckObjects(list<Ob
ject*>* sta)

void Kiểm tra va chạm các đối tượng.
16 Move(float
TPF,list<Object*>*
staObjs)
void Thể hiện sự di chuyển của LifeFungus
trong game.
17 Render() void Vẽ đối tượng LifeFungus lên màn
hình.
18 SetVariable(char
*varName, int val)
Void Gán tên trạng thái cho đối tượng.
19 GetVariable(char*

varName)
int Trả về trạng thái hiện có của
LifeFungus .
3.2.4.3 Class Pirhana (bông hoa trong ống dẫn):
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
STT Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu trả về
Chức năng
1 ContainerID Int Chứa các Id của đối tượng trong

game.
2 Pirhana(float _x,float
_y,float width,float
height,bool _isbright,int
_Id,Sprite * _sprite)
Hàm khởi tạo đối tượng Pirhana
với vị trí (_x,_y), chiều dài, chiều
rộng, tính chất (ẩn, hiện), được
kế thừa từ Object
(_x,_y,width,height).
3 Update(list<Object*>*sta
Objs,list<Object*>*dynOb

js,Input* input,float TPF)
void Cập nhật lại đối tượng Pirhana
sau các xử lý va chạm.
4 Render() void Vẽ đối tượng Pirhana lên màn
hình
3.2.4.4 Class PowerUp : quản lý đối tượng nấm (ăn được) và hoa(có đạn).
STT Tên Hàm/ Tên Biến Kiểu Dữ
Liệu / Kiểu
Trả Về
Chức Năng
1 Container Object* Đối tượng sẽ chứa đối tượng
PowerUp (cục gạch có nấm)

2 Vx Float Vận tốc theo phương x
3 Vy Float Vận tộc theo phương y
4 Ay Float Gia tốc theo phương y
5 xOld Float Vị trí cũ của nấm
6 yOld Float Vị trí cũ của nấm
7 State Char Lưu trữ trạng thái của đối
tượng
8 isCheckedContainer Bool Nếu là true thì có đối tượng
chứa, ngược lại thì ko
9 isNeedDelete Bool Nếu là true thì sẽ xóa ra khỏi
QuadTree, ngược lại thì ko
10 PowerUp() Hàm khởi tạo

11 PowerUp(float _x, float _y,float
width,float height,int
Hàm khởi tạo các giá trị
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
_ID,Sprite* _sprite)
12 Update(list<Object*>*
staObjs,list<Object*>*
dynObjs,Input* input, float
TPF)

Void Cập nhật lại các giá trị
13 ChangeState(int _state) Void Thay đổi trạng thái
14 Move(float TPF,list<Object*>*
staObjs,list<Object*>*
dynObjs)
Void Di chuyển nấm
15 Render(Camera* camera) Void Hiển thị đối tượng
16 CheckObjects(list<Object*>*
staObjs,list<Object*>*
dynObjs)
Void
17 UpdateAnimation(float TPF) Void

18 SetVariable(char* varName,int
val)
Void Thiết lập trạng thái
19 GetVariable(char* varName) Int Trả về trạng thái đối tượng
20 ResetWhenReload(Sprite*
_sprite)
Void
21 Save(fstream *fs) Void
22 Load(fstream *fs) void
3.2.4.5 Class Star (Ngôi sao):
STT Tên hàm/ tên biến Kiểu dữ liệu/Kiểu
trả về

Chức năng
1 ContainerID Int Chứa các Id của đối tượng trong
game.
2 Star(float _x,float
_y,float width,float
height,bool
_isbright,int
_Id,Sprite * _sprite)
Hàm khởi tạo đối tượng Star với
vị trí (_x,_y), chiều dài, chiều
rộng, tính chất (ẩn, hiện), được
kế thừa từ Object

(_x,_y,width,height).
3 Update(list<Object*
>*staObjs,list<Obje
ct*>*dynObjs,Input
void Cập nhật lại đối tượng Star sau
các xử lý va chạm.
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
* input,float TPF)
4 Render() void Vẽ đối tượng Star lên màn hình

3.2.5 Enemy
3.2.5.1 Class Koopa : con rùa
STT Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu trả
về
Chức năng
1 collisionList List<Object*>
*
Lưu danh sách các
đối tượng có thể va
chạm
2 oldRect RECT Lưu vị trí cũ của

con rùa
3 Vx Float Vận tốc theo
phương x
4 Vy Float Vận tốc theo
phương y
5 Ay Float Gia tốc theo
phương y
6 xOld Float Vị trí cũ theo
phương x
7 yOld Float Vị trí cũ theo
phương y
8 isBright Bool

9 isNeedDelete Bool Nếu là true thì xóa
khỏi QuadTree,
ngược lại thì ko
10 State Char Lưu trạng thái
11 Koopa() Hàm khởi tạo
12 Koopa(float _x, float _y,float
width,float height,bool _isBright,int
_ID,Sprite* _sprite)
Hàm khởi tạo các
giá trị
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page

Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
13 Update(list<Object*>*
staObjs,list<Object*>*
dynObjs,Input* input, float TPF)
Void Cập nhật lại các giá
trị
14 SetVariable(char* varName,int val) Void
15 GetVariable(char* varName) Int
16 Render(Camera *camera) Void Hiển thị lên màn
hinh
17 ChangeState(char _state) Void Thay đổi trạng thái

18 UpdateAnimation(float TPF) Void
19 ResetWhenReload(Sprite* _sprite) Void
20 Save(fstream *fs) Void
21 Load(fstream *fs) void
3.2.5.2 Class Goomba (tên quái vật trong game)
STT Tên hàm/ tên biến Kiểu dữ
liệu/Kiểu trả về
Chức năng
1 list<Object*>collisionList Chứa các đối tượng mà Goomba
có thể va chạm.
2 oldRect Rect Rect cũ của đối tượng Goomba.
3 isBright Bool Thể hiện tính chất của đối tượng

Goomba.
4 isAlive Bool Thể hiện tính chất của đối tượng
Goomba còn sống hay chết.
5 xOld float Vị trí cũ của Goomba theo trục x.
6 yOld Float Vị trí cũ của Goomba theo trục y
7 Vx Float Vận tốc x của Goomba
8 Vy float Vận tốc y của Goomba.
9 ay Float Gia tốc của Goomba.
10 Goomba(float _x,float
_y,float width,float
height,bool _isbright,int
_Id,Sprite * _sprite)

Hàm khởi tạo đối tượng Goomba
với vị trí (_x,_y), chiều dài, chiều
rộng, tính chất (ẩn, hiện), Kế
thừa từ
Object(_x,_y,width,height).
11 Update(list<Object*>*sta
Objs,list<Object*>*dynO
bjs,Input* input,float
TPF)
void Cập nhật lại đối tượng Goomba
về trạng thái, vị trí sau các xử lý
va chạm.

12 Move(float void Thể hiện sự di chuyển của
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
TPF,list<Object*>*
staObjs)
Goomba trong game.
13 UpdateAnimation(float
TPF)
void Cập nhật lại tốc độ chuyển frame.
14 Render() void Vẽ đối tượng Goomba lên màn

hình.
4 Giải quyết vấn đề
4.1 Phương pháp lập trình lập hướng đối tượng
4.1.1 Khái niệm
Lập trình hướng đối tượng (gọi tắt là OOP, từ chữ Anh ngữ object-oriented
programming), hay còn gọi là lập trình định hướng đối tượng, là kĩ thuật lập trình hỗ
trợ công nghệ đối tượng. OOP được xem là giúp tăng năng suất, đơn giản hóa độ
phức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viên
tập trung vào các đối tượng phần mềm ở bậc cao hơn. Ngoài ra, nhiều người còn cho
rằng OOP dễ tiếp thu hơn cho những người mới học về lập trình hơn là các phương
pháp trước đó.
Một cách giản lược, đây là khái niệm và là một nỗ lực nhằm giảm nhẹ các thao

tác viết mã cho người lập trình, cho phép họ tạo ra các ứng dụng mà các yếu tố bên
ngoài có thể tương tác với các chương trình đó giống như là tương tác với các đối
tượng vật lý.
Những đối tượng trong một ngôn ngữ OOP là các kết hợp giữa mã và dữ liệu mà
chúng được nhìn nhận như là một đơn vị duy nhất. Mỗi đối tượng có một tên riêng
biệt và tất cả các tham chiếu đến đối tượng đó được tiến hành qua tên của nó. Như
vậy, mỗi đối tượng có khả năng nhận vào các thông báo, xử lý dữ liệu (bên trong của
nó), và gửi ra hay trả lời đến các đối tượng khác hay đến môi trường.
4.1.2 Đặc điểm của lập trình hướng đối tượng
Tập trung vào dữ liệu thay cho các hàm. Chương trình được chia thành các đối
tượng độc lập. Cấu trúc dữ liệu được thiết kế sao cho đặc tả được các đối tượng. Dữ
liệu được che giấu, bao bọc. Các đối tượng trao đổi với nhau thông qua các hàm.

Chương trình được thiết kế theo hướng tiếp cận từ dưới lên.
4.1.3 Trừu tượng hóa dữ liệu
Khi bắt đầu phát triển phần mềm, lập trình viên sẽ không đi vào viết lệnh ngay
lập tức. Công việc đầu tiên cần nghiên cứu dữ án, phân tích các đặc tả phần mềm, các
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
thành phần cần có. Theo đó, lập trình viên sẽ phải xác định những thông tin, dữ liệu
cần thiết cho từng thành phần. Như vậy, trừu tượng hóa dữ liệu là quá trình xác định,
tập hợp những thuộc tính, hành xử cho một thực thể cụ thể liên quan trong ứng dụng.
Trong quá trình đó, có thể có những chi tiết sẽ được cài đặt nhưng ngược lại sẽ có

những chi tiết cần loại bỏ vì chúng không nằm trong yêu cầu.
Những ưu điểm của việc trừu tượng hóa dữ liệu bao gồm:
- Tập trung vào vấn đề.
- Xác định rõ những thành phần và chức năng cần thiết.
- Loại trừ những chi tiết không cần thiết.
4.1.4 Đa hình
Đa hình là khả năng cho phép một hoạt động có những hành xử khác nhau
trong cùng một đối tượng. khái niệm này ám chỉ việc đối tượng có nhiều phương
thức cùng tền nhưng lại thực hiện những nhiệm vụ khác nhau. Trình biên dịch và hệ
thống thực thi sẽ so khớp mỗi lời gọi phương thức, đối tượng. Khả năng tìm kiếm
đúng để sử dụng trong những tình huống phức tạp là bản chất của tính đa hình. Đa
hình là một trong những đặc trưng quan trọng của hệ thông hướng đối tượng.

4.1.5 Kế thừa
Kế thừa là khả năng cho phép một lớp chia sẻ thuộc tính, hành xử được cài đặt
trong nó. Nguyên lý kế thừa hỗ trợ việc tạo ra cấu trúc phần cấp các lớp. Nó được
hiểu như một cở chế sao chép ảo không đơn điệu và có chắt lọc. Một lớp có thể thừa
kế từ một hay nhiều lớp khác. Theo đó, lớp được kế thừa là lớp cha và lớp kế thừa là
lớp con.
4.1.6 Đóng gói dữ liệu
Đóng gói dữ liệu là quá trình che dấu những cài đặt cụ thể của một đối tượng
với một đối tượng sử dụng khác. Dữ liệu được tổ chức có thể phơi bày với thế giới
bên ngoài hoặc che dấu vào bên trong đối tượng. Những thuộc tính, hành xử được
phởi bày để được truy cập, triệu gọi từ một đối tượng khác. Ngược lại, những thuộc
tính, hành xử được che giấu chỉ đảm nhận hành xử hay lưu trữ dữ liệu cho chính đối

tượng đó, chúng không có khả năng truy cập từ ngoài vào.
4.1.7 Những ưu điểm của lập trình hướng đối tượng.
Loại bỏ được những dư thừa, trùng lặp trong việc xây dựng ứng dụng. Cài đặt
đối tượng giúp xức tiến việc sử dụng lại, trao đổi giữa các đối tượng với nhau do đó
sẽ giảm kích thước, thời gian xử lý,… thời gian phát triển hệ thống, tăng năng xuất
lao động. Dễ bảo trì, nâng cấp, giảm lỗi.
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng
4.1.8 Các thành phần trong lập trình hướng đối tượng
- class: các chức năng, thành phần của một thực thể được định nghĩa một cách chung

nhất trong một mẫu cụ thể được gọi là class.
- Object: là một đối tượng cụ thể của class
- Attribute: là những thành phần được định nghĩa trong một class.
- Operation: giống như một dịch vụ được triệu gọi bởi một đối tượng
- Method: còn gọi là phương thức định nghĩa cụ thể một operation
-Message: là những đòi hỏi, những thông tin cần có cho một operation.
- Event: là những kích hoạt để thực thi một hay nhiều operation
- Construction: là triệu gọi đầu tiên khi một object được tạo. Constructor là một
method đặc biệt được gọi đầu tiên trước khi một method hay attribute có thể được sử
dụng trong một object của một class. Constructor có thể khỏi gán nhữn thuộc tính,
cấp phát bộ nhớ nếu cần thiết.
- Destruction: là phương thức đặc biệt được gọi để hủy một object. Destruction sẽ

xóa object, giải phóng bộ nhớ mà constructor cấp phát. Theo đó, mọi khả năng sử
dụng truy cập tới object này sẽ không còn.
4.2 Hướng đối tượng trong game mario.
Nguyên tắc kế thừa cho phép các lớp dẫn xuất sử dụng các phương thức từ lớp
cơ sở như những phương thức của chính nó, mà không cần thiết phải định nghĩa lại.
Để thuận tiện cho việc tái sử dụng lại các phương thức hay dùng trong các đối
tượng khác nhau, việc tự động so khớp và thực thi các phương thức và các đối tượng.
Trong game, chúng em sử dụng 1 class Object là class cha và các class dẫn xuất.
Việc sử dụng chung con trỏ của lớp cha và tự động trỏ đến đúng đối tượng dẫn
xuất giúp cho việc xử lý trở nên dễ dàng hơn.
Mỗi vật trong game được đưa vào một class quản lý. Việc chia nhỏ này giúp
cho việc quản lý cũng như xử lý trong game dễ dàng hơn.

Danh sách các class sử dụng kế thừa trong game
STT Tên Class Chức Năng
1 Object Đây là lớp cha, chứa các hàm ảo và các thuộc
tính cần thiết cho việc lưu trữ.
2 Brick Chứa các hàm xử lý và hiển thị viên gạch trong
game.
3 PowerUp Chứa các hàm xử lý và hiển thị nấm+súng
4 Mario Chứa các hàm xử lý và hiển thị mario
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page
Đồ án cuối kỳ môn CÁC PHƯƠNG PHÁP LẬP TRÌNH
GVHD: TS Ngô Thanh Hùng

5 Qbrick
6 Clumn
7 Ground
8 Koopa Chứa các hàm xử lý và hiển thị con rùa
9 Cloud Quản lý và hiển thị đám mây
10 LifeFungus
11 Stone
12 Pipe Quản lý và hiể thị ống nước
13 Coin Quản lý và hiển thị đồng tiền
14 Castle
15 Star
16 Flag

17 Pirhana Quản lý và hiển thị bông hoa trong ống nước
18 Hill Quán lý và hiển thị ngọn đồi nền
19 Goomba Xử lý và hiển thị quái vật
4.3 Đệ quy trong cây tứ phân
4.3.1 Giới thiệu về cây tứ phân (QuadTree)
4.3.1.1 Khái niệm
- Cây tứ phân là một cấu trúc dữ liệu dạng cây được liên kết với nhau theo quan hệ
cha con, mà mỗi node cha có bốn node con.
- Cây tứ phân thường được sử dụng trong việc phân chia không gian trong game
hai chiều.
Bùi Ngọc Huy 08520544 Trần Quốc Công 08520046
Nguyễn Công Huy 08520148 Cù Duy Khoa 08520181 Page

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×