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

Báo cáo Đồ Án ngôn ngữ lập trình python Đề tài xây dựng game bơi mèo

25 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Xây Dựng Game Bơi Mèo
Tác giả Đào Thị Nhi
Người hướng dẫn Trịnh Tấn Đạt
Trường học Trường Đại Học Sài Gòn
Chuyên ngành Công Nghệ Thông Tin
Thể loại báo cáo đồ án
Thành phố Hồ Chí Minh
Định dạng
Số trang 25
Dung lượng 1,51 MB

Nội dung

Python có những úng dụng phổ biến như lậptrình web, phát triển trò chơi thông qua thư viện Pygame, khoa học dữ liệu.Trong quá trình tìm hiểu về Python em thấy hứng thú với các ứng dụng g

Trang 1

ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC SÀI GÒN KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO ĐỒ ÁN NGÔN NGỮ LẬP TRÌNH PYTHON

ĐỀ TÀI: Xây dựng game Bơi Mèo

Giảng viên hướng dẫn : Trịnh Tấn Đạt

Sinh viên thực hiện : Đào Thị Nhi

MSSV : 3120410370

Trang 2

NHẬN XÉT ĐÁNH GIÁ CỦA GIẢNG VIÊN

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

….………

Trang 3

LỜI CẢM ƠN

Trước hết, em xin gửi lời cảm ơn đối với tất cả các thầy cô giáo trường Đại Học Sài Gòn nói chung và các thầy cô khoa Công Nghệ Thông Tin đã tậntâm truyền đạt kiến thức rất nhiều kiến thức cho em Em xin tỏ lòng biết ơn đến thầy giáo Trịnh Tấn Đạt đã truyền đạt kiến thức chuyên môn vàhỗ trợ cho

em thực hiện đồ án lần này

Trong suốt quá trình hoàn thành đồ án, dù đã cố gắng nhưng vì thời gian có hạn nên sản phẩm chắc chắn sẽ còn những thiếu sót Nên em rất mongnhận được sự góp ý của thầy và các bạn, để em rút ra được kinh nhiệm cho những sản phẩm sau này của em Em xin chân thành cảm ơn !

Trang 4

MỤC LỤC

PHẦN I MỞ ĐẦU 1

1 Giới thiệu đề tài 1

2 Lý do chọn đề tài 1

3 Mục đích - mục tiêu của đề tài 1

PHẦN II NỘI DUNG 3

1 Đôi nét về game Bơi Mèo 3

2 Giới thiệu vấn đề 3

3 Luật chơi 3

4 Môi trường cài đặt 3

5 Xây dựng game 3

5.1 Cài đặt Pygame và các biến cho trò chơi 4

5.2 Chèn background, trần và sàn 6

5.3 Tạo mèo 7

5.4 Tạo đá 10

5.5 Tạo xu 12

5.6 Thêm rương xu 12

5.7 Thêm cá 14

5.8 Thêm cá mập 14

5.9 Hàm kiểm tra va chạm 16

5.10 Hàm hiển thị cách tính điểm 16

5.11 Hàm hiển thị điểm 17

5.12 Xử lí tăng tốc độ của game sau một số điểm nhất định 18

5.13 Hàm khi bắt đầu game 18

5.14 Xử lí khi thua 19

6 Một số hình ảnh của game 20

7 Kết luận 23

Trang 5

PHẦN I MỞ ĐẦU

1 Giới thiệu đề tài

Xây dựng trò chơi Bơi Mèo bằng ngôn ngữ lập trình Python

2 Lý do chọn đề tài

Hiện nay, ngành Công nghệ thông tin đang ngày càng phát triển nhanhchóng đóng vai trò quan trọng trong phát triển xã hội Nó không chỉ thúc đẩynhanh chóng quá trình tăng trưởng kinh tế, mà còn kéo theo sự biến đổi trongphương thức sáng tạo của cải, trong lối sống và tư duy của con người Côngnghệ thông tin có nhiều ứng dụng trong cuộc sống như trong lĩnh vực kinh tế,quốc phòng, công tác quản lý, giải trí

Python là ngôn ngữ lập trình nguồn mở phổ biến được sử dụng cho cảchương trình độc lập và ứng dụng trong nhiều lĩnh vực khác nhau Nó miễnphí, mạng mẽ và dễ sử dụng Python có những úng dụng phổ biến như lậptrình web, phát triển trò chơi thông qua thư viện Pygame, khoa học dữ liệu.Trong quá trình tìm hiểu về Python em thấy hứng thú với các ứng dụng game được lập trình bằng Python sử dụng thư viện Pygame Đây 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 Có rẩt nhiều tựa game đời đầu đã được tạo nên

từ ngôn ngữ Python, nên em đã quyết định sử dụng thư viện Pygame của Python để xây dựng game Bơi Mèo

3 Mục đích - mục tiêu của đề tài.

- Mục đích:

+Nắm chắc được kỹ năng và kiến thức về lập trình

+Tìm hiểu về thư viện Pygame trong ngôn ngữ lập trình Python.+Củng cố, áp dụng, nâng cao kiến thức đã được học

+Nắm bắt được quy trình làm game cơ bản

Trang 6

- Mục tiêu:

+Vận dụng được tính chất của lập trình hướng đối tượng

+Sử dụng thư viện Pygame vào việc xây dựng game Bơi Mèo

Trang 7

PHẦN II NỘI DUNG

1 Đôi nét về game Bơi Mèo

Bơi Mèo là một game được trình bày theo phong cách scroller (phong cách game với các đối tượng được nhìn thấy ở mặt bên (side-view) và di chuyển từ cạnh trái sang cạnh phải của màn hình), trong đó ngườichơi điều khiển một com mèo, cố gắng vượt qua các chướng ngại vật dướibiển mà không chạm vào chúng Game được em thiết kế dựa trên gameFlappy Bird và cải tiến thêm một số tính năng

side-2 Giới thiệu vấn đề

Yêu cầu chương trình của chúng ta ở đây là làm sao thiết kế được mộtchương trình game gần giống như Flappy Bird trên dựa vào các phương pháplập trình đã học Cụ thể là sử dụng phương pháp lập trình Python đang học kếthợp với các mẫu thiết kế và các giải thuật toán học

3 Luật chơi

- Mục tiêu của Bơi Mèo là ăn càng nhiều xu càng tốt bằng cách điều

khiển chú mèo vượt qua các chướng ngại vật dưới biển

- Các chướng ngại vật sẽ di chuyển từ trái sang phải, chú mèo sẽ rơi tự

do theo trọng lực của trái đất, người chơi nhấn và giữ phím SPACE để giúpchú mèo bơi lên, nếu chạm vào chướng ngại vật hoặc rơi xuống đất hoặc bơiquá cao, người chơi phải chơi lại từ đầu

4 Môi trường cài đặt

- Visual Studio Code (64 bit)

- Điều đầu tiên cần làm để lập trình trò chơi trong Python là cài đặt đun Pygame Để thực hiện cài cho mô-đun này, có thể nhập câu lệnh như sautrong cdm: pip install pygame

mô-5 Xây dựng game

Trang 8

5.1 Cài đặt Pygame và các biến cho trò chơi

Khai báo thư viện pygame, randint.

Hàm init() khởi tạo tất cả các mô-đun Pygame đã được nhập (trả về một

bộ giá trị cho biết việc thành công và thất bại của quá trình khởi tạo)

Thêm font chữ vào game.

Khởi tạo biến

Trang 9

#v trí cá ị

fish1_x_x rock1_1_x =

fish1_x rock1_1_x rock1_x = + - 200

fish2_x fish1_x = + 300

fish3_x rock1_1_x rock2_x = + + 160

fish4_x rock1_1_x rock2_x = + + 160

fish5_x rock1_1_x rock3_x = + + 440

fish6_x rock1_1_x rock4_x = + + 250

coin11_x coin10_x = ; coin12_x coin11_x coin_kc = +

Trang 10

Thêm âm thanh

#Chèn âm thanh

bongbong_sound= pygame mixer Sound ( 'sound\boi.wav')

death_sound= pygame mixer Sound ( 'sound\death.wav' )

score_sound= pygame mixer Sound ( 'sound\coin.ogg' )

Khởi tạo màn hình game

#Tiêu đè và Icon game

pygame display set_caption ( 'B i Mèo' ơ )

icon= pygame image load ( 'img/catout.jpg')

pygame display set_icon (icon)

#C a s game ử ổ

screen= pygame display set_mode (( 432 , 768 ))

Sử dụng pygame.display.set_caption() để đặt tiêu đề cho cửa sổ game

Sử dụng pygame.display.set_icon() để cài đặt icon cho cửa sổ game

Để tạo cửa số game, ta dùng pygame.display.set_mode() và truyền vàomột tuple là chiều rộng và dài của cửa sổ game, nó trả về dạng surface, dùngbiến screen để lưu lại

Vòng lặp while

running=True

a_key_down=False

while running:

for event in pygame event get ():

if event type== pygame QUIT:

running = False

Cho vòng lặp for nếu event.type = QUIT là người chơi nhấn nút thoát,

sẽ gán running = False và vòng lặp while sẽ kết thúc

pygame.display.update(): dùng để vẽ lại màn hình game để lưu các thayđổi trong vòng lặp while

5.2 Chèn background, trần và sàn

bg= pygame image load ( 'img\bg.jpg')

bg = pygame transform scale ( bg ,( 432 , 790 ))

bg_x=

top= pygame image load ( 'img/top.jpg')

top = pygame transform scale ( top ,( 432 , 150 ))

Trang 11

fl = pygame transform scale ( fl ,( 432 , 200 ))

top_x=

fl_x=

Tải ảnh background, trần và sàn của trò chơi lưu vào biến bg, top và fl

Sử dụng pygame.transform.scale() để tăng kích thước của hình bằngcửa sổ game Biến fl_x, top_x, bg_x là giá trị tọa độ x ban đầu củabackground, trần và sàn

Thêm background, trần và floor vào cửa sổ game trong vòng lặp while

top1 screen = blit ( top,( fl_x ,- 20 ))

top2 screen = blit ( top,(fl_x + 430 ,- 20 ))

if top_x==- 432 :

top_x= 0

Sử dụng hàm blit() để chèn một surface này lên một surface khác, tham

số truyền vào là surface muốn chèn, sau đó là một tuple chứa vị trí muốnchèn

Để cho sàn chuyển động về bên trái, mỗi vòng lặp while vị trí tọa độ xcủa sàn fl_x sẽ giảm đi một v_fl (là vận tốc của sàn) Tuy nhiên đến một lúcnào đó sàn sẽ biến mất nên ta phải thêm sàn thứ 2 vào sau sàn thứ nhất vị trítọa độ x là fl_x+432 trong đó 432 là chiều ngang của cửa sổ game Lệnh if là

để kiểm tra nếu sàn thứ nhất chạy hết chiều ngang màn hình thì đặt lại tọa độ

x của sàn để sàn thứ nhất nối sau sàn thứ 2 Background và trần cũng tương tựvậy

Trang 12

5.3 Tạo mèo

#Đ a cat vào ư

cat_out= pygame image load ( r'img \c atout.jpg')

cat_out= pygame transform scale (cat_out,( 95 , 80 ))

cat_mid1= pygame image load ( r'img \c atmid1.jpg')

cat_mid1 = pygame transform scale ( cat_mid1 ,( 95 , 80 ))

cat_mid2= pygame image load ( r'img \c atmid2.jpg')

cat_mid2 = pygame transform scale ( cat_mid2 ,( 95 , 80 ))

cat_in= pygame image load ( 'img \c atin.jpg')

cat_in = pygame transform scale ( cat_in ,( 95 , 80 ))

cat_list =[ cat_out , cat_mid1 , cat_mid2 , cat_in ]

cat_index=

cat=cat_list cat_index [ ]

cat_hcn cat = get_rect (center=( x_cat y_cat , ))

Lần lượt tải các ảnh của con mèo và gán vào biến

Tạo một list chứa các biến vừa tạo, tạo biến cat_index để chứa vị trí cácbiến trong cat_list, giá trị mặc định là 0

Gán biến cat là một biến trong list

Tạo biến cat_hcn để lưu vị trí của của mèo

Hàm xử lý cho mèo đạp chân

#Hàm mèo b i ơ

def cat_animation ():

new_cat cat_list cat_index = [ ]

new_cat_rect = new_cat get_rect (center= ( x_cat y_cat , ))

return new_cat, new_cat_rect

Hàm trả về một biến cat mới và một biến cat_hcn

Tạo timer cho mèo

#T o time cho mèo ạ

cat_sim = pygame USEREVENT

pygame time set_timer ( cat_sim , 300 )

Khi mèo bơi thì chân sẽ liên tục đập, trạng thái liên tục thay đổi, để môphỏng điều này, ta sẽ tạo ta sự kiện mới tên là cat_sim, sau đó set_timer cho

nó để sau 300 mili giây sự kiện này sẽ được thêm và hàng đợi sự kiện củapygame một lần

Xử lí sự kiện đạp chân

Trang 13

cat, cat_rect = cat_animation ()

Trong vòng lặp for xử lý sự kiện cat_sim do người dùng tạo ra, ta sẽthay đổi ảnh của mèo liên tục để tạo hiệu ứng chuyển động đạp chân Bằngcách sử dụng lệnh if để cho biến cat_index thay đổi giá trị từ 0 đến 3 để duyệthết list cat_list đã tạo từ trước Nếu đã duyệt hết thì gán lại giá trị cat_index =

0 để duyệt lại từ đầu

Trong vòng lặp while

Xử lý sự kiện người chơi ấn và giữ nút SPACE

for event in pygame event get ():

if event type== pygame KEYDOWN:

if event.key== pygame K_SPACE and game_play:

if event type == pygame KEYUP:

if event.key == pygame K_SPACE and game_play :

Nếu người dùng nhấn và giữ nút SPACE và biến game_play = True thì

ta sẽ gán a_key_down=True, gọi biến âm thanh bơi để mỗi lần nhấn phímSPACE sẽ phát ra tiếng bơi Ra khỏi vòng lặp for ta dùng lệnh if kiểm tra, nếua_key_down = True, tạm ngưng chuyển động của mèo ( cat_movement = 0 )

và sau đó lấy tọa độ y của mèo trừ 3.5, mèo sẽ bơi lên trên

Trang 14

Nếu người dùng nhấn nút SPACE và biến game_play = False thì ta sẽgán lại biến game_play = True để người chơi bắt đầu ván mới Và đặt lại giátrị cat_movement =0, cat_hcn về lại vị trí ban đầu, điểm=0.

Nếu người dùng thả nút SPACE thì đặt lại giá trị cat_movement =0,a_key_down=False

Đưa mèo vào

Câu lệnh cuối là với mỗi vòng lặp while cập nhật vị trí cat_hcn, trong

đó centery là lấy vị trí tọa độ y của cat cộng với cat_movement

5.4 Tạo đá

#Đ a đá vào ư

rock1_img= pygame image load ( r'img \r ock1.jpg')

rock1_d_img= pygame image load ( r'img \r ock1_d.jpg')

rock2_img= pygame image load ( r'img \r ock2.jpg')

rock2_d_img= pygame image load ( r'img \r ock2_d.jpg')

rock3_img= pygame image load ( r'img \r ock1.jpg')

rock3_d_img= pygame image load ( r'img \r ock1_d.jpg')

rock4_img= pygame image load ( r'img \r ock2.jpg')

rock4_d_img= pygame image load ( r'img \r ock2_d.jpg')

Tải hình ảnh đá và đá đối diện lưu vào biến

Trang 15

rock4 screen = blit ( rock4_img,( rock4_x ,- 190 ))

rock5_img = pygame transform scale ( rock4_img,( 160 , 200 ))

rock5 screen = blit ( rock5_img,( rock5_x ,- 40 ))

rock3_d_img = pygame transform scale ( rock3_d_img ,( 100 , 400 ))

rock3_d screen = blit ( rock3_d_img ,( rock3_x , 570 ))

rock4_d_img = pygame transform scale ( rock4_d_img ,( 60 , rock2_height )) rock4_d screen = blit ( rock4_d_img ,( rock4_x + 200 , 550 ))

rock5_d_img = pygame transform scale ( rock1_d_img ,( 160 , 290 ))

rock5_d screen = blit ( rock5_d_img ,( rock5_x + 200 , 570 ))

Ép đá theo kích thước chiều dài đã cho khai báo từ trước, chiều rộng đátùy ý Chèn đá vào màn hình game ở vị trí tọa độ x cho trước và tọa độ y tùychỉnh

Ép đá đối diện tương tự như trên

Trang 16

Đá di chuyển đến một lúc sẽ không còn trên màn hình, nên ta sẽ tạo đámới khi đá cũ biến mất khỏi màn hình (rock_x < - 500) Đá mới sẽ thêm vào

vị trí tọa độ x = rock1_1_x

5.5 Tạo xu

#thêm coin

coin_img= pygame image load ( r'img/coin.jpg')

coin_img = pygame transform scale ( coin_img ,( 50 , 50 ))

Tải hình ảnh xu và lưu vào biến, ép kích thước xu rộng=50, dài=50

Trong vòng lặp while

#đ a coin vào ư

coin1_x-=rock_velocity

coin1 screen = blit ( coin_img,(coin1_x coin_y)) ,

if cat_hcn colliderect (coin1):

coin1_x rock1_1_x rock1_x = + + 250

score+= 1 ; score_sound play ()

if coin1_x<- 50 :

coin1_x rock1_1_x = + rock1_x + 250

Cho coin di chuyển sang trái bằng cách trừ đi vận tốc di chuyển của đá,bởi vì coin và đá di chuyển bằng nhau Gán coin vào màn hình với tọa độ x và

y cho trước

Kiểm tra va chạm giữa coin và mèo

Sử dụng hàm colliderect() để kiểm tra va chạm giữa hai hình chữ nhật.Nếu có va chạm thì di chuyển coin đến vị trí tiếp theo Biến điểm cộng thêm

1, gọi âm thanh score_sound

Nếu không va chạm thì cũng chuyển xu đến vị trí sẽ xuất hiện tiếp theo.Các đồng xu khác cũng tương tự như vậy

5.6 Thêm rương xu

def ruong_animation ():

new_ruong ruong_list ruong_index = [ ]

Trang 17

#thêm r ươ ng

ruong1_img= pygame image load ( r'img/ruong1.jpg')

ruong1_img = pygame transform scale ( ruong1_img ,( 80 , 60 ))

ruong2_img= pygame image load ( r'img/ruong.jpg')

ruong2_img = pygame transform scale ( ruong2_img ,( 80 , 60 ))

ruong_list =[ ruong1_img ruong2_img , ]

ruong_index=

ruong ruong_list ruong_index = [ ]

#t o time cho r ạ ươ ng

ruong_sim = pygame USEREVENT

pygame time set_timer ( ruong_sim , 500 )

for event in pygame event get ():

ruong1_x rock2_x coin_kc = + *

if cat_hcn colliderect (ruong1):

ruong1_x rock1_1_x = + rock2_x coin_kc + * 13

score+= 10 ; score_sound play ()

Gọi hàm ruong_animation() để tạo hiệu ứng cho rương Gán rương vàomàn hình theo vị trí cho trước Để rương di chuyển sang trái bằng cách lấy vịtrí rương trừ cho vận tốc bằng vận tốc di chuyển của đá

Kiểm tra nếu rương đi ra khỏi khung hình (ruong_x<-100), đặt lại vị tríban đầu của rương

Kiểm tra mèo có đụng vào rương bằng hàm colliderect(), nếu đụng vàothì gán vị trí rương bằng vị trí sẽ xuất hiện tiếp theo Tăng biến điểm thêm 10

Trang 18

Các rương khác cũng tương tự vậy.

5.7 Thêm cá

fisha_img= pygame image load ( r'img \f ish.jpg')

fisha_img= pygame transform scale (fisha_img,( 70 , 70 ))

Tải hình ảnh cá lưu vào biến

Trong vòng lặp while

fish1=screen blit ( fish_img ,( fish1_x + 10 , fish1_y + 10 ))

fish2 screen = blit ( fish_img,(fish2_x + 10 , fish2_y + 10 ))

fish3 screen = blit ( fish_img,(fish3_x + 10 , fish3_y + 10 ))

fish4 screen = blit ( fish_img,(fish4_x + 10 , fish4_y + 10 ))

fish5 screen = blit ( fish_img,(fish5_x + 10 , fish5_y + 10 ))

fish6 screen = blit ( fish_img,(fish6_x + 10 , fish6_y + 10 ))

Thêm cá vào màn hình ở vị trí cho trước

fish6_x rock1_1_x rock4_x = + + 200

Kiểm tra nếu cá đi ra khỏi khung hình (fish_x<-100), đặt lại vị trí banđầu của cá

5.8 Thêm cá mập

Ngày đăng: 26/11/2024, 18:02

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

TÀI LIỆU LIÊN QUAN