利用pgzero做一个接球的小游戏
生活随笔
收集整理的這篇文章主要介紹了
利用pgzero做一个接球的小游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
利用pgzero做一個接球的小游戲
說明
pgzero為python的一個用于游戲制作的庫,它基于pygame模塊
可用如下命令去安裝
pip install pygame pip install pgzero接下來我們就開始寫代碼了
制作
參數
新建一個define.py的文件,定義一系列常量
#窗口標題 WINDOW_TITLE = "Don't Drop It" #窗口(寬,高) WINDOW_SIZE = (800,600) #背景顏色 WINDOW_BACKGROUNT_COLOR = 'white'圖形
我們新建一個名為actors.py的文件
并導入模塊
import pgzrun import pygame.rect import define import random小球類
建立一個填充顏色的圓形圖形的類(小球)
class Ball:def __init__(self):#球的初始位置self.init_pos = (define.WINDOW_SIZE[0]//2,define.WINDOW_SIZE[1]//2)#球的位置self.x,self.y = self.init_pos#球的半徑self.r = 20#球的顏色self.color = 'blue'#球的速度self.speed_x = random.sample([4,-4,-4],1)[0]self.speed_y = 4#繪制def show(self,surface):surface.draw.filled_circle((self.x,self.y),self.r,self.color)#動畫def action(self):#移動self.y = self.y + self.speed_yself.x = self.x+self.speed_x#當球觸碰邊界if self.y >= define.WINDOW_SIZE[1]-self.r or self.y <= self.r:self.speed_y = -self.speed_yif self.x >= define.WINDOW_SIZE[0]-self.r or self.x<=self.r:self.speed_x = -self.speed_x#碰撞改變方向def changeDirect(self):lst_x = [1,-1,-self.speed_x,self.speed_x,5,-5,-self.speed_x,self.speed_x,5,-5]ra_num = random.randint(0,len(lst_x)-1)self.speed_x = lst_x[ra_num]lst_y = [-3,-4,-5,-3,-4]ra_num = random.randint(0, len(lst_y) - 1)self.speed_y = lst_y[ra_num]木板類
玩家控制的木板的類
class Bar:def __init__(self):#寬度和高度self.width = define.WINDOW_SIZE[0]/6self.height = define.WINDOW_SIZE[1]/30#初始位置self.init_pos = (define.WINDOW_SIZE[0]//2,define.WINDOW_SIZE[1]*0.7)self.x = self.init_pos[0]#顏色self.color = 'red'#繪制def show(self,surface):if self.x >= define.WINDOW_SIZE[0]-self.width:self.x = define.WINDOW_SIZE[0]-self.widthif self.x<=0:self.x = 0box = pygame.rect.Rect((self.x,self.init_pos[1]),(self.width,self.height))surface.draw.filled_rect(box,self.color)主程序
游戲所用的圖形已經定義了,接下來該利用這些圖形進行一系列的交互了
首先導入模塊
import pgzrun import pygame,sys import define import actors from tkinter import messagebox將我們能定義的圖形對象實例化
#創建游戲對象 ball = actors.Ball() bar = actors.Bar()設置窗口大小
TITLE = define.WINDOW_TITLE WIDTH, HEIGHT = define.WINDOW_SIZE碰撞檢測,此處我們自己來完成碰撞檢測
#碰撞檢測 def actorsAcol():if ball.y == bar.init_pos[1] and bar.x <= ball.x and ball.x<=bar.x+bar.width:ball.changeDirect()判斷游戲結束
#判斷游戲結束 def judgeGameOver():if ball.y+ball.r*2 >= define.WINDOW_SIZE[1]:pygame.quit()messagebox.showinfo('GameOver','GameOver')sys.exit()下面的函數為pgzrun預留出的接口的,我們只需寫函數的具體實現即可,無需手動調用
繪制圖形
#pgzurn繪制函數,無需手動調用,只需定義即可(名稱必須為draw) def draw():screen.fill(define.WINDOW_BACKGROUNT_COLOR)ball.show(screen)bar.show(screen)刷新幀
#pgzurn刷新函數 def update():ball.action()actorsAcol()judgeGameOver()獲取鼠標位置傳給 bar對象
#pgzurn獲取鼠標位置 def on_mouse_move(pos):bar.x = pos[0]-bar.width//2程序入口
pgzrun.go()注意:pgzrun.go()不能與if __name__ == '__main__':同時使用,否則會創建窗口失敗,至于原因我也不知道為什么,可能跟這個模塊的實現方式有關
運行
- 主窗口
- 游戲結束
擴展
這個游戲還可以添加障礙物類和分數結算功能,其實現原理與碰撞檢測跟Bar類相似,這里不過多敘述了
開源
傳送門:Github
總結
以上是生活随笔為你收集整理的利用pgzero做一个接球的小游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php八字喜用神实现博客,八字中实例教你
- 下一篇: GeneXus学习记录——Transac