1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

37 1,2K 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 37
Dung lượng 0,92 MB

Nội dung

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.

Trang 1

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

- 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

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

- ThS Nguyễn Đăng Quang 

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

Trang 2

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

Trang 3

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

Trang 4

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ả quá 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ìnhcảm sâu sắc

Để hoà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 ơnchâ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ữnglời khuyên từ kinh nghiệm thực tiễn của mình để định hướng cho chúng em đi đúngvớ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ỉnhsử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ư đúngthờ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ặtkiến thức, kĩ thuật và cũng như kinh nghiệm thực tế Do đó, trong quá 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 đượchoà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 emxin 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ữatrong 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

Trang 5

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

Trang 6

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

Trang 7

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

Trang 8

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

Trang 9

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ơinhiề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ânviê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

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

Trang 10

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ệclà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

Trang 11

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

Trang 12

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ảixuốngmacOS 64-bit installer

Trang 13

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

Trang 14

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-cp35m-manylinux1_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:

Trang 15

 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ủabạ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 :

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

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ởitạ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:

Trang 16

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ởitạ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 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ảimà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 :

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() :

Trang 17

Ả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ồmmộ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 toà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 :

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ởihà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 :

Trang 18

 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

<Event(4-MouseMotion {'rel': (616, 355), 'buttons': (0, 0, 0), 'pos': (616, 355)})> <Event(5-MouseButtonDown {'button': 1, 'pos': (616, 355)})>

<Event(6-MouseButtonUp {'button': 1, 'pos': (616, 355)})>

<Event(2-KeyDown {'scancode': 3, 'key': 102, 'unicode': 'f', 'mod': 0})> KeyUp {'scancode': 3, 'key': 102, 'mod': 0})>

<Event(3-Đầ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 soá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ể hoàn thiện mẫu của bạn bằng cách học cách thoát khỏi trò chơi

Bỏ cuộc

Để thoá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 đó thoá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ẽ thoát khỏi chương trình

Vì user có quyền kiểm soá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ìnhbằ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 soá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à thoá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)

Trang 19

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 thoá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 "thoát")

hoặc ESC có thể thoát khỏi chương trình Hãy thêm mã biểu thị điều này trong vònglặ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ể thoá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 thoá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 đó thoát bằng cách thoá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

Ngoà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.Ngoà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

Ngày đăng: 09/02/2022, 13:35

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w