利用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做一个接球的小游戏相关推荐

  1. python推箱子小游戏_小伙利用Python自制一个推箱子小游戏!

    原标题:小伙利用Python自制一个推箱子小游戏! 导语 月初更波python制作小游戏系列吧用python写了个推箱子小游戏,在这里分享给大家,让我们愉快地开始吧 小伙利用Python自制一个推箱子 ...

  2. 用 typescript 做一个贪吃蛇小游戏

    typescript 做一个贪吃蛇小游戏 搭建环境 创建 tscofig.json 文件 配置如下 {"compilerOptions": {"target": ...

  3. 用Python代码做一个简单数字小游戏

    #作者是一个十三岁的小男孩. 编辑工具 电脑Python 需要模块 random #今日用代码做一个猜数小游戏 #话不多说,上代码!!! import random number = random.r ...

  4. Easyx图形库+C++做一个贪吃蛇小游戏 数据结构课程设计

    Easyx图形库+C++做一个贪吃蛇小游戏 数据结构课程设计 程序界面 ① 游戏开始界面(如下图): 显示游戏标题,提供"开始游戏"."游戏模式"和" ...

  5. html做的小游戏,用Html做一个“快乐鸟”小游戏

    入门学习前端的时候做了这么一个简单的小游戏,为了将自己所学到的知识运用起来. 这里可以看出还是有BUG的,死亡动画不是在死亡的瞬间触发 做这个小游戏用到了: html css jQuery 然后这个小 ...

  6. android做一个坦克大战小游戏_一个 ECharts 做的猜数小游戏

    大概 1 年多之前,一位老同学找到我,问能不能帮他做一个非常简单的猜数字游戏,需求是这样的: 在 1 到 100 的整数里,随机选一个数字,让小朋友们猜: 如果猜错了,告知小朋友猜大了还是猜小了: 如 ...

  7. 熬了三个大夜利用Python开发一个炸金花小游戏,注意别玩上瘾了~~(附完整源码)

    大家好,我是你们的好朋友王老师~ 众所周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌, ...

  8. 利用UIDynamicAnimator做弹珠弹跳小游戏

    本来想多了解了解`CMMotionManager`手机的陀螺仪的,并且用陀螺仪做了一个类似于手机的桌面的动态桌面,其实就是用陀螺仪的重力变化将图片位置稍微移动移动即可.后来接触的越多了解的东西越多,毕 ...

  9. 【Python】使用Pygame做一个Flappy bird小游戏(二)

    需要图片素材,音乐素材的朋友可以到我公众号[拇指笔记]后台回复"FPB"自取 做一个Flappy bird游戏的第二步就是按键检测.Flappy bird只需要用一个按键控制小鸟的 ...

最新文章

  1. 游戏编程入门之碰撞检测
  2. 浅谈2D游戏设计模式--游戏剧情设计(1)
  3. 关于最长公共子序列的执行过程
  4. movavi video suite2020中文版
  5. u-boot内核启动分析
  6. 牛客网暑期ACM多校训练营(第三场)A - PAXM Team(01背包)
  7. [转]软件测试演义——中高级系列(序)
  8. date转timestamp格式_技术分享 | MySQL:timestamp 时区转换导致 CPU %sys 高的问题
  9. 在Eclipse中如何快速的计算代码量
  10. “此网页上的某个 Web 部件或 Web 表单控件无法显示或导入。找不到该类型,或该类型未注册为安全类型。”
  11. Markdown Katex 集合相关符号
  12. 如何快速删除微博下拉词
  13. 嘀嗒APP打车体验记
  14. SWR:最具潜力的 React Hooks 数据请求库
  15. GUI自动化 - 识图定位
  16. ubuntu conf误删除的问题
  17. SOI round1 题解
  18. 13、撤回(撤销)、驳回(退回)、作废(终止)、挂起(中止)
  19. fitbit android app,Fitbitapp下载_Fitbit安卓版下载[生活服务]-下载之家
  20. 常用搜索引擎 (转)

热门文章

  1. 深圳电信isp劫持www.google-analytics.com的ga.js来弹出广告窗口分析
  2. 《惢客创业日记》2019.01.21(周一)你还记得米卢吗?
  3. 许奔创新社-第25问:创新者的刻意练习怎么做?
  4. 三分钟告诉你软件测试工程师到底是不是程序员?读完你就懂了!
  5. 计算机应用基ata,《计算机应用基》知识宝典.doc
  6. bzoj3785--骑士游戏--有“环”的动态规划
  7. 和老板比,员工弱爆了
  8. 【转】unity 的 MonoDevelop 在Windows下显示中文不出现乱码
  9. python使用matplotlib可视化、自定义设置X轴刻度标签字体的大小( setting axis ticks size in matplotlib x axis)
  10. 解决PHP与mysql连接时,报Fatal error: Uncaught Error: Call to undefined function mysql_connect()错误