TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO MÔN HỌC ĐỒ HỌA MÁY TÍNH ĐÊ TI: GAME FLAPPY BIRD Sinh viên thực hiện : GIANG ỨNG HÙNG PHẠM HAI NAM NGUYỄN ĐỨC HUY Giảng viên hướ
Trang 1TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO MÔN HỌC
ĐỒ HỌA MÁY TÍNH
ĐÊ TI:
GAME FLAPPY BIRD
Sinh viên thực hiện : GIANG ỨNG HÙNG
PHẠM HAI NAM NGUYỄN ĐỨC HUY Giảng viên hướng dẫn : NGÔ NGỌC THNH Ngành : CÔNG NGHỆ THÔNG TIN Chuyên ngành : CÔNG NGHỆ PHẦN MÊM
Khóa : 2019 - 2023
Hà Nội, tháng 4 năm 2022
Trang 2PHIẾU CHẤM ĐIỂM Sinh viên thực hiện:
STT Họ và tên sinh viên Nội dung thực hiện Điểm Chữ ký
1 GIANG ỨNG HÙNG
2 PHẠM HAI NAM
3 NGUYỄN ĐỨC HUY
Giảng viên chấm:
Họ và tên Chữ ký Ghi chú Giảng viên chấm 1 :
Giảng viên chấm 2 :
Trang 3MỤC LỤC
LỜI MỞ ĐẦU 4
I Giới thiệu về công nghệ phát triển game pygame 5
Tạo cửa sổ game 5
Vòng lặp game 6
Sự kiện 7
Vẽ vài thứ lên màn hình 8
II Code game Flappy Bird với python 10
1 Các hàm trong game 10
Tạo cửa sổ game và vẽ nền cho game 10
Tạo cột và chuyển động của cột 12
2.Kết quả thực nghiệm 13
KẾT LUẬN 15
Trang 4LỜI MỞ ĐẦU
Như chúng ta đã thấy trong những năm gần đây sự phát triển vượt bậc về công nghệ đồ họa đã mang lại cho con người chúng ta vô vàn sự tiện nghi, những trải nghiệm mới mẻ, chân thực
Vậy đồ họa máy tính là gì : Đồ họa máy tính là phương pháp và công nghệ dùng trong việc chuyển đổi qua lại giữa dữ liệu và hình ảnh bằng máy tính Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về ở toán học, các thuật toán cũng như các kĩ thuật để cho phép tạo, hiển thị và điều khiển hình ảnh trên màn hình máy tính Đồ họa máy tính có liên quan ít nhiều đến một số lĩnh vực như đại số, hình học giải tích, hình học họa hình, quang học, và kĩ thuật máy tính, đặc biệt là chế tạo phần cứng (các loại màn hình, các thiết bị xuất, nhập, các vỉ mạch đồ họa )
Là sinh viên khoa Công nghệ thông tin trường Đại học Điện Lực Chúng em cũng được tiếp xúc với môn học đồ họa máy tính Với những kiến thức em đã được học chúng em đã thực hiện đề tài “ GAME FLAPPY BIRD” Trong quá trình thực hiện nghiên cứu chúng em đã sử dụng thư viện đồ họa openGL đang được sử dụng rộng rãi hiện nay
Có lẽ rằng chương trình và báo cáo của chúng em chưa được chuyên nghiệp, hoàn chỉnh nhất, còn có những thiếu xót Vì thế em rất mong thầy cô và các bạn có thể góp ý để nhóm em xây dựng đề đạt kết quả tốt nhất có thể
Trang 5I Giới thiệu về công nghệ phát triển game pygame
- Pygame là một bộ mô-đun Python đa nền tảng được thiết kế để viết trò chơi điện tử Nó bao gồm đồ hoạ máy tính và thư viện âm thanh được thiết kế để sử dụng với ngôn ngữ lập trình Python
Tạo cửa sổ game
import pygame , sys
from pygame locals import *
pygame init ()
DISPLAYSURF = pygame display set_mode (( 400 , 300 ))
pygame display set_caption ( ' Hello world! '
while True :
for event in pygame event get ():
if event type == QUIT :
pygame quit ()
sys exit ()
Đây là kết quả có được:
Trang 6DISPLAYSURF = pygame display set_mode (( 400 , 300 ))
Dòng này dùng để tạo cửa sổ game Hai số trong tuple (400, 300) chính là chiều rộng và chiều cao của cửa sổ Đơn vị độ dài hay toạ độ của đối tượng trong pygame là pixel DISPLAYSURF là 1 biến dạng surface Surface là gì thì mình sẽ giải thích kĩ ở phần sau nhe Bây giờ các bạn cứ hiểu đơn giản DISPLAYSURF là cái khung đen đen ấy là được
pygame display set_caption ( ' Hello world! '
Dòng trên dùng để tạo cái tiêu đề
while True :
for event in pygame event get ():
if event type == QUIT :
pygame quit ()
sys exit ()
Vòng lặp game
Để nói cho dễ hiểu thì các chuyển động trong game cũng giống như trong phim hoạt hình Tức là để tạo ra các chuyển động thì người ta sẽ “phát” liên tục các hình ảnh Trong game cũng tương tự thế Vì vậy, chúng ta cần có một vòng lặp để “vẽ” liên tục những hình ảnh Vòng lặp while trong đoạn code trên chính là vòng lặp game
Ví dụ, muốn cho một viên bi màu xanh chuyển động từ trái sang phải, phía sau là một nền đỏ thì phải làm như sau:
o Vẽ nền đỏ, vẽ viên bi
o Thay đổi vị trí viên bi (cho sang phải một tí) Lặp lại bước đầu tiên
Trang 7Trong vòng lặp game còn một phần quan trọng nữa là bắt “sự kiện” Tiếp theo chúng ta sẽ tìm hiểu về sự kiện nhé!
Sự kiện
Sự kiện trong game có thể là một cái click chuột, ấn phím…
Bây giờ cùng xem lại đoạn code này:
for event in pygame event get ():
if event type == QUIT :
pygame quit ()
sys exit ()
Dòng code này có tác dụng: Khi click vào nút X trên cửa sổ thì kết thúc game và đóng cửa sổ lại Dùng biến event trong vòng for để lấy các sự kiện xảy ra Dòng if
để kiểm tra sự kiện có phải là “click nút X” hay không Hai dòng cuối dùng để đóng chương trình
Quay lại ví dụ về viên bi lúc nãy, nếu muốn khi ấn phím space thì viên bi nhảy lên thì phải bắt sự kiện ấn phím space, sau đó code để xử lý cho viên bi nhảy lên Trong lập trình game có rất nhiều sự kiện khác nhau, mình sẽ dành một phần riêng
để nói về các sự kiện thường gặp
Trang 8Vậy là chúng ta vừa tìm hiểu xong đoạn code đầu tiên Nếu các bạn vẫn chưa hiểu thì cũng đừng quá lo lắng, hồi xưa mình cũng vậy thôi Hãy đọc lại, tìm hiểu thêm trên google, hoặc cũng có thể liên hệ với mình nhe!
Vẽ vài thứ lên màn hình
Như đã tìm hiểu về vòng lặp game, những lệnh vẽ sẽ nằm trong vòng lặp game Nào, bây giờ chúng ta hãy thử tô lên cửa sổ một cái nền màu trắng và vẽ một hình chữ nhật màu đỏ nha!
import pygame , sys
from pygame locals import *
pygame init ()
DISPLAYSURF = pygame display set_mode (( 400 , 300 ))
pygame display set_caption ( ' Hello world! '
while True :
for event in pygame event get ():
if event type == QUIT :
pygame quit ()
sys exit ()
DISPLAYSURF fill (( 255 , 255 , 255 )) pygame draw rect ( DISPLAYSURF , ( 255 , 0 0 ), ( 100 , 80 ,
150 , 50 ))
pygame display update ()
Trang 9Đây là kết quả nhận được:
Trang 10II Code game Flappy Bird với python
1. Các hàm trong game Tạo cửa sổ game và vẽ nền cho game gravity = 0.25 # giả lập trọng lực
bird_movement = 0
game_active = False
score =
high_score =
# chèn background
bg = pygame image load (
assets/background-night.png ' ) convert ()
bg = pygame transform scale2x ( bg )
# chèn sàn
floor = pygame image load ( ' assets/floor.png ' ) convert () floor = pygame transform scale2x ( floor )
floor_x_pos = 0
# tạo chim
bird_down = pygame transform scale2x ( pygame image load ( ' assets/yellowbird-downflap.png ' ) convert_alpha ()) bird_mid = pygame transform scale2x ( pygame image load ( ' assets/yellowbird-midflap.png ' ) convert_alpha ()) bird_up = pygame transform scale2x ( pygame image load ( ' assets/yellowbird-upflap.png ' ) convert_alpha ()) bird_list = [ bird_down , bird_mid , bird_up ] # 0 1 2
bird_index =
bird = bird_list [ bird_index ]
#bird=
pygame.image.load('assets/yellowbird- midflap.png').convert_alpha()
#bird = pygame.transform.scale2x(bird)
bird_rect = bird get_rect (center = 100 , 384 ))
# tạo timer cho bird
birdflap = pygame USEREVENT 1
pygame time set_timer ( birdflap , 200 )
Trang 11# tạo ống
pipe_surface = pygame image load (
assets/pipe-green.png ' ) convert ()
pipe_surface = pygame transform scale2x ( pipe_surface )
pipe_list = []
# tạo timer
spawnpipe = pygame USEREVENT
pygame time set_timer ( spawnpipe , 1200 )
pipe_height = [ 300 , 400 , 500 ]
# Tạo màn hình kết thúc
game_over_surface = pygame transform scale2x (
pygame image load ( ' assets/message.png ' ) convert_alpha ()) game_over_rect = game_over_surface get_rect (center = 216 ,
384 ))
# Chèn âm thanh
flap_sound = pygame mixer Sound ( ' sound/sfx_wing.wav ' )
hit_sound = pygame mixer Sound ( sound/sfx_hit.wav ' )
score_sound = pygame mixer Sound ( sound/sfx_point.wav '
score_sound_countdown = 100
Tạo con chim và vẽ lên cửa sổ
# tạo chim
bird_down = pygame transform scale2x ( pygame image load ( ' assets/yellowbird-downflap.png ' ) convert_alpha ())
bird_mid = pygame transform scale2x ( pygame image load (
' assets/yellowbird-midflap.png ' ) convert_alpha ())
bird_up = pygame transform scale2x ( pygame image load (
' assets/yellowbird-upflap.png ' ) convert_alpha ())
bird_list = [ bird_down , bird_mid , bird_up ] # 0 1 2
bird_index =
bird = bird_list [ bird_index ]
Chuyển động rơi tự do của chim
bird_movement += gravity #tăng trọng lực khi chim di chuyển
Trang 12if event key == pygame K_SPACE and game_active :
- flap_sound play () #nhạc game
Dòng if được thêm vào khá đơn giản Khi trò chơi bắt đầu nhấn phím space thì chim sẽ bay lên
if event key == pygame K_SPACE and game_active == False :
pipe_list clear ()
bird_rect center ( 100 , 384 )
Tạo cột và chuyển động của cột
Tạo cột
pipe_surface = pygame image load (
assets/pipe-green.png ' ) convert ()
pipe_surface = pygame transform scale2x ( pipe_surface )
Trang 13pipe_list = []
Hàm draw của cột
def draw_pipe ( pipes ) :
for pipe in pipes:
if pipe bottom >= 600 :
screen blit ( pipe_surface , pipe )
else :
flip_pipe = pygame transform flip ( pipe_surface , False , True )
screen blit ( flip_pipe , pipe )
2.Kết quả thực nghiệm
- Giao diện khởi động
Trang 14Giao diện khi chơi
Trang 15KẾT LUẬN Qua việc thực hiện nghiên cứu đề tài “Game flappy bird ” Nhóm chúng em đã được biết thêm rất nhiều về môn Đồ họa máy tính Bên cạnh đó, việc làm nghiên cứu giúp chúng em đoàn kết hơn, rèn luyện cho chúng em kỹ năng làm việc nhóm
Trong quá trình thực hiện đề tài có rất nhiều ý tưởng hay, độc đáo Nhưng do kiến thức của chúng em hạn hẹp và thời gian không cho phép nên chúng em chưa thể thực hiện được những ý tưởng đó Tuy nhiên chúng em đã cố gắng để xây dựng một chương trình hoàn chỉnh nhất, đẹp nhất Trong quá trình xây dựng chương trình nhóm chúng em khó tránh khỏi những sai sót Vì vậy em rất mong rằng thầy và các bạn cùng góp ý với nhóm em để có thể hòa thành sản phẩm một cách hoàn trỉnh nhất