基于python pygame實(shí)現(xiàn)的兔子吃月餅小游戲
中秋佳節(jié)就快來(lái)臨,給各位大佬整個(gè)兔子吃月餅的小游戲助助興,廢話不多說(shuō),開整。
小游戲規(guī)則簡(jiǎn)介
玩家通過(guò)"wsad"或者"↑↓←→"鍵控制兔子移動(dòng),使得兔子可以吃到更多的月餅,月餅一旦生成之后位置不會(huì)變,也不會(huì)消失,就等著兔子去吃,就是這么簡(jiǎn)單。但是吃了月餅會(huì)變重,重到一定程度會(huì)有想不到的效果。
實(shí)現(xiàn)
使用Python的pygame模塊開發(fā),pygame是用來(lái)開發(fā)游戲軟件的Python第三方庫(kù),基于SDL庫(kù)的基礎(chǔ)上開發(fā)??梢詣?chuàng)建功能豐富的游戲和多媒體程序,用它來(lái)開發(fā)小游戲非常適合。
初始化游戲窗口
import sys
import pygame
width = 800
height = 800
# 初始化所有pygame模塊
pygame.init()
# 創(chuàng)建游戲主窗口 width * height
windows = pygame.display.set_mode((width, height))
pygame.display.set_caption('兔子吃月餅??!')
# 游戲循環(huán)
while True:
# 給屏幕填充顏色
windows.fill((204, 204, 255))
for event in pygame.event.get():
# 判斷事件是否是退出事件,是則退出
if event.type == pygame.QUIT:
# 先退出pygame窗口,再退出程序
pygame.quit()
sys.exit()
pygame.display.flip()

游戲邏輯
實(shí)現(xiàn)玩家類
玩家應(yīng)該包括以下屬性:位置、角色大小、分?jǐn)?shù)等,還應(yīng)該有移動(dòng)位置move的方法,由于在此玩家控制的是一只兔子,玩法是吃月餅,所以把分?jǐn)?shù)換為重量。
class Rabbit:
"""
玩家兔子類
"""
def __init__(self, top, left, height, width):
# 初始位置及大小
self.top = top
self.left = left
self.height = height
self.width = width
# 游戲人物的初始位置
self.rect = pygame.Rect(self.left, self.top, self.width, self.height)
self.player_image = pygame.image.load('兔子.png')
self.player_stretched_image = pygame.transform.scale(self.player_image, (height, width))
# 控制移動(dòng)變量
self.move_left = False
self.move_right = False
self.move_up = False
self.move_down = False
# 每次移動(dòng)的大小
self.MOVESPEED = 5
# 重量
self.weight = 5
def move(self):
"""
控制移動(dòng)
:return:
"""
if self.move_down and self.rect.bottom < height:
self.rect.top += self.MOVESPEED
self.rect.bottom += self.MOVESPEED
if self.move_up and self.rect.top > 0:
self.rect.top -= self.MOVESPEED
self.rect.bottom -= self.MOVESPEED
if self.move_left and self.rect.left > 0:
self.rect.left -= self.MOVESPEED
self.rect.right -= self.MOVESPEED
if self.move_right and self.rect.right < width:
self.rect.left += self.MOVESPEED
self.rect.right += self.MOVESPEED
實(shí)現(xiàn)月餅類
月餅包括月餅的位置大小,及月餅的圖像,月餅的圖像在已有的圖像中隨機(jī)選擇。
class MoonCake:
"""
月餅類
"""
def __init__(self):
# 位置及大小
self.rect = pygame.Rect(random.randint(0, 750), random.randint(0, 750), 20, 20)
# 圖像
self.moon_cake_image = pygame.image.load("./月餅/月餅{}.png".format(random.randint(1, 8)))
交互邏輯
主要在游戲窗口內(nèi)生成并顯示玩家兔子和月餅,然后監(jiān)聽鍵盤事件,監(jiān)聽"wsad"或者"↑↓←→"鍵,來(lái)控制兔子上下左右的進(jìn)行移動(dòng),再實(shí)現(xiàn)碰撞檢測(cè)來(lái)驗(yàn)證兔子是否吃到月餅,吃到月餅則重量增加。運(yùn)行過(guò)程中也會(huì)不斷判斷月餅的數(shù)量,并不斷增加。
def game_run():
global width
global height
# 是否結(jié)束
end = False
# 創(chuàng)建時(shí)鐘對(duì)象 (可以控制游戲循環(huán)頻率)
clock = pygame.time.Clock()
# 月餅計(jì)數(shù)器
moon_cake_limit = 20
player = None
if not player:
player = Rabbit(300, 100, 64, 64)
moon_cakes = []
for i in range(20):
moon_cake = MoonCake()
moon_cakes.append(moon_cake)
# 游戲循環(huán)
while True and not end:
# 給屏幕填充顏色
windows.fill((204, 204, 255))
# 監(jiān)聽鍵盤事件
key_pressed = pygame.key.get_pressed()
if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]:
player.move_right = False
player.move_left = True
if key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]:
player.move_left = False
player.move_right = True
if key_pressed[pygame.K_w] or key_pressed[pygame.K_UP]:
player.move_down = False
player.move_up = True
if key_pressed[pygame.K_s] or key_pressed[pygame.K_DOWN]:
player.move_up = False
player.move_down = True
player.move()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYUP:
if event.key == K_ESCAPE:
pygame.quit()
sys.exit()
if event.key == K_LEFT or event.key == K_a:
player.move_left = False
if event.key == K_RIGHT or event.key == K_d:
player.move_right = False
if event.key == K_UP or event.key == K_w:
player.move_up = False
if event.key == K_DOWN or event.key == K_s:
player.move_down = False
# 月餅不足20時(shí)生成新的月餅
if len(moon_cakes) < moon_cake_limit:
# 生成新的月餅
moon_cakes.append(MoonCake())
# 畫兔子
windows.blit(player.player_stretched_image, player.rect)
# 顯示兔子的重量
text = pygame.font.SysFont("microsoftyaheimicrosoftyaheiui", 30)
text_fmt = text.render("重量:{}斤!".format(player.weight), True, (255, 255, 255))
windows.blit(text_fmt, (0, 0))
# 畫月餅
for moon_cake in moon_cakes:
windows.blit(moon_cake.moon_cake_image, moon_cake.rect)
# 碰撞檢測(cè)
for moon_cake in moon_cakes:
if player.rect.colliderect(moon_cake.rect):
moon_cakes.remove(moon_cake)
# 吃到月餅兔子會(huì)變重
player.weight += 2
pygame.display.flip()
pygame.display.update()
# 通過(guò)時(shí)鐘對(duì)象指定循環(huán)頻率
clock.tick(40)
運(yùn)行如下:

突然發(fā)現(xiàn),這樣的話這個(gè)游戲永遠(yuǎn)不會(huì)結(jié)束,可以一直玩下去,上面我們說(shuō)了,兔子吃到月餅重量會(huì)增加,那我們?cè)黾右粋€(gè)機(jī)制:等兔子的重量大于100斤的時(shí)候,游戲結(jié)束,對(duì)!你沒有看錯(cuò)!,就是這么草率?。。?/p>
在碰撞檢測(cè)循環(huán)里加入以下邏輯:
if player.weight > 10:
end = True
while end:
# 游戲結(jié)束
windows.fill((204, 204, 255))
text = pygame.font.SysFont("microsoftyaheimicrosoftyaheiui", 50)
text_fmt1 = text.render("你的兔子撐死了!!".format(player.weight), True, (255, 255, 255))
text_fmt2 = text.render("game over!".format(player.weight), True, (255, 255, 255))
windows.blit(text_fmt1, (200, 200))
windows.blit(text_fmt2, (260, 300))
clock.tick(40)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 按任意鍵繼續(xù)
if event.type == pygame.KEYDOWN:
end = False
# 重新生成玩家兔子及月餅
player = Rabbit(random.randint(0, 750), random.randint(0, 750), 64, 64)
moon_cakes.clear()
for i in range(20):
moon_cake = MoonCake()
moon_cakes.append(moon_cake)
pygame.display.flip()
pygame.display.update()
為了方便調(diào)試,改成了兔子重量大于10斤,即結(jié)束。
運(yùn)行如下:

完成!感謝閱讀,提前祝大家中秋快樂!??!
總結(jié)
到此這篇關(guān)于基于python pygame實(shí)現(xiàn)的兔子吃月餅小游戲的文章就介紹到這了,更多相關(guān)pygame兔子吃月餅小游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在pycharm中使用pipenv創(chuàng)建虛擬環(huán)境和安裝django的詳細(xì)教程
這篇文章主要介紹了在pycharm中使用pipenv來(lái)創(chuàng)建虛擬環(huán)境和安裝django的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
利用Python實(shí)現(xiàn)簡(jiǎn)單的相似圖片搜索的教程
這篇文章主要介紹了利用Python實(shí)現(xiàn)簡(jiǎn)單的相似圖片搜索的教程,文中的示例主要在一個(gè)圖片指紋數(shù)據(jù)庫(kù)中實(shí)現(xiàn),需要的朋友可以參考下2015-04-04
分析用Python腳本關(guān)閉文件操作的機(jī)制
這篇文章主要介紹了分析用Python腳本關(guān)閉文件操作的機(jī)制,作者分Python2.x版本和3.x版本兩種情況進(jìn)行了闡述,需要的朋友可以參考下2015-06-06
Python編程實(shí)現(xiàn)刪除VC臨時(shí)文件及Debug目錄的方法
這篇文章主要介紹了Python編程實(shí)現(xiàn)刪除VC臨時(shí)文件及Debug目錄的方法,涉及Python針對(duì)文件與目錄的遍歷、刪除等相關(guān)操作技巧,需要的朋友可以參考下2017-03-03
python 字典(dict)遍歷的四種方法性能測(cè)試報(bào)告
本文主要是針對(duì)Python的字典dict遍歷的4種方法進(jìn)行了性能測(cè)試,以便分析得出效率最高的一種方法2014-06-06
Python中的數(shù)據(jù)標(biāo)準(zhǔn)化與反標(biāo)準(zhǔn)化全面指南
在數(shù)據(jù)處理和機(jī)器學(xué)習(xí)中,數(shù)據(jù)標(biāo)準(zhǔn)化是一項(xiàng)至關(guān)重要的預(yù)處理步驟,標(biāo)準(zhǔn)化能夠?qū)⒉煌叨群头秶臄?shù)據(jù)轉(zhuǎn)換為相同的標(biāo)準(zhǔn),有助于提高模型的性能和穩(wěn)定性,Python提供了多種庫(kù)和函數(shù)來(lái)執(zhí)行數(shù)據(jù)標(biāo)準(zhǔn)化和反標(biāo)準(zhǔn)化,如Scikit-learn和TensorFlow2024-01-01
使用Python實(shí)現(xiàn)MapReduce的示例代碼
MapReduce是一個(gè)用于大規(guī)模數(shù)據(jù)處理的分布式計(jì)算模型,最初由Google工程師設(shè)計(jì)并實(shí)現(xiàn)的,Google已經(jīng)將完整的MapReduce論文公開發(fā)布了,本文給大家介紹了使用Python實(shí)現(xiàn)MapReduce的示例代碼,需要的朋友可以參考下2024-05-05
Python Django請(qǐng)求和響應(yīng)對(duì)象詳解
這篇文章主要給大家介紹了關(guān)于django的請(qǐng)求和響應(yīng)對(duì)象,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11
Python爬蟲beautifulsoup4常用的解析方法總結(jié)
今天小編就為大家分享一篇關(guān)于Python爬蟲beautifulsoup4常用的解析方法總結(jié),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02

