基於python pygame實現的兔子吃月餅小遊戲
中秋佳節就快來臨,給各位大佬整個兔子吃月餅的小遊戲助助興,廢話不多說,開整。
小遊戲規則簡介
玩傢通過”wsad”或者”↑↓←→”鍵控制兔子移動,使得兔子可以吃到更多的月餅,月餅一旦生成之後位置不會變,也不會消失,就等著兔子去吃,就是這麼簡單。但是吃瞭月餅會變重,重到一定程度會有想不到的效果。
實現
使用Python的pygame模塊開發,pygame是用來開發遊戲軟件的Python第三方庫,基於SDL庫的基礎上開發。可以創建功能豐富的遊戲和多媒體程序,用它來開發小遊戲非常適合。
初始化遊戲窗口
import sys import pygame width = 800 height = 800 # 初始化所有pygame模塊 pygame.init() # 創建遊戲主窗口 width * height windows = pygame.display.set_mode((width, height)) pygame.display.set_caption('兔子吃月餅!!') # 遊戲循環 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()
遊戲邏輯
實現玩傢類
玩傢應該包括以下屬性:位置、角色大小、分數等,還應該有移動位置move的方法,由於在此玩傢控制的是一隻兔子,玩法是吃月餅,所以把分數換為重量。
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)) # 控制移動變量 self.move_left = False self.move_right = False self.move_up = False self.move_down = False # 每次移動的大小 self.MOVESPEED = 5 # 重量 self.weight = 5 def move(self): """ 控制移動 :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
實現月餅類
月餅包括月餅的位置大小,及月餅的圖像,月餅的圖像在已有的圖像中隨機選擇。
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)))
交互邏輯
主要在遊戲窗口內生成並顯示玩傢兔子和月餅,然後監聽鍵盤事件,監聽”wsad”或者”↑↓←→”鍵,來控制兔子上下左右的進行移動,再實現碰撞檢測來驗證兔子是否吃到月餅,吃到月餅則重量增加。運行過程中也會不斷判斷月餅的數量,並不斷增加。
def game_run(): global width global height # 是否結束 end = False # 創建時鐘對象 (可以控制遊戲循環頻率) clock = pygame.time.Clock() # 月餅計數器 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) # 遊戲循環 while True and not end: # 給屏幕填充顏色 windows.fill((204, 204, 255)) # 監聽鍵盤事件 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時生成新的月餅 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) # 碰撞檢測 for moon_cake in moon_cakes: if player.rect.colliderect(moon_cake.rect): moon_cakes.remove(moon_cake) # 吃到月餅兔子會變重 player.weight += 2 pygame.display.flip() pygame.display.update() # 通過時鐘對象指定循環頻率 clock.tick(40)
運行如下:
突然發現,這樣的話這個遊戲永遠不會結束,可以一直玩下去,上面我們說瞭,兔子吃到月餅重量會增加,那我們增加一個機制:等兔子的重量大於100斤的時候,遊戲結束,對!你沒有看錯!,就是這麼草率!!!
在碰撞檢測循環裡加入以下邏輯:
if player.weight > 10: end = True while end: # 遊戲結束 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() # 按任意鍵繼續 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()
為瞭方便調試,改成瞭兔子重量大於10斤,即結束。
運行如下:
完成!感謝閱讀,提前祝大傢中秋快樂!!!
總結
到此這篇關於基於python pygame實現的兔子吃月餅小遊戲的文章就介紹到這瞭,更多相關pygame兔子吃月餅小遊戲內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python pygame 憤怒的小鳥遊戲示例代碼
- Pygame Rect區域位置的使用(圖文)
- Python Pygame中精靈和碰撞檢測詳解
- Pygame遊戲開發之太空射擊實戰敵人精靈篇
- 教你如何在Pygame 中移動你的遊戲角色