日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用pgzero做一个接球的小游戏

發布時間:2023/12/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用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做一个接球的小游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。