1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo dự án lập trình game flappy bird

17 6 0

Đ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

Nội dung

Trò chơi kết thúc khi con chim va chạm vào bất kỳ vật cản nào, điểm số của người chơi được tính dựa trên số lần vượt qua các ống.Mặc dù đơn giản nhưng Flappy Bird đã tạo ra cơn sốt toàn

Trang 2

DANH SÁCH THÀNH VIÊN

STT

1 Nguyễn Hoàng Nhi 31231026989

1 Lên ý tưởng code, viết code cho phần floor và chương trình chính

2 Thuyết trình

3 Viết báo cáo phần giải quyết vấn đề

2 Lê Thị Thảo Nhi 31231026987

1 Lên ý tưởng code, viết code cho phần tạo ống và chuyển động ống

2 Thuyết trình

3 Viết báo cáo phần tìm hiểu thư viện

3 Nguyễn Hoàng Nam 31231025683

1 Lên ý tưởng code, viết code cho phần tạo con chim và chuyển động chim

2 Thuyết trình

3 Viết báo cáo phần giới thiệu đề tài, kết luận, vẽ sơ đồ thuật toán

Trang 3

MỤC LỤC

1 GIỚI THIỆU ĐỀ TÀI 4

2 TÌM HIỂU THƯ VIỆN 4

2.1 Thư viện PyGame 4

2.2 Thư viện sys 5

2.3 Thư viện random 5

3 GIẢI QUYẾT VẤN ĐỀ 6

3.1 Tạo nền floor và chuyển động của floor 9

3.2 Tạo ống và chuyển động của ống 9

3.3 Tạo chim và chuyển động của chim 10

3.4 Kiểm tra sự va chạm 11

3.5 Hệ thống tính điểm 13

3.6 Chương trình chính 15

4 KẾT LUẬN 16

Trang 4

1 GIỚI THIỆU ĐỀ TÀI

Flappy Bird là một trò chơi điện tử di động đã trở thành hiện tượng toàn cầu trong thời gian ngắn Được tạo ra bởi nhà phát triển trò chơi độc lập người Việt Nam, Nguyễn Hà Đông, trò chơi này đã phát hành vào tháng 5 năm 2013 cho hệ điều hành iOS và sau đó cho Android.

Flappy Bird đơn giản nhưng cực kỳ gây nghiện Người chơi điều khiển một con chim nhỏ qua các ống dẫn bằng cách nhấn vào màn hình, và mục tiêu là tránh va chạm vào các ống hoặc bất kỳ vật cản nào khác Trò chơi kết thúc khi con chim va chạm vào bất kỳ vật cản nào, điểm số của người chơi được tính dựa trên số lần vượt qua các ống.

Mặc dù đơn giản nhưng Flappy Bird đã tạo ra cơn sốt toàn cầu và thu hút hàng triệu người chơi Đến với dự án lập trình game trong môn Lập trình căn bản này, nhóm chúng em quyết định lựa chọn tạo chương trình cho game “Flappy Bird” dựa trên nền tảng thư viện pygame

Về dự án lập trình game “Flappy Bird”, nhóm chúng em đã tạo ra được một chương trình đáp ứng các yêu cầu cơ bản, người chơi sẽ sử dụng phím cách (Space) trên bàn phím để điều khiển con chim di chuyển lên xuống và vượt qua các chướng ngại vật xuất hiện trên màn hình, cuối cùng hệ thống sẽ ghi nhận tính điểm cho người chơi Tuy nhiên vì giới hạn thời gian chuẩn bị cho dự án cũng như vì khả năng lập trình của các thành viên nên dự án này vẫn chưa hoàn thiện ở phiên bản tốt nhất, cụ thể dự án vẫn còn thiếu trang màn hình chính bao gồm hướng dẫn trò chơi và nút thoát ra cũng như hệ thống tính điểm vẫn chưa hoàn thiện.

2 TÌM HIỂU THƯ VIỆN2.1 Thư viện PyGame

PyGame là thư viện mã nguồn mở trên ngôn ngữ Python dùng để lập trình video games PyGame chứa đầy đủ các công cụ hỗ trợ lập trình game như đồ hoạt, hoạt hình, âm thanh, và sự kiện điều khiển, cung cấp các công cụ và tính năng cần thiết để tạo ra các trò chơi đồ hoạ 2D đơn giản hoặc phức tạp.

Trang 5

PyGame có một số ưu điểm rất nổi bật ví dụ như dễ sử dụng, hỗ trợ đa nền tảng, cung cấp nhiều chức năng về đồ họa và âm thanh, miễn phí và mã nguồn mở cho phép người dùng tự do tải về và sử dụng theo ý muốn.

2.2 Thư viện sys

Thư viện sys trong Python cung cấp các chức năng và biến để tương tác với hệ thống hoặc trình thông dịch Python Dưới đây là một số tính năng chính của thư viện sys: - Thông tin hệ thống: Bằng cách sử dụng sys, bạn có thể truy cập các thông tin về hệ thống như phiên bản Python hiện đang chạy, thông tin về nền tảng và kiến trúc hệ thống.

- Tham số dòng lệnh: Thư viện sys cho phép bạn truy cập các tham số được truyền vào từ dòng lệnh khi bạn thực thi một chương trình Python.

- Đường dẫn thư mục: Bạn có thể sử dụng sys.path để truy cập và thay đổi danh sách các đường dẫn thư mục được Python sử dụng để tìm kiếm các module và gói.

- Kết thúc chương trình: Thư viện sys cung cấp sys.exit() để kết thúc một chương trình Python với một mã trạng thái cụ thể.

- Các thông báo và luồng đầu ra: Ta có thể sử dụng sys.stdout và sys.stderr để điều khiển đầu ra chuẩn và đầu ra lỗi của chương trình Python.

- Quản lý biến môi trường: sys cho phép truy cập biến môi trường bằng cách sử dụng sys.environ, cho phép bạn đọc và thay đổi các biến môi trường của hệ thống.

Thư viện sys là một phần quan trọng của Python và thường được sử dụng trong các ứng dụng liên quan đến quản lý hệ thống, xử lý tham số dòng lệnh và điều khiển luồng dữ liệu trong chương trình Python.

2.3 Thư viện random

Thư viện random trong Python cung cấp các chức năng để tạo ra dữ liệu ngẫu nhiên và thực hiện các hoạt động liên quan đến ngẫu nhiên Dưới đây là một số tính năng chính của thư viện random:

Trang 6

- Tạo số ngẫu nhiên: Thư viện random cho phép bạn tạo ra số ngẫu nhiên, bao gồm các số nguyên và số thực trong một phạm vi nhất định.

- Chọn mẫu ngẫu nhiên: Bạn có thể sử dụng random.choice() để chọn một phần tử ngẫu nhiên từ một danh sách hoặc một tuple.

- Xáo trộn dữ liệu: random.shuffle() cho phép bạn xáo trộn ngẫu nhiên các phần tử trong một danh sách.

- Tạo chuỗi ngẫu nhiên: Thư viện cung cấp random.sample() để tạo ra một mẫu ngẫu nhiên từ một tập hợp các phần tử mà không có sự lặp lại.

- Số ngẫu nhiên có phân phối đồng đều: random.uniform() cho phép bạn tạo ra một số thực ngẫu nhiên trong một phạm vi với phân phối đồng đều.

- Số nguyên ngẫu nhiên trong một phạm vi: Bạn có thể sử dụng random.randint() để tạo ra một số nguyên ngẫu nhiên trong một phạm vi đã cho.

Thư viện random là một công cụ mạnh mẽ để thực hiện các tác vụ liên quan đến ngẫu nhiên trong Python, bao gồm tạo dữ liệu mẫu, kiểm thử và mô phỏng, và được sử dụng rộng rãi trong nhiều ứng dụng, từ trò chơi đến khoa học dữ liệu và máy học.

3 GIẢI QUYẾT VẤN ĐỀ

Bài toán đặt ra để tạo được chương trình game Flappy Bird gồm những phần chính sau: Tạo nền floor và chuyển động của floor, tạo ống và chuyển động của ống, tạo con chim và chuyển động của chim, tạo hệ thống tính điểm, kiểm tra sự va chạm giữa ống và chim Sau đây là tóm tắt về quy trình thực hiện trò chơi của nhóm:

Khởi tạo các biến và tải các tài nguyên cần thiết (hình ảnh, âm thanh) Tạo vòng lặp chính của trò chơi:

Xử lý sự kiện:

- Nếu người chơi nhấn phím SPACE: + Nếu trò chơi đang diễn ra:

Trang 7

* Chim bay lên trên * Phát âm thanh

+ Nếu trò chơi đã kết thúc: * Bắt đầu trò chơi mới

* Xóa danh sách ống và reset điểm số - Tạo ống mới mỗi khoảng thời gian

- Xử lý sự kiện birdflap để tạo hiệu ứng hoạt hình cho chim Cập nhật vị trí và hiển thị các đối tượng:

- Nếu trò chơi đang diễn ra:

+ Chim di chuyển xuống dưới do tác động của trọng lực + Chim xoay và hiển thị trên màn hình

+ Di chuyển và hiển thị các ống trên màn hình + Tính điểm và hiển thị điểm số

+ Kiểm tra va chạm giữa chim và các ống

Trang 8

Cập nhật màn hình:

- Cập nhật màn hình hiển thị với tất cả các thay đổi mới - Giới hạn FPS của trò chơi

Bắt đầu

Hệ thống giao diện chơi game

Hệ thống tạo chướng ngại vật Kiểm tra ấn phím “Space”

Chuyển sang giao diện lưu điểm

Bird nhảy lên

Bird rơi xuống đất Kiểm tra Bird chạm chướng ngại vật

Trang 9

3.1 Tạo nền floor và chuyển động của floor

Ý tưởng chính: Tạo hai nền floor và cho chúng di chuyển liên tục từ phải sang trái,

nếu một floor có tọa độ theo trục hoành ở ngoài màn hình trò chơi thì floor còn lại sẽ tự động được set về tọa độ 0, tiếp nối như vậy để tạo thành vòng lặp chuyển động liên tục.

floor=pygame.image.load('Picture/floor.png').convert()floor=pygame.transform.scale2x(floor)

floor_x_position=0defdraw_floor():

screen.blit(floor,(floor_x_position,650)) screen.blit(floor,(floor_x_position+432,650))floor_x_position-=

draw_floor()

iffloor_x_position<=-432: #Tạo hàm if để khi floor 2 chạy xong thìfloor 1 sẽ đổi vị trí ra sau

floor_x_position

3.2 Tạo ống và chuyển động của ống

Ý tưởng chính: Gồm hai bước lớn đó chính là tạo ống và chuyển động cho ống Để

tạo ống, trước tiên nhóm sẽ chèn hình ảnh ống lên và đồng thời tạo ra một list rỗng, list này sau này sẽ được dùng để chứa các ống được tạo ra Sau đó, nhóm sẽ tạo ra một hàm create_pipe để tạo ống Các ống sẽ được tạo ra với chiều cao ngẫu nhiên và đồng thời bọn em sẽ get rect cho các ống đó, tức là bao một hình chữ nhật xung quanh vật thể là cái ống để phục vụ cho mục đích phát hiện sự va chạm giữa con chim và ống Sau khi đã tạo ống xong, nhóm sẽ tạo ra một hàm move_pipe để tạo chuyển động cho ống Với hàm này thì tất cả các ống được tạo ra sẽ di chuyển sang trái 5 đơn vị

pipe_surfacepygame.image.load('Picture/pipe-green.png').convert()pipe_surfacepygame.transform.scale2x(pipe_surface)

pipe_list= []

Trang 10

pygame.time.set_timer(spawn_pipe,2000)pipe_height= [300,400,500]

random_pipe_positionrandom.choice(pipe_height)

bottom_pipepipe_surface.get_rect(midtop (500,random_pipe_position)) top_pipepipe_surface.get_rect(midtop (500,random_pipe_position-650))

returnbottom_pipe, top_pipedefmove_pipe(pipes):

forpipeinpipes: pipe.centerx -= returnpipes

defdraw_pipe(pipes): forpipeinpipes:

ifpipe.bottom >=600:

screen.blit(pipe_surface,pipe) else:

flip_pipepygame.transform.flip(pipe_surface,False,True) screen.blit(flip_pipe,pipe)

3.3 Tạo chim và chuyển động của chim

Ý tưởng chính: Nhóm sẽ tải lên 3 hình ảnh ở ba trạng thái của chim là bird_down,

bird_mid và bird_up (tức là cánh của chim hướng xuống, ở giữa, và hướng lên) Và khi vào chương trình chính, tụi em sẽ kiểm tra xem chỉ số của hình ảnh chim

(bird_index) có nhỏ hơn 2 không Nếu bird_index nhỏ hơn 2, nghĩa là chúng ta vẫn chưa đạt tới hình ảnh cuối cùng trong loạt hình ảnh của chim, chúng ta tăng giá trị của bird_index lên 1, để chuyển sang hình ảnh tiếp theo trong chuỗi Ngược lại, nếu bird_index đã là 2 (nghĩa là chúng ta đang ở hình ảnh cuối cùng trong loạt), chúng ta đặt bird_index về 0, để quay lại hình ảnh đầu tiên trong chuỗi

Code:

defrotate_bird(bird1):

Trang 11

new_birdpygame.transform.rotozoom(bird1,bird_move*,) returnnew_bird

new_birdbird_list[bird_index]

new_bird_rectnew_bird.get_rect(center (100,bird_rect.centery)) returnnew_bird, new_bird_rect

bird_rect=bird.get_rect(center (100,384))birdflappygame.USEREVENT+1

3.4 Kiểm tra sự va chạm

Ý tưởng chính: Tạo khung hình chữ nhật bao xung quanh con chim và các ống, nếu

có sự va chạm giữa hai hình chữ nhật thì game sẽ dừng lại Hoặc nếu con chim bay quá cao hoặc quá thấp chạm vào khung màn hình chính trò chơi thì game cũng sẽ dừng lại.

Trang 12

Thuật toán “Kiểm tra thua”: Thuật toán này sẽ so sánh toạ độ của Bird so với đất và trụ Nếu như bird chạm 1 trong 2 đối tượng trên thì sẽ trả về kết quả “Thua” để xử lý phía sau

Bắt đầu

Kết thúc

Trang 13

defcheck_collision(pipes): forpipeinpipes:

ifbird_rect.colliderect(pipe):

Ý tưởng: Để tạo nên hệ thống tính điểm, nhóm sẽ tạo ra hai hàm, một hàm để hiển

thị điểm theo trạng thái trò chơi (main game hoặc game over), hàm còn lại dùng tính điểm cao nhất

Trang 14

Thuật toán “ Xem điểm”

Bắt đầu

Lấy điểm cao nhất đã lưu lại

So sánh với điểm sau lượt chơi

defdisplay_score(game_state): ifgame_state=='main game':

score_surfacegame_font.render(str(int(score)),True,(255,255,255)) score_rect=score_surface.get_rect(center (216,100))

screen.blit(score_surface,score_rect) ifgame_state=='game over':

score_surfacegame_font.render(f'Score: {int(score)},True,(255,255,255))

score_rect=score_surface.get_rect(center (216,100)) screen.blit(score_surface,score_rect)

Trang 15

high_score_surfacegame_font.render(f'High Score: {int(high_score)'True,(255,255,255))

high_score_recthigh_score_surface.get_rect(center= (216,630)) screen.blit(high_score_surface,high_score_rect)

Ở phần chương trình chính, nhóm sẽ tổng hợp và liên kết các ý tưởng ở trên lại để hoàn thiện chương trình như bên dưới.

foreventinpygame.event.get(): ifevent.type==pygame.QUIT: pygame.quit()

sys.exit()

ifevent.type==pygame.KEYDOWN:

ifevent.key ==pygame.K_SPACEandgame_active:

ifevent.type==spawn_pipe:

pipe_list.extend(create_pipe()) print(create_pipe)

ifevent.type==birdflap: ifbird_index<2 bird_index+=1

Trang 16

else:

bird_index

bird, bird_rect=bird_animation() screen.blit(background,(00))

ifgame_active:

bird_move+=gravity

rotated_bird=rotate_bird(bird) bird_rect.centery+=bird_move screen.blit(rotated_bird,bird_rect) game_activecheck_collision(pipe_list) pipe_listmove_pipe(pipe_list)

screen.blit(gameover_screen,gameover_rect)

high_score=update_high_score(score,high_score) display_score('game over')

Cuối cùng, nhóm đã hoàn thành dự án game “Flappy Bird” nhưng vẫn còn một số hạn chế có thể phát triển thêm Trong đó có thể kể đến việc phát triển tạo nên một màn hình chính bao gồm nút Bắt đầu game, Hướng dẫn chơi và Thoát game để tăng sự tương tác giữa người chơi và trò chơi Ngoài ra, hệ thống tính điểm của chương trình này vẫn chưa hoàn thiện tốt nhất vì vẫn đang tính theo cơ chế chim bay được càng lâu thì điểm càng cao thay vì tính điểm theo số lần vượt qua được ống.

Ngày đăng: 22/04/2024, 10:52

TỪ KHÓA LIÊN QUAN

w