Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 15

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

ĐỀ TÀI:
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 THÀNH
Ngành : CÔNG NGHỆ THÔNG TIN
Chuyên ngành : CÔNG NGHỆ PHẦN MỀM
Lớp : D14CNPM3
Khóa : 2019 - 2023

Hà Nội, tháng 4 năm 2022


PHIẾ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 :


MỤ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
LỜ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ể.
I. 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:


DISPLAYSURF = 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í)
o Lặp lại bước đầu tiên
Trong 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.
Vậ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()
Đây là kết quả nhận được:
II. 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 = 0
high_score = 0

# 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 = 0
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)
# 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 = 0
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
if event.key == pygame.K_SPACE and game_active:
                bird_movement = 0
                bird_movement = -7
                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:
                game_active = True
                pipe_list.clear()
                bird_rect.center = (100, 384)
                bird_movement = 0
                score = 0

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)
pipe_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
Giao diện khi chơi
KẾ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.

You might also like