Lời mở đầuTrong thế giới công nghệ và lập trình, việc tạo ra các trò chơi điện tử không chỉ là một phương pháp giải trí mà còn là một cách tuyệt vời để ứng dụng và phát triển kỹ năng kỹ
QUAN
Mục tiêu và phạm vi
-Tìm hiểu về công nghệ:
+Tìm hiểu về ngôn ngữ Python cơ bản.
+Tìm hiểu về lập trình game bằng Python.
+Cài đặt và hướng dẫn.
+Sử dụng thư viện Pygame trong Python lập trình game.
Xây dựng game mario ofline bằng ngôn ngữ Python trên máy tính.
Mô tả về game
Trò chơi "Mario" là một tựa game platformer kinh điển, mang đến trải nghiệm giải trí sôi động và thử thách kỹ năng phản xạ của người chơi Người chơi sẽ điều khiển nhân vật nhảy qua các chướng ngại vật và vượt qua các màn chơi đa dạng trong thế giới hai chiều Mỗi màn chơi đều chứa đựng những thử thách mới cùng với các bí ẩn cần khám phá, với mục tiêu chính là đạt đến đích an toàn và ghi điểm cao nhất.
Người chơi cần điều khiển rắn để ăn mồi và ngăn chặn rắn từ việc va chạm vào tường hoặc chính cơ thể của mình. b) Menu chính
Gồm 3 chế độ: PLAY, OPTION và QUIT.
+Khi chọn chế độ PLAY trò chơi sẽ bắt đầu và màn hình chơi sẽ được hiển thị.
+Khi chọn chế độ OPTION, người chơi có thể tắt/mở âm thanh và điều chỉnh độ sáng và âm lượng.
+Khi chọn chế độ QUIT, trò chơi sẽ được thoát( tắt ). c) Cách chơi
-Di Chuyển Rắn: Sử dụng các phím mũi để điều khiển hướng di chuyển của rắn.
-Ăn Mồi: Khi rắn ăn một mồi, chiều dài của rắn tăng lên.
-Tránh Va Chạm: Tránh va chạm vào tường hoặc cơ thể của rắn để duy trì sự sống. d) Điểm Số
-Mỗi lần rắn ăn một mồi, người chơi nhận được điểm.
-Điểm số tăng theo chiều dài của rắn. e) Kết thúc game
-Trò chơi kết thúc khi rắn va chạm vào tường hoặc cơ thể của mình. -Hiển thị điểm số cao nhất đạt được bởi người chơi.
2.3 Âm thanh và đồ họa a) Âm thanh Âm thanh nhẹ khi rắn ăn mồi hoặc khi game kết thúc. b) Đồ họa
-Giao diện đồ họa đơn giản với các hình ảnh rắn và mồi.
-Hiển thị điểm số trên màn hình.
THIỆU NGÔN NGỮ PYTHON VÀ THƯ VIỆN PYGAME
Giới thiệu
1.1.Ngôn ngữ python a)Python là gì?
Python là ngôn ngữ lập trình thông dịch, đa mục đích và mã nguồn mở, được thiết kế để dễ đọc và có cú pháp gọn nhẹ Điều này giúp lập trình viên tập trung vào việc giải quyết vấn đề mà không bị phân tâm bởi cú pháp phức tạp.
1989-1991: Python được tạo ra bởi Guido van Rossum tại CWI (Centrum Wiskunde & Informatica) ở Hà Lan Phiên bản đầu tiên, Python 0.9.0, được phát hành vào tháng 2 năm 1991.
1994: Python 1.0 ra mắt với nhiều tính năng mới như lambda, map, filter, và reduce.
2000: Python 2.0 giới thiệu Garbage Collection và hỗ trợ Unicode Python ngày càng trở nên phổ biến, đặc biệt trong cộng đồng lập trình web.
Năm 2008, Python 3.0, còn được gọi là Python 3000 hay "Py3k", được phát hành với những thay đổi lớn trong cú pháp và thiết kế Phiên bản này nhằm cải thiện sự đơn giản trong lập trình, đồng thời vẫn giữ lại tính tương thích ngược với Python 2.
Ngày nay, Python đã vươn lên trở thành một trong những ngôn ngữ lập trình phổ biến nhất toàn cầu, được ứng dụng rộng rãi trong nhiều lĩnh vực như phân tích dữ liệu, trí tuệ nhân tạo, phát triển web và hệ thống Những đặc điểm nổi bật của Python bao gồm cú pháp đơn giản, dễ học, khả năng mở rộng linh hoạt và hỗ trợ mạnh mẽ từ cộng đồng lập trình viên.
Python nổi bật với cú pháp đơn giản và rõ ràng, giúp người lập trình dễ dàng tiếp cận và hiểu rõ hơn Điều này cho phép họ tập trung vào việc giải quyết vấn đề mà không bị phân tâm bởi các quy tắc cú pháp phức tạp.
Mã nguồn mở: Python có giấy phép mã nguồn mở, khuyến khích sự hợp tác và đóng góp từ cộng đồng.
Python là một ngôn ngữ lập trình đa mục đích, có thể áp dụng trong nhiều lĩnh vực như lập trình web, phân tích dữ liệu, trí tuệ nhân tạo, lập trình nhúng và điện toán đám mây.
Thư viện và Framework: Python có thư viện phong phú và các framework như Django, Flask, NumPy, và Pandas, giúp tăng cường khả năng phát triển.
Cộng đồng Python rất mạnh mẽ và rộng lớn, với hàng ngàn người tham gia đóng góp vào sự phát triển của ngôn ngữ này thông qua các diễn đàn, tài liệu hướng dẫn và dự án mã nguồn mở.
1.2.Thư viện pygame a) Giới thiệu chung
Pygame là thư viện lập trình game cho Python, dựa trên nền tảng Simple DirectMedia Layer (SDL), giúp phát triển trò chơi đồ họa 2D một cách đơn giản và linh hoạt Thư viện này cung cấp các công cụ và chức năng cần thiết, cho phép lập trình viên tạo ra những trải nghiệm game phong phú mà không tốn quá nhiều thời gian và công sức.
Dễ Học và Sử Dụng: Pygame được thiết kế để làm cho việc phát triển trò chơi đơn giản và dễ tiếp cận cho người mới học lập trình.
Đồ Họa 2D: Pygame chủ yếu được sử dụng cho phát triển trò chơi đồ họa
2D, với khả năng xử lý sprite, hình ảnh, và âm thanh.
SDL là một thư viện đa nền tảng giúp tương tác hiệu quả với phần cứng máy tính, cho phép Pygame hoạt động trên nhiều hệ điều hành khác nhau.
Pygame là một thư viện mạnh mẽ cung cấp nhiều công cụ hỗ trợ cho đồ họa, âm thanh và xử lý đầu vào từ bàn phím và chuột, giúp đơn giản hóa quy trình phát triển game.
Cộng đồng Pygame rất sôi nổi, cung cấp nhiều tài nguyên, hướng dẫn và ví dụ trực tuyến để giúp lập trình viên phát triển kỹ năng và giải quyết vấn đề Các phần chính của Pygame bao gồm: pygame.display để quản lý cửa sổ hiển thị game, pygame.sprite hỗ trợ quản lý sprite và phát hiện va chạm, pygame.image cho phép làm việc với hình ảnh, pygame.mixer để điều khiển âm thanh và nhạc, pygame.event xử lý sự kiện từ bàn phím, chuột và các nguồn khác, cùng với pygame.font cho phép vẽ văn bản trực tiếp trên cửa sổ game.
Hướng dẫn cài đặt python và thư viện pygame
2.1.Cài đặt python Để cài đặt Python, bạn vào trang chủ của Python tại https://python.org/ và tải về phiên bản phù hợp với hệ điều hành đang dùng Ở đây tôi không đi vào chi tiết cách cài đặt, cá nhân tôi sử dụng phiên bản 3.11 cho Windows 64 bit và cài vào thư mục C:\Python11, chỉ lưu ý các bạn khi cài đặt nên tích chọn để đưa Python vào biến môi trường (System Path) Nếu không, bạn phải thêm thư mục Python vào System
Path một cách thủ công như sau:
• Bấm chuột phải vào My Computer (hoặc This PC) ngoài Desktop và chọn
Properties; hoặc bấm tổ hợp phím ÿ + Break; hoặc vào Control Panel\System and
• Chọn thẻ Advanced System Setting để mở hộp thoại System Properties.
Hình : 1 Hộp thoại system properties.
• Chọn thẻ Advanced rồi chọn nút Environment Variables…
• Trong thẻ System variables, chọn dòng Path và bấm Edit.
• Tiếp tục chọn New và gõ vào đường dẫn đến thư mục cài đặt Python, ở đây, của tôi là
C:\Users\hau66\AppData\Local\Programs\Python\Python311
• Chọn tiếp New và thêm tiếp thư mục chứa các Scripts, ở đây, máy của tôi là
C:\Users\hau66\AppData\Local\Programs\Python\Python311\Scripts
Hình : 2Hộp thoại Environment Variables.
To verify if Python has been added to the System Path, open the Windows Run dialog and type "python," then press Enter.
Hình : 4 Hộp thoại Run. nếu hiện cửa sổ như sau là thành công:
Sau khi cài đặt trình biên dịch Python, bạn sẽ thấy IDLE là trình soạn thảo mặc định, nhưng nó khá cơ bản và thiếu nhiều tính năng hỗ trợ như gợi ý từ khóa, quản lý dự án và gỡ lỗi Do đó, tôi khuyên bạn nên sử dụng các trình soạn thảo nâng cao hơn như Notepad++, Sublime Text hoặc Visual Studio để cải thiện trải nghiệm lập trình của mình.
Có nhiều chương trình lập trình như Code, Pycharm và Eclipse, cả miễn phí lẫn trả phí Tuy nhiên, tôi thường ưa chuộng sử dụng Visual Studio Code của Microsoft, và thỉnh thoảng cũng sử dụng Sublime Text 3.
Nếu bạn là người mới bắt đầu với Python, hãy cài đặt Anaconda từ https://www.continuum.io Anaconda cung cấp một môi trường Python tích hợp, bao gồm trình biên dịch Python và một trình soạn thảo với nhiều tính năng nâng cao dành riêng cho Data Science Ngoài ra, Anaconda còn đi kèm với nhiều thư viện hữu ích, đặc biệt là cho Machine Learning và Data Science.
Science như numpy, jupyter, matplotlib
Hình : 5 Trình biên dịch Python.
Ví dụ: chạy 1 chương trình python bằng Visual Studio Code bấm chuột phải vào vùng soạnthảo và chọn Run Python File in Terminal.
2.2.Cài đặt thư viện Pygame Để cài đặt Pygame trên máy tính của bạn, bạn có thể sử dụng pip, trình quản lý gói Python. Ở đây chỉ hướng dẫn cách cài thư viện trên hệ điều hành Window. o Đầu tiên , bạn mở hộp thoại Run và gõ lệnh cmd. o Trong hộp thoại Cmd bạn gõ lệnh pip install pygame, sau đó nhấn enter.
Hình : 6 Cript python bằng Visual Studio Code.
Hình : 7 Hộp thoại Run mở cmd. o Sau đó để kiểm tra đã cài đặt pygame chưa, bạn tạo cript và chạy như ảnh sau là thành công
III.Hướng dẫn cài đặt công cụ hỗ trợ Tiled
Tiled là một trình chỉnh sửa bản đồ dạng lưới mạnh mẽ, giúp các nhà phát triển game tạo ra môi trường phức tạp và đa dạng Công cụ này cho phép người dùng dễ dàng tạo bản đồ lát gạch bằng cách sắp xếp các ô lát một cách trực quan, hỗ trợ việc thiết kế các cấp độ game từ đơn giản đến phức tạp.
3.2.Cài đặt công cụ Tiled
Bước 1:b vào website https://www.mapeditor.org/, bấm vào “Download on itch.io”
Hình : 8 Hộp thoại cmd cài đặt pygame.
Hình : 9 Kiểm tra đã cài đặt thư viện pygame.
Bước 2: bấm vào “Download Now”
Bước 3: Chọn “No thanks, just take me to the downloads” Công cụ này free, không cần phải trả phí
Bước 4: Chọn bản download phù hợp với máy tính của bạn
Bước 5: Cho chạy file bạn tải về và tiến hành cài đặt bình thường
TÍCH VÀ THIẾT KẾ
PHÂN TÍCH VÀ THIẾT KẾ
Hệ thống là một trò chơi platformer kiểu Mario với nhiều màn chơi đa dạng Mỗi màn là một thử thách mới, chứa đựng các chướng ngại vật và bí ẩn cần khám phá, với mục tiêu đạt đến đích an toàn và ghi điểm cao nhất Hoàn thành mỗi màn chơi sẽ mở khóa màn tiếp theo.
Các tệp chính của dự án bao gồm: main.py, level.py và overworld.py Ngoài ra, còn có các thư mục để lưu trữ hình ảnh, âm thanh và font chữ.
Tệp main.py là điểm khởi đầu cho trò chơi, chịu trách nhiệm khởi tạo và quản lý các trạng thái chính như Overworld và Level Nó thiết lập các đối tượng game cơ bản và quản lý vòng lặp chính của trò chơi, bao gồm các phương thức quan trọng để điều khiển hoạt động của trò chơi.
Khởi tạo trò chơi: Thiết lập các đối tượng game, nhạc nền và các thông số người chơi như sức khỏe và số đồng xu.
Chuyển đổi trạng thái: Quản lý sự chuyển đổi giữa các trạng thái overworld và level, bao gồm khởi động và dừng các bản nhạc tương ứng.
Xử lý sự kiện: Điều khiển nhập từ bàn phím để quản lý hành động trong trò chơi như di chuyển hoặc thoát.
Vòng lặp game: Cập nhật và vẽ giao diện trò chơi dựa trên trạng thái hiện tại.
Tệp overworld.py chịu trách nhiệm quản lý thế giới mở trong trò chơi, cho phép người chơi lựa chọn các màn chơi để bắt đầu Nó bao gồm các lớp quan trọng như Node, Icon và Overworld, giúp điều khiển giao diện người dùng và tương tác của người chơi Các chức năng chính của tệp này bao gồm việc tổ chức và điều phối các hoạt động trong môi trường thế giới mở.
Quản lý Node: Thiết lập các điểm màn chơi dựa trên dữ liệu cấu hình, với các Node có thể truy cập hoặc bị khóa.
Di chuyển Icon: Quản lý việc di chuyển biểu tượng người chơi giữa các Node.
Kích hoạt màn chơi: Tạo cầu nối để bắt đầu màn chơi dựa trên sự lựa chọn của người chơi.
File level.py quản lý sự kiện trong từng màn chơi, chứa cơ chế và logic chính cho trò chơi Nó xử lý các thực thể như Snake và Fruit trong trò chơi rắn săn mồi, cùng với Player, Enemy và các đối tượng môi trường khác Các tính năng chính của level.py bao gồm việc quản lý các tương tác và trạng thái của các đối tượng trong trò chơi.
Khởi tạo và quản lý màn chơi: Thiết lập địa hình, các đối tượng trò chơi và kiểm soát hoạt động trong màn chơi.
Xử lý va chạm: Kiểm tra và xử lý các va chạm giữa nhân vật người chơi và môi trường hoặc kẻ thù.
Quản lý điểm số và sự kiện là một phần quan trọng trong trò chơi, bao gồm việc tính điểm cho người chơi, theo dõi các sự kiện như ăn quả hoặc va chạm với kẻ thù, và xử lý các tình huống khi kết thúc màn chơi.
Hệ thống được phát triển dựa trên mô hình lập trình hướng đối tượng (OOP), nhằm tạo ra các đối tượng có khả năng tái sử dụng và dễ dàng bảo trì.
The game is structured around several key classes, including Game, Level, Particle_Effect, Player, Enemy, Node, Icon, Overworld, Sky, Water, Cloud, Tile, StaticTile, Crate, AnimatedTile, Coins, and Palms, which are designed to effectively manage the essential components of gameplay.
Lớp trung tâm điều khiển luồng chính của trò chơi đóng vai trò quan trọng trong việc quản lý trạng thái của trò chơi Nó chịu trách nhiệm chuyển đổi giữa overworld và các màn chơi cụ thể, đảm bảo trải nghiệm chơi game mượt mà và liên tục.
max_level: giới hạn các màn chơi mà người chơi có thể chọn trong overworld.
max_health: Máu tối đa của người chơi, hồi phục lại sau khi khôi phục lại màn chơi
current_health: Máu hiện tại của người chơi
coins: Điểm số tích lũy của người chơi
oveworld: Một thực thể của lớp ‘Overworld’, quản lý giao diện người dung khi chọn màn chơi
create_level: Tại ra đối tượng ‘Level’ mới dựa trên cấp độ hiện tại và chuyển từ mán hình chọn màn chơi sang màn chơi thật
create_overworld: Cập nhật và tái tạo đối tượng Overworld khi người chơi hoàn thành một màn chơi hoặc chọn quay trở lại màn hình chọn màn chơi.
run(): Phương thức cập nhật trò chơi dựa trên trạng thái hiện tại (level hoặc overworld)
Mô tả: Quản lý khởi tạo màn chơi, xử lý các đối tượng trong game, đến cập nhật và hiển thị trạng thái của game.
display_surface: Bề mặt hiển thị trò chơi vẽ lên
world_shift: Độ dịch chuyển của không gian để tạo hiệu ứng di chuyển camera
current_x: Vị trí hiện tại của nhân vật.
coin_sound và stomp_sound: Âm thanh khi đổng xu và nhảy đạp trúng kẻ địch
create_overworld, change_coins, change_health: các callback function để thực hiện các hành động tương ứng
Các thuộc tính khác dung để quãn lý đồ họa, âm thanh,…
create_file_group(layout, type): Tạo nhóm sprites dựa trên bố cục và loại được cung cấp
player_setip(layout, change_health): Thiết lập nhân vật dựa trên bố cục được cung cấp
enemy_collision_reverse(): Xử lý va chạm của kẻ địch và đảo ngược hướng chuyển động của chúng
orizontal_movement_collision(), vertical_movement_collision(): Xử lý va chạm cho nhân vật
scroll_x(): Cuộn màn hình theo nhân vật khi di chuyển đến gần biên của màn hình
Và các thuộc tính khác để kiểm tra và cập nhật trạng thái của nhân vật
Mô tả: Quản lý các hoạt động, trạng thái, hoạt ảnh và tương tác của nhân vật
animations: Lưu trữ các franes cho mỗi hoạt ảnh của nhân vật
frame_index và animation_speed: Quản lý chỉ số frame hiện tại và tốc độ giữa các frames để tạo animation mượt mà
image và rect: Đối tượng ‘image’ là hình ảnh hiện tại của nhân vật và
‘rect’ là hình chữ nhậ đại diện cho vị trí và kích thước của nhân vật
direction và speed: Vector hướng di chuyển và tốc độ di chuyển
gravity và jump_speed: Trọng lực và tốc độ nhảy
status: trạng thái hiện tại
on_ground, on_ceiling, on_right, on_left: Các biến Boolean kiểm soát va chạm với môi trường sung quanh
invisible và invisibility_duration: Quản lý trạng thái vô hình của nhân vật sau khi bị tấn công và thời gian duy trì trạng thái
Các thuộc tính khác liên quan đến hoạt ảnh,
import_character_assets(), import_dust_run_particles(): Tải các tài nguyên hình ảnh cần thiết cho nhân vật và hiệu ứng bụi
animate(): Cập nhật hình ảnh hiển thị của nhân vật dựa trên trạng thái và hướng của nhân vật
get_input(): Đọc và xử lý đầu vào từ bàn phím để điều khiển nhân vật
get_status(): Cập nhật trạng thái của nhân vật dựa trên hướng di chuyển và va chạm
apply_gravity(): Áp dụng lực hấp dẫn lên nhân vật, ảnh hướng đến di chuyển trục dọc
jump(): Cho nhân vật nhảy và phát ra âm thanh
get_damage(): Xử lý khi nhân vật nhân sát thương từ kẻ thù, bao gồm làm nhân vật vô hình tạm thời
invisibility_time(): Kiểm trả và cập nhậ thời gian vô hình
Các phương thức khác về hoạt ảnh
Quản lý hành vi của kẻ địch trong trò chơi là rất quan trọng, bao gồm việc điều khiển các hoạt động di chuyển, hoạt ảnh và logic để đảo hướng di chuyển khi cần thiết Điều này giúp tạo ra trải nghiệm chơi game hấp dẫn và thách thức hơn cho người chơi.
Rect là thuộc tính kế thừa từ pygame.sprite.Sprite, dùng để định nghĩa hình chữ nhật bao quanh sprite, giúp xác định vị trí và kích thước của sprite trong trò chơi.
Tốc độ di chuyển của kẻ địch được xác định ngẫu nhiên trong khoảng từ 1 đến 3 khi chúng xuất hiện, tạo ra sự đa dạng trong hành vi di chuyển của từng kẻ địch.
image: Hình ảnh hiện tại của sprite, lấy từ các frames hoạt ảnh.
Khởi tạo kẻ địch với kích thước, vị trí và đường dẫn đến thư mục chứa các frames hoạt ảnh của kẻ địch thông qua phương thức init (self, site, x, y) Tại đây, tốc độ của kẻ địch cũng được thiết lập.
Hàm move() cho phép thay đổi vị trí ngang của kẻ địch dựa trên tốc độ hiện tại Phương thức này thực hiện việc tăng hoặc giảm giá trị x của rect tùy thuộc vào hướng di chuyển của kẻ địch.
reverse_image(): Đảo ảnh của kẻ địch khi nó thay đổi hướng, để hướng mặt của kẻ địch luôn phù hợp với hướng di chuyển.
reverse(): Đảo ngược tốc độ di chuyển, làm cho kẻ địch quay đầu và di chuyển theo hướng ngược lại.
update(shift): Cập nhật trạng thái của kẻ địch
Mô tả: Quản lý và hiển thị các hiệu ứng hình ảnh như bụi khi nhân vật nhảy hoặc hạ cánh trong trò chơi.
Chỉ số frame hiện tại trong chuỗi hoạt ảnh, được sử dụng để xác định hình ảnh hiện thời từ danh sách các frame
animation_speed: Tốc độ chuyển đổi giữa các frame, giúp điều chỉnh tốc độ hoạt ảnh
frames: Danh sách các frames của họa ảnh, được nạp vào từ thư mục chứa tài nguyên dựa trên loại hiệu ứng
image: Hình ảnh hiện tại, được cập nhật liên tục
rect: Đối tượng ‘pygame.Rect’ định nghĩa vị trí và kích thước của sprite
init (pos,type): Khởi tạo hiệu ứng
animate(): Cập nhật frame hiện tại của hoạt ảnh
update(x,shift): Cập nhật trạng thái của sprite
Mô tả: Quản lý và hiển thị giao diện thế giới mở của trò chơi, nơi người chơi có thể lựa chọn các màn chơi (levels) để bắt đầu.
display_surface: Bề mặt của Pygame
max_level: Số level tối đa mà người chơi có thể chơi
current_level: cấp độ level hiện tại
create_level: Hàm callback để tạo một màn chơi
nove_direction: Vector chỉ hướng đi của biểu tượng người chơi
speed: Tốc độ di chuyển của biểu tượng
moving: Biến Boolean xác định trạng thái di chuyển của nhân vật
nodes: Nhóm Pygame sprites chứa các nút đại diện cho các màn chơi
icon: Đối tượng sprites đại diện cho biểu tượng người chơi
sky: Đối tượng hiển thị bầu trời
Hàm setup_nodes() tạo ra các nút cho từng màn chơi dựa trên dữ liệu từ 'levels' Các nút này sẽ được phân loại là 'khả dụng' hoặc 'bị khóa' tùy thuộc vào cấp độ của người chơi.