Tải bản đầy đủ (.pdf) (37 trang)

BÁO CÁO KẾT THÚC MÔN HỌC Đề tài Lập trình game FlappyBird

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 (946.68 KB, 37 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH
KHOA ĐÀO TẠO CHẤT LƯỢNG CAO
NGÀNH: CÔNG NGHỆ THÔNG TIN
--o0o--

BÁO CÁO KẾT THÚC MƠN HỌC
Đề tài: Lập trình game FlappyBird

Nhóm sinh viên thực hiện
-

Bành Viết Hùng

-

Nguyễn Thị Xuân Mai

-

Bùi Hoàng Hưng

-

Nguyễn Trần Huỳnh Lê

-

Trần Vĩnh Hùng

21110193


Giảng viên hướng dẫn
-

ThS. Nguyễn Đăng Quang 

TP. Hồ Chí Minh, tháng 1 năm 2022


NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................

.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
Giáo viên hướng dẫn

Nguyễn Đăng Quang


NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................

.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
.........................................................................................................................
Giáo viên phản biện

LỜI NÓI ĐẦU


Khơng có sự thành cơng nào mà khơng gắn liền với những nỗ lực, cố gắng,
sự hỗ trợ, giúp đỡ dù ít hay nhiều, dù trực tiếp hay gián tiếp. Là cả q trình phấn
đấu khơng ngừng nghỉ bên cạnh những hướng dẫn, chỉ bảo tận tình, gắn bó và tình
cảm sâu sắc.
Để hồn thành tốt đề tài và bài báo cáo này, chúng em xin gửi lời cảm ơn
chân thành đến giảng viên, thầy Nguyễn Đăng Quang, người đã trực tiếp hỗ trợ
chúng em trong suốt quá trình làm đề tài. Chúng em cảm ơn thầy đã đưa ra những
lời khuyên từ kinh nghiệm thực tiễn của mình để định hướng cho chúng em đi đúng
với yêu cầu của đề tài đã chọn, luôn giải đáp thắc mắc và đưa ra những góp ý, chỉnh
sửa kịp thời giúp chúng em khắc phục nhược điểm và hoàn thành tốt cũng như đúng
thời hạn đã đề ra.
Chúng em cũng xin gửi lời cảm ơn chân thành các quý thầy cô trong khoa

Đào tạo Chất Lượng Cao nói chung và ngành Cơng Nghệ Thơng Tin nói riêng đã
tận tình truyền đạt những kiến thức cần thiết giúp chúng em có nền tảng để làm nên
đề tài này, đã tạo điều kiện để chúng em có thể tìm hiểu và thực hiện tốt đề tài.
Đề tài và bài báo cáo được chúng em thực hiện với những hạn chế về mặt
kiến thức, kĩ thuật và cũng như kinh nghiệm thực tế. Do đó, trong q trình làm nên
đề tài có những thiếu sót là điều không thể tránh khỏi nên chúng em rất mong nhận
được những ý kiến đóng góp quý báu của thầy để kiến thức của chúng em được
hoàn thiện hơn và chúng em có thể làm tốt hơn nữa trong những lần sau. Chúng em
xin chân thành cảm ơn.
Cuối lời, nhóm em kính chúc thầy dồi dào sức khỏe và thành cơng hơn nữa
trong sự nghiệp trồng người.

Tp. Hồ Chí Minh, tháng 1 năm 2022
Nhóm sinh viên thực hiện


MỤC LỤC

MỤC LỤC HÌNH ẢNH.............................................................................................I
PHẦN MỞ ĐẦU.......................................................................................................1
1. Lý do chọn đề tài...................................................................................................1
2. Đối tượng nghiên cứu............................................................................................1
3. Phạm vi nghiên cứu...............................................................................................1
4. Mục tiêu nghiên cứu..............................................................................................1
PHẦN NỘI DUNG....................................................................................................2
CHƯƠNG I. LÝ THUYẾT.....................................................................................2
1. Pygame là gì?........................................................................................................2
1.1. Khái niệm Pygame..............................................................................................2
1.2. Mục đích ra đời của Pygame..............................................................................2
2. Ưu điểm của Pygame.............................................................................................3

3. Làm game với Python & Pygame..........................................................................3
3.1. Cài đặt và bắt đầu bằng Python...........................................................................2
3.2. Cài thư viện Pygame...........................................................................................2
3.3. Các lệnh đơn giản với Pygame...........................................................................2
3.3.1. Chương trình “Hello word” đầu tiên................................................................7
3.3.2. Các lệnh thường dùng trong Pygame...............................................................7
CHƯƠNG II. ỨNG DỤNG......................................................................................2
1. Lên ý tưởng.........................................................................................................17
2. Phát triển ý tưởng................................................................................................20
3. Cấu hình và kiểm thử........................................................................................24
3.1. Chèn Background và sàn của game..................................................................11


3.2. Tạo chim Flappy Bird và hệ thống ống.............................................................11
3.3. Xử lý va chạm trong game................................................................................11
3.4. Tạo chuyển động cho chim Flappy Bird...........................................................11
3.5. Tạo hệ thống tính điểm cho game.....................................................................11
3.6. Tạo cửa sổ kết thúc...........................................................................................11
3.7. Xử lý âm thanh trong game..............................................................................11
4. Hướng dẫn sử dụng...........................................................................................24
PHẦN KẾT LUẬN.................................................................................................41
1. Kết quả đạt được.................................................................................................41
2. Thuận lợi.............................................................................................................41
3. Khó khăn.............................................................................................................41
4. Nhận xét và đánh giá tổng quan..........................................................................41
5. Đánh giá mức độ hoàn thành của thành viên.......................................................41
TÀI LIỆU THAM KHẢO.......................................................................................42


MỤC LỤC HÌNH ẢNH

CHƯƠNG I: LÝ THUYẾT
Hình 1.1. VXLAN packet format..................................................................................5
Hình 1.2. Mơ hình 3 layer truyền thống........................................................................6
Hình 1.3. Mơ hình layer 2 mở rộng..............................................................................7
Hình 1.4. Mơ hình Spine-Leaf......................................................................................8
Hình 1.5. VxLAN flood and learning.........................................................................10
Hình 1.6. VxLAN Ingress Replication........................................................................11
Hình 1.7. VxLAN flow...............................................................................................12
Hình 1.8. Multi DC.....................................................................................................13
CHƯƠNG II: ỨNG DỤNG
Hình 2.1. Topo MultiDC trên Docker.........................................................................17
Hình 2.2. Đường truyền trong Mullti-DC...................................................................18
Hình 2.3. Gói tin được đóng gói và truyền thơng qua VXLAN..................................18
Hình 2.4. Topo nghiên cứu Cách truyền lưu lượng BUM của VXLAN......................19
Hình 2.5. Truyền lưu lượng BUM..............................................................................21
Hình 2.6. Topo VXLAN xử lý lưu lượng BUM..........................................................24
Hình 2.7. Kiểm tra đường truyền trên PC...................................................................40

I


DANH MỤC TỪ VIẾT TẮT

II


PHẦN MỞ ĐẦU
1.

Lý do chọn đề tài


FlappyBird là một tựa game giải trí khơng cịn xa lạ gì với tất cả mọi người, đặt
biệt là các bạn trẻ. Lúc nhỏ, những tân sinh viên k21 chúng em không phải ai cũng
có điều kiện để tiếp cận với trị chơi điện tử, có bạn ở thành phố, cũng xem là có
điều kiện, được tiếp xúc với những món đồ cơng nghệ, điện thoại, laptop, pc,...
nhưng ở nơng thơn thì trái lại, được chơi game trên điện thoại là một điều vô cùng
xa xỉ.
Ngày nay, khi smartphone đã quá thông dụng, ta khơng khó bắt gặp hình ảnh
đứa trẻ cầm điện thoại chơi game. FlappyBird lại là một game khá dễ thương, chơi
nhiều thì hại mắt, tốn thời gian, nhưng nếu chơi vào mục đích giải trí thì vơ cùng "
thư giản " với con game này. Game có nội dung phù hợp với nhiều lứa tuổi, nhân
viên văn phòng, học sinh, sinh viên, giảng viên như thầy chơi vẫn thấy thích.
Bọn em chọn đề tài là game này cũng mong được thể hiện bản thân, tuy đã cũ
nhưng chắc chắn sẽ có những sáng tạo mới lạ, khơng giống những Flappy " Chicken
" tràn lan.
2.

Đối tượng nghiên cứu

Ngơn ngữ lập trình python.
Game FlappyBird nói riêng và các loại game lập trình python nói chung
3.

Phạm vi nghiên cứu

Ngơn ngữ lập trình python nói chung và pygame nói riêng.
4.

Mục tiêu nghiên cứu


Hiểu rõ hơn về python, trau dồi kĩ năng làm game với thư viện pygame.

1


PHẦN NỘI DUNG
CHƯƠNG I. LÝ THUYẾT
1.

Pygame là gì?

1.1.

Khái niệm Pygame

PyGame là một thư viện của ngơn ngữ Python. Nó được sử dụng để phát triển trò
chơi 2-D và là một nền tảng nơi bạn có thể sử dụng một tập hợp các mơ-đun Python
để phát triển trị chơi . Đây là một nền tảng dễ hiểu và thân thiện với người mới bắt
đầu có thể giúp bạn phát triển trị chơi một cách nhanh chóng.
1.2.

Mục đích ra đời của Pygame

Nhằm tạo ra một mơi trường lập trình game, thõa sức sáng tạo, kích thích tư duy.
Người học lập trình pygame sẽ được nâng cao khả năng tư duy, tạo công ăn việc
làm, thõa sức với đam mê và sáng tạo.
2.

Ưu điểm của Pygame


-

Dễ hiểu, dễ học.
Đơn giản, ít tốn thời gian.
Ít lỗi phát sinh
Khả năng ứng dụng rộng rãi

3.

Làm game với python và pygame

3.1

Cài đặt và bắt đầu bằng python

Cài đặt trên window
Có hai phiên bản python 3.7 (mới nhất) và 2.7. Hãy truy cập trang này và tải xuống
phiên bản mà bạn muốn.
Bạn có thể tải xuống bất kỳ phiên bản nào. Tuy nhiên, hầu hết các ứng dụng python
gần đây đều có trên python 3 và hỗ trợ python 2 sắp kết thúc. Vì những lý do đó,
hãy tải xuống python 3. Khi bạn nhấp vào liên kết đó và bạn sẽ được chuyển hướng
đến trang bên dưới và tải xuống tệp thực thi tùy thuộc vào máy của bạn.

2


Khi bạn nhấp đúp vào đây, một cửa sổ bật lên sẽ hiển thị như bên dưới

Bạn có thể chọn hộp kiểm thứ hai Add Python 3.7 to PATHđể có thể sử dụng trực
tiếp mà không cần chỉ định đường dẫn nào. Sau khi bạn nhấp vào Cài đặt ngay và

bạn sẽ thấy màn hình sau.
3


Bây giờ chúng ta có thể kiểm tra phiên bản python bằng cách mở giao diện dòng
lệnh. Hãy chắc chắn rằng bạn đang kiểm tra với vốn V.

Cài đặt trên Mac Os
Việc cài đặt python trên Mac OS không khác gì ở trên. Hãy truy cập trang này và tải
xuốngmacOS 64-bit installer.
4


Trang tải xuống :

Sau khi bạn tải xuống trình cài đặt, hãy nhấp đúp vào nó và làm theo hướng dẫn như
bên dưới.

5


cài đặt thành công
3.2 Cài đặt thư viện pygame
Cài đặt pygame
Hãy bắt đầu bằng cách kích hoạt mơi trường lập trình Python 3 của ta :


. my_env/bin/activate

Khi kích hoạt này, bạn có thể cài đặt pygame bằng pip:



pip install pygame

Sau khi chạy lệnh này, bạn sẽ thấy kết quả trông giống như sau:
Output
Collecting pygame Using cached pygame-1.9.3-cp35-cp35mmanylinux1_x86_64.whl Installing collected packages: pygame Successfully
installed pygame-1.9.3
Nếu bạn đã cài đặt pygame vào hệ thống có sẵn video và âm thanh, bạn có thể xác
minh cài đặt của bạn bằng cách chạy lệnh sau, lệnh này sẽ chạy một trị chơi giả
trình bày những gì pygame có thể làm với đồ họa và âm thanh:
6


python -m pygame.examples.aliens
Nếu bạn không muốn mở mẫu hoặc nếu bạn khơng có AV như một phần cài đặt của
bạn , bạn cũng có thể nhập vào console tương tác Python đảm bảo rằng bạn có thể
nhập module pygame. Đầu tiên, gõ lệnh python để khởi động console :
 python


Sau đó, trong console , bạn có thể nhập module :
 import pygame
Nếu bạn không gặp lỗi khi nhấn ENTER sau lệnh, bạn sẽ biết rằng pygame đã được
cài đặt thành cơng. Bạn có thể thoát khỏi console tương tác Python bằng
lệnh quit() .
Nếu bạn gặp sự cố khi cài đặt trên dịng lệnh, bạn có thể xem wiki Bắt
đầu của pygame .

Trong các bước sau, ta sẽ giả sử việc sử dụng màn hình để hiển thị giao diện user đồ

họa như một phần của hướng dẫn này để xác minh mã của ta .
Nhập pygame
Để làm quen với pygame, hãy tạo một file có tên our_game.py , ví dụ: ta có thể tạo
file này bằng editor văn bản nano:
 nano our_game.py
Khi bắt đầu một dự án trong pygame, bạn sẽ bắt đầu với câu lệnh import được sử
dụng để nhập các module , bạn có thể thêm câu lệnh này vào đầu file của bạn :
our_game.py
import pygame
Ta cũng có thể tùy chọn thêm một câu lệnh nhập khác bên dưới dòng đầu tiên để
thêm một số hằng số và hàm của pygame vào không gian tên chung của file của
bạn:
our_game.py
import pygame from pygame.locals import *
Với pygame được nhập vào file chương trình của ta , ta đã sẵn sàng sử dụng nó để
tạo mẫu trị chơi.
Khởi tạo pygame
Từ đây, ta sẽ khởi tạo các chức năng của pygame bằng hàm init() , viết tắt của “khởi
tạo”.
our_game.py
import pygame from pygame.locals import * pygame.init()
Hàm init() sẽ tự động khởi động tất cả các module pygame mà bạn cần khởi tạo.
Bạn cũng có thể khởi tạo từng module của pygame riêng lẻ, như trong:
7


pygame.font.init()
Hàm init() sẽ trả về một bộ giá trị cho bạn nếu bạn muốn. Tuple này sẽ hiển thị khởi
tạo thành công và không thành cơng. Ta có thể thực hiện điều này cho cả lệnh
gọi init() và khởi tạo các module cụ thể (sẽ cho ta biết liệu các module này có khả

dụng hay khơng):
i = pygame.init() print(i) f = pygame.font.init() print(f)
Nếu ta chạy đoạn mã trên, ta sẽ nhận được kết quả tương tự như sau:
Output
(6, 0) None
Trong trường hợp này, biến i trả về bộ giá trị (6, 0) , cho thấy rằng có 6 lần khởi tạo
pygame thành công và 0 lần thất bại. Biến f trả về None , cho biết rằng module
không khả dụng trong môi trường cụ thể này.
Cài đặt bề mặt hiển thị
Từ đây, ta cần cài đặt bề mặt hiển thị trò chơi của bạn . Ta sẽ sử
dụng pygame.display.set_mode() để khởi tạo một cửa sổ hoặc màn hình để hiển thị
và chuyển nó vào một biến. Vào trong hàm, ta sẽ truyền một đối số cho độ phân giải
màn hình là một cặp số biểu thị chiều rộng và chiều cao trong một bộ giá trị. Hãy
thêm chức năng này vào chương trình của ta :
our_game.py
import pygame from pygame.locals import * pygame.init() game_display =
pygame.display.set_mode((800, 600))
Ta đã chuyển tuple (800, 600) làm đối số cho hàm set_mode() , đại diện cho độ
phân giải của chiều rộng (800 px) và chiều cao (600 px). Lưu ý tuple được chứa
trong dấu ngoặc đơn của hàm, do đó, có dấu ngoặc kép trong hàm trên.
Bạn có thể sẽ thường xuyên sử dụng các số nguyên cho độ phân giải trị chơi của
bạn , vì vậy có thể bạn cần gán các số đó cho các biến thay vì sử dụng các số lặp đi
lặp lại. Điều này có thể giúp bạn dễ dàng hơn khi cần sửa đổi chương trình của bạn ,
vì bạn chỉ cần sửa đổi những gì được chuyển cho các biến.
Ta sẽ sử dụng biến display_width cho chiều rộng của màn hình trị chơi của ta
và display_height cho chiều cao và chuyển các biến đó vào hàm set_mode() :
our_game.py
import pygame from pygame.locals import * pygame.init() display_width
= 800 display_height = 600 game_display =
pygame.display.set_mode((display_width, display_height))

Đến đây, bề mặt hiển thị trò chơi được cài đặt với độ phân giải cho chiều rộng và
chiều cao của nó.
Cập nhật màn hình
Tiếp theo, ta cần sử dụng một trong hai chức năng có sẵn để cập nhật hiển thị bề
mặt trò chơi.
8


Ảnh động thường là những thay đổi giữa các khung hình khác nhau theo thời gian.
Bạn có thể nghĩ đến một cuốn sách lật khi nghĩ về hình ảnh động, vì chúng bao gồm
một loạt các hình ảnh thay đổi dần dần từ trang này sang trang sau. Các trang này
cung cấp mơ phỏng chuyển động khi chúng được lật nhanh chóng, vì nội dung của
trang dường như đang chuyển động. Trong trị chơi máy tính, khung được sử dụng
thay vì trang.
Do khái niệm lật trang hoặc khung, một trong những hàm được dùng để cập nhật
hiển thị bề mặt trò chơi được gọi là flip() và có thể được gọi trong file của ta ở trên
như sau:
pygame.display.flip()
Hàm flip() cập nhật toàn bộ bề mặt hiển thị lên màn hình.
Thường xuyên hơn, hàm update() được sử dụng thay vì hàm flip() vì nó sẽ chỉ cập
nhật các phần của màn hình chứ khơng phải tồn bộ khu vực để tiết kiệm bộ nhớ.
Hãy thêm hàm update() vào cuối file our_game.py :
our_game.py
import pygame from pygame.locals import * pygame.init() display_width
= 800 display_height = 600 game_display =
pygame.display.set_mode((display_width, display_height))
pygame.display.update()
Đến đây, bạn có thể chạy chương trình mà khơng gặp bất kỳ lỗi nào nhưng bề mặt
hiển thị sẽ chỉ mở ra và nhanh chóng đóng lại.
Tạo vịng lặp trò chơi

Với pygame được nhập và khởi tạo, bộ hiển thị và bề mặt trò chơi đang được cập
nhật, ta có thể bắt đầu làm việc với vịng lặp trị chơi chính của bạn .
Ta sẽ tạo mộtvịng lặp while sẽ chạy trò chơi. Vòng lặp sẽ gọi giá
trị Boolean của True , nghĩa là vòng lặp sẽ lặp mãi mãi trừ khi nó bị gián đoạn.
Trong vịng lặp trị chơi chính này của chương trình của ta , ta sẽ xây dựng
một vòng lặp for để lặp qua các sự kiện user trong hàng đợi sự kiện, sẽ được gọi bởi
hàm pygame.event.get() .
Đến đây, ta khơng có gì trong vịng lặp for , nhưng ta có thể thêm một câu print() để
cho thấy rằng mã đang hoạt động như ta mong đợi. Ta sẽ chuyển các sự kiện trong
vòng lặp vào câu lệnh dưới dạng print(event) .
Hãy thêm hai vòng lặp này và câu print() vào file chương trình của ta :
our_game.py
import pygame from pygame.locals import * pygame.init() display_width
= 800 display_height = 600 game_display =
pygame.display.set_mode((display_width, display_height))
pygame.display.update() while True: for event in pygame.event.get():
print(event)
Để đảm bảo mã của ta đang hoạt động, hãy chạy chương trình:
9




python our_game.py

Khi ta chạy file , một cửa sổ 800x600 sẽ bật lên. Để kiểm tra các sự kiện, bạn có thể
di chuột qua cửa sổ, nhấp vào bên trong cửa sổ và nhấn các phím trên bàn phím.
Các sự kiện này sẽ in ra cửa sổ console của bạn.
Đầu ra bạn nhận được sẽ giống như sau:
Output

355)})> <Event(5-MouseButtonDown {'button': 1, 'pos': (616, 355)})>
<Event(6-MouseButtonUp {'button': 1, 'pos': (616, 355)})> <Event(2KeyDown {'scancode': 3, 'key': 102, 'unicode': 'f', 'mod': 0})> <Event(3KeyUp {'scancode': 3, 'key': 102, 'mod': 0})> ...
Đầu ra này hiển thị các sự kiện user đang diễn ra. Những sự kiện này sẽ kiểm sốt
trị chơi khi chúng được tạo ra bởi user . Khi nào bạn chạy hàm pygame.event.get() ,
mã của bạn sẽ tham gia các sự kiện này.
Dừng chương trình chạy bằng cách nhấn CTRL + C trong cửa sổ terminal .
Đến đây, bạn có thể xóa hoặc comment câu print() vì ta sẽ khơng cần phải có tất cả
kết quả terminal này.
Từ đây, ta có thể hồn thiện mẫu của bạn bằng cách học cách thốt khỏi trị chơi.
Bỏ cuộc
Để thốt khỏi chương trình pygame, trước tiên ta có thể hủy khởi tạo các module
liên quan, sau đó thốt Python như bình thường.
Hàm pygame.quit() sẽ hủy khởi tạo tất cả các module pygame và
hàm quit() Python quit() sẽ thốt khỏi chương trình.
Vì user có quyền kiểm sốt các chức năng và sự kiện của trị chơi, ta cũng nên biết
rằng pygame.QUIT được gửi đến hàng đợi sự kiện khi user yêu cầu tắt chương trình
bằng cách nhấp vào dấu “X” ở góc trên của cửa sổ trị chơi.
Hãy để ta bắt đầu kiểm sốt stream chương trình bằng câu lệnh if điều kiện trong
vòng lặp for xử lý sự kiện:
our_game.py
import pygame from pygame.locals import * pygame.init() display_width
= 800 display_height = 600 game_display =
pygame.display.set_mode((display_width, display_height))
pygame.display.update() while True: for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
quit()
Trong đoạn mã trên, ta nói rằng nếu user đã yêu cầu chương trình tắt, chương trình
nên hủy khởi tạo các module pygame.quit() bằng pygame.quit() và thốt khỏi

chương trình bằng lệnh quit() .
Vì ta đã nhập pygame.locals ta có thể gợi lên event.type và QUIT như hiện tại (thay
vì với pygame. Ở trước chúng).
10


Mặc dù user có thể biết cách nhấp vào “X” ở góc trên của cửa sổ trị chơi, ta có thể
cần một số sự kiện user khác kích hoạt yêu cầu thốt khỏi chương trình. Ta có thể
thực hiện việc này với loại sự kiện KEYDOWN và một hoặc nhiều khóa.
Sự kiện KEYDOWN nghĩa là user đang nhấn một phím trên bàn phím của họ
xuống. Đối với mục đích của ta , giả sử rằng phím Q (như trong "thốt")
hoặc ESC có thể thốt khỏi chương trình. Hãy thêm mã biểu thị điều này trong vòng
lặp for của ta :
our_game.py
import pygame from pygame.locals import * pygame.init() display_width
= 800 display_height = 600 game_display =
pygame.display.set_mode((display_width, display_height))
pygame.display.update() while True: for event in pygame.event.get():
if event.type == QUIT or (
event.type == KEYDOWN and (
event.key == K_ESCAPE or
event.key == K_q
)):
pygame.quit()
quit()
Ta đã thêm các toán tử logic Boolean để chương trình có thể thốt nếu user nhấp
vào "X" ở góc trên của cửa sổ trị chơi hoặc nếu user nhấn một phím xuống là phím
thốt hoặc phím Q ( lưu ý điều này không phân biệt chữ hoa chữ thường).
Đến đây, nếu bạn chạy chương trình bằng lệnh python our_game.py , bạn có thể
kiểm tra chức năng của trò chơi đang chạy và sau đó thốt bằng cách thốt khỏi cửa

sổ với biểu tượng "X" hoặc bằng cách nhấn vào Phím Q hoặc ESC .
Cải tiến mã và các bước tiếp theo
Mặc dù chương trình ở trên có đầy đủ chức năng, nhưng ta có thể làm một số điều
để cải thiện mã.
Để bắt đầu, ta có thể đặt mã while vòng lặp while vào một định nghĩa hàm thay thế:
def event_handler(): for event in pygame.event.get():
if event.type ==
QUIT or (
event.type == KEYDOWN and (
event.key ==
K_ESCAPE or
event.key == K_q
)):
pygame.quit()
quit()
Điều này sẽ làm while vòng một neater bit và ngưng tụ, đặc biệt là khi ta thêm
nhiều chức năng hơn để trò chơi của ta .
Ngồi ra, để bắt đầu làm cho trị chơi bóng bẩy hơn, ta có thể thêm chú thích vào
thanh tiêu đề của cửa sổ (hiện đang đọc pygame window ). Điều này ta có thể làm
với dịng sau:
pygame.display.set_caption('Our Game')
Ta có thể đặt chuỗi 'Our Game' ở trên thành bất kỳ thứ gì ta muốn gọi là trị chơi.
Ngồi ra, ta có thể di chuyển hàm pygame.display.update() vào vịng lặp trị chơi
chính.
Bây giờ, mã đầy đủ của ta trông như thế này:
our_game.py

11



import pygame from pygame.locals import * pygame.init() display_width = 800
display_height = 600 game_display = pygame.display.set_mode((display_width,
display_height)) pygame.display.set_caption('Our Game') def event_handler():
for event in pygame.event.get():
if event.type == QUIT or (
event.type
== KEYDOWN and (
event.key == K_ESCAPE or
event.key ==
K_q
)):
pygame.quit()
quit() while True: event_handler()
pygame.display.update()
Bạn cũng có thể xem xét các cách khác nhau để tiếp cận mã ở trên, bao gồm sử
dụng câu lệnh break để thoát ra khỏi vịng lặp trước khi chuyển sang thốt trị chơi.
Từ đây, bạn cần tiếp tục tìm hiểu về cách hiển thị hình ảnh thơng qua vẽ và viết, tạo
hình ảnh động và kiểm sốt tốc độ khung hình, v.v. Bạn có thể tiếp tục tìm hiểu về
sự phát triển trị chơi pygame bằng cách đọc tài liệu chính thức của pygame .
Hướng dẫn này đã hướng dẫn bạn cách cài đặt pygame module nguồn mở vào mơi
trường lập trình Python 3 của bạn và cách bắt đầu tiếp cận phát triển trị chơi thơng
qua cài đặt mẫu mà bạn có thể sử dụng để điều khiển vịng lặp chính của trị chơi
Python.

3.3

Các lệnh đơn giản với pygame
3.3.1 Chương trình “Hello word” đầu tiên
Sau khi cài đặt được python chúng ta mở lên và gõ dòng lệnh, chữ Hello
World sẽ được hiện lên màn hình

print("Hello World")

Với cú pháp nhỏ gọn ít dịng nên python rất phổ biến và được sử dụng cho
các trang web cũng như trong việc phát triển Trí tuệ Nhân tạo (AI). 

-

3.3.2 Các lệnh thường dùng với Pygame
import pygame: - Lệnh này được sử dụng để truy cập khn khổ PyGame.
Nó là bước đầu tiên để bắt đầu q trình phát triển trị chơi.
pygame.init (): - Điều này khởi tạo tất cả các mô-đun cần thiết cho
PyGame.

- pygame.display.set_mode ((width, height)): - Thao tác này sẽ khởi chạy
một cửa sổ có kích thước mong muốn.
- pygame.event.get (): - Vì trị chơi sẽ là một chuỗi các sự kiện, nên cú pháp
này sẽ giúp bạn làm trống hàng đợi của các sự kiện trước khi thêm một sự kiện mới.
- pygame.quit: - Cú pháp này được sử dụng để thoát khỏi chương trình hồn
tồn.
12


- pygame.display.flip (): - PyGame có bộ đệm kép nên điều này sẽ hốn đổi
bộ đệm. Tất cả những gì bạn cần biết là cuộc gọi này là bắt buộc đối với bất kỳ cập
nhật nào bạn thực hiện đối với màn hình trị chơi để hiển thị.
Đây là những đoạn mã để tạo ra cửa sổ trò chơi pygame, sau khi chạy đoạn
mã trên ta sẽ có giao diện cửa sổ như thế này

Đặt tiêu đề và biểu tượng cho cửa sổ trị chơi
Chúng ta có thể thêm tiêu đề bằng pygame.display.set_caption (' Tên ') và

biểu tượng bằng icon = pygame.image.load ( ' game.jpg ') và
pygame.display.set_icon (biểu tượng) sẽ thiết lập một biểu tượng.
Thêm hình chữ nhật vào cửa sổ trò chơi
Chúng ta sử dụng pygame.draw.rect để vẽ một. Bây giờ, để tạo một hình
chữ nhật, chúng ta phải đưa các kích thước của nó vào hàm như chiều cao, chiều
rộng và tọa độ của nó để hiển thị trên màn hình.
Ví dụ: pygame.draw.rect(screen, (0, 128, 255), pygame.Rect(60, 60, 90, 90))
Đây là ví dụ một đoạn code vẽ hình chữ nhật vào cửa số game
import pygame
13


pygame.init()
screen = pygame.display.set_mode((500, 500))
done = False
x=60
y=60
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
pygame.draw.rect(screen, (0,128,255), pygame.Rect(x, y, 90, 90))
pygame.display.flip()
Thêm nhạc và hình ảnh vào trị chơi

1. Để thêm hình ảnh, chúng tơi sử dụng pygame.image, load (' image.jpg ').
2. Để thêm nhạc, chúng tôi sử dụng pygame.mixer.music, load (' music.mp3 ').
Nhưng trước tiên, chúng ta cần nhập một bộ trộn và khởi tạo nó.
Đây là đoạn code mẫu tham khảo:
import pygame

pygame.init()

14


from pygame import mixer
mixer.init()
screen = pygame.display.set_mode((500, 500))
done = False
x=60
y=60
image=pygame.image.load(r'C:\Users\Tanishq\Downloads\wallpaper.jpg')
screen.blit(image, (0, 0))
pygame.mixer.music.load(r'C:\Users\Tanishq\Desktop\song.mp3')
pygame.mixer.music.play(-1)
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
pygame.draw.rect(screen, (255,0,0), pygame.Rect(x, y, 90, 90))
pygame.display.flip()
r: - Trong đoạn mã trên, trước khi đưa ra đoạn mã, chúng ta viết 'r' vì cơng cụ sửa
đổi chuỗi r '..' khiến chuỗi '..' được hiểu theo nghĩa đen . Điều đó có nghĩa là, r'My \
Path \ Without \ Escaping 'sẽ đánh giá thành' My \ Path \ Without \ Escaping '- mà
không gây ra dấu gạch chéo ngược làm thoát các ký tự. Trước tương đương với

15


chuỗi 'My \\ Path \\ Without \\ Escaping', nhưng không có cơng cụ sửa đổi

thơ. screen.blit (image, (0,0)): - Thao tác này sẽ hiển thị hình ảnh trên window
game. pygame.mixer.music.play (-1): - Số chỉ tần số của bản nhạc. Điều này sẽ
phát nhạc vô tận. nếu chúng ta viết bất kỳ số nào, nó sẽ chơi nhiều lần. 0 có nghĩa là
nó sẽ chơi một lần. pygame.mixer.music.queue ('next_song.mp3'): - Điều này sẽ
xếp hàng đợi bài hát được phát tiếp theo. pygame.mixer.music.stop (): - Thao tác
này sẽ dừng nhạc.

Thay đổi màu của hộp
Mỗi màu đểu có mã khác nhau.  Để nhận mã màu RGB, hãy truy cập trang web
này: />Đoạn code mẫu này để làm cho hộp chuyển từ màu đỏ sang màu nâu bằng phím
cách (Space)
is_red = True
#in infinite while loop:if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
is_red = not is_red
if is_red: color = (255, 0, 0)
else: color = (102, 0, 0)

16


Di chuyển hình chữ nhật
Làm game thì khơng thể thiếu chuyển động, chúng ta là những người
điểu khiển bàn phím sẽ quyết định hướng di chuyển của game. Dưới đây là
đoạn code mẫu

pressed = pygame.key.get_pressed()
if pressed[pygame.K_UP]: y -= 1
if pressed[pygame.K_DOWN]: y += 1
if pressed[pygame.K_LEFT]: x -= 1
if pressed[pygame.K_RIGHT]: x += 1

if is_red: color = (255, 0, 0)
else: color = (102, 0, 0)
pygame.draw.rect(screen, color, pygame.Rect(x, y, 90, 90))
Khi chơi game để biết độ mượt của trò chơi chúng ta cần phải nhìn chỉ
số tốc độ khung hình /giây (hay cịn gọi là fps). Chúng ta có một lớp là
pygame.time được gọi là Đồng hồ thực hiện điều này cho chúng ta. Nó có một
phương pháp được gọi là đánh dấu để đạt được tốc độ fps mong muốn.
#Add this before loop.
clock = pygame.time.Clock()
#Add this in loop.
clock.tick(60)

17


×