Nhân vật sẽ phải di chuyển về phía trước và người chơi gần phải tính toán thời gian, khoảng cách và đưa ra quyết định, kết hợp với sự khéo léo để vượt qua các chướng ngại vật tĩnh / động
Trang 1
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN ĐHQG-HCM
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO THIẾT KẾ GAME
MÔN: NHẬP MÔN LẬP TRÌNH
Giảng viên: Vũ Quốc Hoàng
Nhóm 4
Trang 2
Nội dung báo cáo
II 20 ae 3
MU 0 0 ha 3
2 _ Kế hoạch làm việc hàng tuần . - + nh nành TH ng HH TH TH HT ng TH HH 3 3 Công cụ hỗ trợ L4 H111 T121 11 1111111111115111511151511 11111 1ET1111E111E1111.1x E1 4
IMII 4T .4ẦỔ 5
II 2121 5a ố 5
HN na ae .e 5
E5 ' '”'"'"'.'.-"'"-"'"-.”- 5
4 Da dang va ii na cố se ằ e 8
5 _ Hiệu ứng âm thanh — Background MUSÍC - Q1 vn nh HH TH ng HH ng HH ryy 8 Ill Tổng quan Kỹ thuật lập trình và Thuật toán: . - S002 HErkrkrrrrrrrrerersre 9 1 Kỹ thuật lập trình và cách tổ chỨC - 1 21 E11 E* SE HT TT TH Tnhh ng 9 PIN 2.5m 434A 9
a _ Xác định va chạm (Collision Detection) - cnnn HH TH ng HH ng ng rryy 9 b Tao ban 28 .4Ầ 11
LAN ah 0n 13
"ha 13
2 Nhược điểm nh HH HH HE HE TT Thy 13 "AT j2.) —— 13
'/JTEE Nhu 5a 4äầAĂA-7+ 13
Trang 3NOI DUNG BAO CAO
Thông tỉn nhóm
1 Thành viên và vai trò
23127162 | Trần Nguyễn Song Chỉ | Đồ họa — Tester tnschi23@clc.fitus.edu.vn
23127216 | Lê Hoàng Lâm Thiết kế - Coder lhlam23 @clc.fitus.edu.vn
23127223 | Nguyễn Lê Thiên Lý Thư ký - Tester nltly23@clc.fitus.edu.vn
23127371 | Lê Võ Xuân Hưng Nhóm trưởng — lvxhung23@clc.fitus.edu.vn
Thuyết trình
23127514 | Nguyễn Mạnh Tường | Hiệu ứng âm thanh | nmtuong23@clc.fitus.edu.vn
2 Kế hoạch làm việc hàng tuần
Hạn kế hoạch làm viéc: 4/12/2023
Tuần 1 (từ 16/0 dén 23/10) : Tim hiéu vé thư viện Pygame của Python và lên
ý tưởng cho game
Tuan 2 va tuan 3 (tir 23/10 đến 6/11):
©
©
©
Hoàn thiện điều khiển nhân vật
Hoàn thiện chuyển động của các vật thể
Hoàn thiện các cơ chế tương tác giữa các vật thể và nhân vật
Tuần 4 (từ 6⁄41 đến 13/11):
©
©
©
©
Hoàn thiện phần khởi tạo màn chơi
Hoàn thiện cơ chế tính điểm cho người chơi
Hoàn thiện giao diện màn chơi
Sửa lỗi và điều chỉnh cơ chế tương tác của các vật thể
Tuần 5 (tir 13/11 dén 20/11):
© Hoàn thiện giao diện màn chơi
Hoàn thiện giao diện mở đầu
Hoàn thiện giao diện lựa chọn nhân vật
Bổ sung các cơ chế còn thiếu của game
Sửa lỗi các phần trước đó
Tuần 6 (từ 20/11 đến 27/41):
©
©
©
©
n
©
©
©
©
Hoàn thiện cơ chế game cuối cùng
Thêm sound effect + bgm cho game
Ưu hóa trải nghiệm người dùng
Fix lỗi xảy ra trong khi chơi
Tuần 7 (từ 27⁄41 đến 4/12):
Kiểm tra lỗi
Trang 4©_ Viết báo cáo đồ án
© Lam PowerPoint thuyết trình
Công cụ hỗ trợ
Visual Studio Code — Code game
Clip Studio Paint — Đồ họa
Facebook Messenger — Trao đổi thông tin
Microsoft OneDrive — Thư mục làm việc, chia sẻ tài liệu Microsoft Word — Tạo báo cáo
Trang 5Thiết kế game
1 Thông tỉn chung về game
a Tên game: Crossover Weather
b Thể loại:
- Endless Runner
- 1 người choi
c Ý tưởng: Lấy cảm hứng từ tựa game huyền thoại: Crossy Road
d Mô tả ngắn: Người chơi sẽ phải điều khiển nhân vật vượt qua các thử thách, chướng ngại vật để đi xa nhất
e Ngôn ngữ lập trình: Python
f Mục tiêu của trò chơi: Vượt qua các thử thách và chướng ngại vật, đi xa nhất
và giành điểm cao nhất có thể
2 Gameplay
- Điều khiển:
© Di chuyển: WASD / mũi tên lên, xuống, trái, phải
[^J[s J[b]
© Di chuyển nhanh: phím cach (Space)
- Quy luat choi:
o_ Người chơi điều khiển nhân vật của mình di chuyển bằng các nút điểu khiển (WASD / mũi tên và phím cách) Nhân vật sẽ phải di chuyển về
phía trước và người chơi gần phải tính toán (thời gian, khoảng cách)
và đưa ra quyết định, kết hợp với sự khéo léo để vượt qua các chướng ngại vật tĩnh / động
©_ Một khi rơi xuống dòng sông hoặc cây ngã đè lên nhân vat hoặc bị
quả cầu tuyết lăn qua, người chơi sẽ thua và được ghi điểm tự động
3 Đồ họa
Các tất cả hình ảnh, vật thể (môi trường, nhân vật, chướng ngại vật) đều được thành viên phụ trách đồ họa vẽ tay bằng Clip Studio Paint
a Môi trường và chướng ngại vật
- Có 2 kiểu thời tiết: mùa hạ và mùa đồng
Trang 6© Cầu tuyết:
b Nhân vật
1 Cat (Mèo)
Trang 7
3 Dinosaur (Khủng Long) & di ey i
|
6 Frog (Ech) § s1 40 Qe
c Giao diện
Phong cách đồ họa pixel 2D đơn giản, dễ thương và gần gũi với người chơi Nhân vật và môi trường được thiết kế với tông màu sáng, tạo cảm giác tươi
sáng cho trò chơi
Giao diện game:
Your character:
Version 1.7
O Giao diện tạm dừng / kết thúc trò chơi:
Trang 84 Đa dạng và độ khó
Paused Game Over
Highest score: 10560 Your score: 1100
6 @
- C6 3 d6 kho: Easy, Medium, Hard
© Ché dé Easy (Dé):
Với cấp độ đơn giản nhất, các chướng ngại vật tương đối chưa
quá phức tạp Chỉ gồm các khúc gỗ bình thường trôi trên sông, và
những khúc gỗ chặn đường có xác suất xuất hiện
Ché độ Medium (Trung Bình):
Với cấp độ khó Trung Bình, các chướng ngại vật khó chịu sẽ dần xuất hiện nhiều hơn Với việc các khúc gỗ chặn đường sẽ luôn xuất hiện, các khúc gỗ trôi nay đã có thể bị nứt khi đứng quá lâu, cũng như các cây bên đường cũng có khả năng bị đổ bất ngờ
Ché độ Hard (Khó):
Với cấp độ khó nhất, các chướng ngại vật sẽ hầu như không có quá nhiều thay đổi so với cấp độ khó Trung bình Nhưng lúc này, độ
khó sẽ tăng thông qua việc tăng khoảng cách giữa các bờ hay sẽ xuất hiện ba con sông liên tiếp nhau
Hiệu ứng âm thanh — Background Music
Intro BMG: The Hairy Orange Spider | Royalty-free Music - Pixabay
Playing BMG: Cute Creatures | Royalty-free Music - Pixabay
Press Button: Interface | Royalty-free Music - Pixabay
Touch Button: Button | Royalty-free Music - Pixabay
Game Over: Game Over — Super Mario
Trang 9Ill Tổng quan Kỹ thuật lập trình và Thuật toán
1 Kỹ thuật lập trình và cách tổ chức
a Kỹ thuật lập trình
Lập trình hướng đối tượng OOP (Object - Oriented Programming)
b Cách tổ chức
Để thuận tiện cho việc quản lý và sửa lỗi, mã nguồn (source code) của game được chia thành các tệp (file) source code khác nhau, và được sử dụng bằng cách import module của Python
main.py : chứa mã nguồn (code) phục vụ cho việc khởi tạo của Pygame và thực hiện vòng lặp game (GameLoop)
PlayerManager.py: chứa mã nguồn (code) của lớp đối tượng (class) Player — người chơi
ObstacleManager.py: chứa mã nguồn (code) của các lớp đối tượng (class) chướng ngại vật
ValueManager.py: chứa các giá trị (value) mặc định và dùng để dùng chung cho game
ObjectManager.py: chứa mã nguồn (code) của các lớp đối tượng (class) của
phần UI
GameMechanism.py: chứa mã nguồn (code) của các hàm liên quan đến tương tác của người chơi với nhân vât, giữa nhân vật và các chướng ngại vật,
và vận hành của màn chơi
ScreenManager.py: chứa mã nguồn (code) của các lớp đối tượng (class) của các giao diện màn hình của game
FileManager.py: chứa mã nguồn (code) của các hàm liên quan đến phần đọc,
ghi file
report.py: chứa mã nguồn (code) cho việc hiển thị một số cảnh báo
2 Thuật toán cốt lõi
a Xác định va chạm (Collision Detection)
Collision Dection gồm 2 loại: Toán học (Mathematically) và Đồ họa (Graphically)
% Về mặt Toán học (Mathematically)
- Toán hoc (Mathematically): la dung cdc mé hinh toán học để mô tả vị trí và hình dạng giữa những đối tượng Từ đó kiểm tra xem 2 đối tượng có va chạm với nhau không
Với mỗi đối tượng (object) sẽ có một thành phần (attribute) la Rect — là một hình chữ nhật bao quanh vật thể, đây là một thành phần (attribute) được kế thừa từ lớp (class)
Sprite của Pygame
Trang 10
midtop
center left midleft e midright $ right h
(centerx,centery) midbottom
w
Dưới đây là một số hàm để xác định va chạm (Collsion Dectection):
.rect.bottom
player
bottom_limit Tect.bottom
(
left_limit < player.centerx <right_limit
top_limit <= player.bottom <= bottom_limit
% Về mặt Đồ họa (Graphically)
- Đồ họa (Graphically): là sử dụng các định nghĩa về pixel của những đối tượng, và xác định xem nếu có pixel nào chồng lấp (overlap) lập tức là 2 đối tượng va chạm Ngược lại
là không
Với mỗi đối tượng (object) sẽ có một thành phần (attribute) là mask — gồm những pixel không trong suốt của surface, mỗi pixel sẽ sử dụng 1 bit để xem pixel đó có bị chồng lấp,
va chạm không
Trang 11
MO.) tect[1]
iesfinrast mask
njgƒtùnnnsit mask
leftmask (rightmask, (xoffset, yoffset))
Vì Pygame đã có hàm hỗ trợ trong vấn đề này nên là trong tài liệu này chỉ có đoạn code
áp dụng hàm đó
(
Dygame.SpDFIfe
Một bản đồ sẽ có dạng là các tầng xếp chồng lên nhau Gồm có 12 tầng, được đánh số
từ 1 đến 12 theo thứ tự từ dưới lên
Nhân vật sẽ xuất phát tại tầng 1, và đi đến cuối tầng 12 để hoàn thành một màn chơi Khi hoàn thành màn chơi, nhân vật sẽ được đặt lại vị trí tầng 1 và lặp lại quá trình như trên
Để tạo được tính khả thi cho việc vượt màn thì trong một bản đồ sẽ gồm 2 loại tầng
khác nhau là tầng trống và tầng ngại vật
«_ Tầng trống là tầng thoáng, nhân vật sẽ được tự do di chuyển hơn nhưng vẫn sẽ
xuất hiện chướng ngại vật, cản trở hoặc tấn công nhân vật
« Tầng ngại vật là tầng chứa chướng ngại vật, hạn chế khả năng di chuyển của
người chơi
Trang 12Như vậy, để nhân vật có thể di chuyển qua được mỗi các tầng thì cần phải tính toán và
quy định một số vị trí đặc biệt để tồn tại cách di chuyển để nhân vật vượt qua
Đối với tầng thoáng: Là tầng nghỉ, là chuyển giao giữa một hoặc nhiều tầng ngại vật nên
vì thể phải có vị trí để nhân vật đặt chân lên, nhưng cũng phải có chút cản trở
« Cây: Được đặt sát phía ngoài ở một trong hai bên của tầng Như vậy, người chơi
sẽ có cái nhìn thoáng hơn, tránh gây cản trở tầm nhìn Nhưng khi lên đến độ khó cao hơn sẽ có xác suất đổ hoặc sẽ đổ về phía người chơi, tạo bất ngờ khiến người
chơi thua hoặc cản trở người chơi
« Ngại vật chặng đường: sẽ được đặt trong khoảng giữa của tầng, trong một phạm
vi nhất định để người chơi có thể có chỗ đứng để tiếp tục qua màn hoặc né tránh cây đổ
Đối với tầng ngại vật:
« _ Trường hợp 1: Chỉ có một tầng ngại vật riêng lẻ, người chơi hoàn toàn có thể Vượt qua được
«_ Trường hợp 2: Có hai tầng ngại vật nằm cạnh nhau, khi đó người chơi sẽ có ít
cách di chuyển hơn, để tồn tại được cách di chuyển đúng đắn, ta sẽ làm như sau:
© Đặt hai ngại vật tại hai vị trí xác định để có giao điểm nằm trong vùng
nhìn thấy
«_ Trường hợp 3: Có ba tầng ngại vật nằm cạnh nhau, khi đó người chơi sẽ phải chọn một cách đi hiệu quả hơn, như vậy ta phải làm sao để tồn tại cách di chuyển đó:
© Ba ngại vật có cùng tốc độ phải di chuyển ngược chiều xen kẽ nhau Ngại vật tiếp theo phải có chiều ngược lại ngại vật trước đó
o Đặt ba ngại vật tại những vị trí được xác định để tồn tại cách di chuyển Vị trí của ngại vật tiếp theo phụ thuộc vào vị trí ngại vật trước đó để có cách di
chuyển
Ngoài ra, sau khi đạt được các điều kiện nhất định sẽ dần đến thay đổi môi trường hoặc
độ khó của màn chơi, khi đó chỉ cần thay đổi ngại vật được đặt vào, và vẫn hoàn toàn giữ cơ chế tạo bản đồ ban đầu
Trang 13
IV Đánh giá và nhận xét
1 Ưu điểm
- _ Đơn giản và dễ chơi, không đòi hỏi quá nhiều kĩ thuật cao, nhưng không quá dễ dàng để vượt qua nhiều màn chơi
- Đồ họa, âm thanh, nhân vật, được thiết kế theo phong cách đáng yêu Nhân vật và
môi trường mang màu sắc tươi sáng Thiết kế đơn giản nhưng thu hút, thân thiện
- _ Không giới hạn thời gian chơi Người chơi có thể chơi trong thời gian rảnh và có
dừng lại khi cần thiết mà không gặp khó khăn gì từ game
2 Nhược điểm
- Đồ họa đơn giản tuy là một phần của phong cách nghệ thuật, nhưng cũng có thể
làm giảm sự hấp dẫn của trò chơi
-_ Thiếu tính thử thách, phong phú Mặc dù có thay đổi môi trường và nhân vật chơi, nhưng không quá nhiều và vẫn giữ nguyên gameplay do đó các hành động của người chơi được lặp đi lặp lại có thể gây nhàm chán
-_ Thiếu mối liên kết giữa các người chơi Chưa cung cấp chế độ nhiều người chơi để
các người chơi chơi cùng và so tài với bạn bè
V Tỉ lệ đóng góp
23127514 | Nguyễn Mạnh Tường Hiệu ứng âm thanh 17.5%
VI - Tài liệu tham khảo
._ Tài liệu về Pygame: Pygame Front Page — pygame v2.6.0 documentation
._ Tài liệu hướng dẫn về Pygame: Pygame Fundamentals - ClearCode
._ Tài liệu hướng dẫn về OOP: Understanding classes and object-oriented programming
Python Tutorial]