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ẫuthiế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ử
Trang 1KHOA CÔNG NGHỆ PHẦN MỀM
LỚP CNPM03 -oOo -
Trang 2Chú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
Trang 3………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
TP Hồ Chí Minh, ngày … tháng… năm 2011
Ký tên
TS Ngô Thanh Hùng
Trang 42 Giới thiệu vấn đề 1
3 Phân tích và thiết kế 1
3.1 Phân tích 1
3.1.1 Danh sách các class sử dụng kế thừa trong game 1
3.1.2 Sơ đồ các class kế thừa trong game 3
3.2 Thiết kế: 4
3.2.1 Other: 4
3.2.2 Terrain 7
3.2.3 Scene 11
3.2.4 Items 12
3.2.5 Enemy 16
4 Giải quyết vấn đề 18
4.1 Phương pháp lập trình lập hướng đối tượng 18
4.1.1 Khái niệm 18
4.1.2 Đặc điểm của lập trình hướng đối tượng 18
4.1.3 Trừu tượng hóa dữ liệu 19
4.1.4 Đa hình 19
4.1.5 Kế thừa 19
4.1.6 Đóng gói dữ liệu 19
4.1.7 Những ưu điểm của lập trình hướng đối tượng 20
4.1.8 Các thành phần trong lập trình hướng đối tượng 20
4.2 Hướng đối tượng trong game mario 20
4.3 Đệ quy trong cây tứ phân 22
4.3.1 Giới thiệu về cây tứ phân (QuadTree) 22
5 Cài đặt và kết quả 25
5.1 Môi trường cài đặt 25
5.2 Quy trình cài đặt 25
5.3 Kết Quả 25
6 Nhận xét, đánh giá 25
Trang 51 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ẫuthiế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
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
Trang 66 Clumn
7 Ground
8 Koopa Chứa các hàm xử lý và hiển thị con rùa
10 LifeFungus
11 Stone
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
Trang 73.1.2 Sơ đồ các class kế thừa trong game.
Class Object
Class
Brick
Class PowerUp
Class Mario
Class QBrick
Class Clumn
Class Ground
Class Koopa
Class Cloud Class LifeFungu
s
Class
Stone
Class Star
Class Coin
Class Pipe
Class Castle
Class Flag
Class Pirhana
Class Hill
Class Goomba
Trang 8trong game
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
Trang 915 Render(Camera* camera) 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
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
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,
Trang 1023 Mario(float _x, float
_y,float width,float
height,int _ID,Sprite*
Void Cập nhật lại các giá trị
29 ResetRect() Void Cập nhật lại vị trí mario
Trang 113.2.2 Terrain
3.2.2.1 Class Brick :
Liệu / Kiểu Trả Về
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
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
Trang 1211 GetVariable(char* varName) Int Trả về trạng thái hiện tại của
đố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
Chức năng
tượng Qbrick
ngược lại thì ko
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ị
Trang 138 SetVariable(char* varName,int val) Void
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
3.2.2.3 Class Castle (lâu đài)
STT Tên hàm/ tên biến Kiểu dữ liệu/
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
Chức năng
2 Flag(float _x, float _y,float
width,float height,int _ID,Sprite*
_sprite)
Hàm khởi tạo các giá trị
Trang 14sáng, ngược lại thì sẽ làm tối
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
Trang 153.2.3.1 Class Cloud : đám mây
liệu/Kiểu trả về Chức năng
2 Cloud(float _x, float _y,float width,float
height,int _ID,Sprite* _sprite)
Hàm khởi tạo các giá trị
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
Trang 163.2.3.3 Class Hill (núi đồi)
STT Tên hàm/ tên biến Kiểu dữ liệu/
3.2.4 Items
3.2.4.1 Class Coin (Đồng xu)
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
Trang 173.2.4.2 Class LifeFungus (nấm khi Mario còn nhỏ, nếu mario lớn thì nó là hoa)
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
4 Container Object * Chứa các đối tượng trong Game
10 State Char Thể hiện tên trạng thái của đối tượng
Trang 183.2.4.3 Class Pirhana (bông hoa trong ống dẫn):
kế thừa từ Object (_x,_y,width,height)
3.2.4.4 Class PowerUp : quản lý đối tượng nấm (ăn được) và hoa(có đạn).
Liệu / Kiểu Trả Về
Chức Năng
PowerUp (cục gạch có nấm)
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
Trang 19QuadTree, ngược lại thì ko
11 PowerUp(float _x, float _y,float
width,float height,int
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*>*
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
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
Trang 203.2.5.1 Class Koopa : con rùa
1 collisionList List<Object*>
*
Lưu danh sách các đối tượng có thể vachạm
Trang 2111 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ị
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
3.2.5.2 Class Goomba (tên quái vật trong game)
1 list<Object*>collisionList Chứa các đối tượng mà Goomba
có thể va chạm
Goomba
Goomba còn sống hay chết
Trang 22void Thể hiện sự di chuyển của
Goomba trong game
13 UpdateAnimation(float
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ữ
Trang 23liệ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ácthà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
Trang 244.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
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 chungnhấ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