相信大家在初中电脑课上都偷偷玩过 Flash 游戏--是男人就坚持 100 秒,在游戏中无数的小球随机运动,玩家用鼠标控制大球,当大球碰撞到小球后,游戏结束,显示坚持的时间。今天我们一起来开发这个小游戏吧。

步骤分布:

  1. 设置屏幕大小和标题
  2. 小球绘制、移动
  3. 大球绘制、鼠标控制大球
  4. 大球碰撞到小球后游戏结束

设置屏幕大小和标题

import pygameW = 600
H = 500# 初始化pygame模块
pygame.init()
# 设置窗口大小
screen = pygame.display.set_mode((W,H))
# 设置窗口标题
pygame.display.set_caption('是男人就坚持100秒')
复制代码

绘制小球、移动

小球是圆形的,圆的半径决定了小球的大小并且在小球移动的时它的 X 坐标和 Y 坐标一直时在变动的,所以设置 X 坐标、Y 坐标、X 方向移动速度、Y 方向移动速度变量。小球每次移动的坐标都是 X 坐标 + X 方向移动速度、Y 坐标 + Y 方向移动速度。time.sleep(0.001) 可以调整小球的移动的时间,时间约大移动越慢。当小球碰到左右边界的时候需要调整 X 方向移动速度、Y 方向移动速度为负的

class Ball:x = None  # x坐标y = None  # y坐标speed_x = None  # x方向移动的速度speed_y = None  # y方向移动的速度radius = None  # 小半径color = None  # 颜色def __init__(self, x, y, speed_x, speed_y, radius, color):"""初始化:param x: X坐标:param y: Y坐标:param speed_x: X轴方向速度:param speed_y: Y轴方向速度:param radius: 半径:param color: 颜色"""self.x = xself.y = yself.speed_x = speed_xself.speed_y = speed_yself.radius = radiusself.color = colordef draw(self, screen):"""绘制小球:param screen: 窗口:return:"""pygame.draw.circle(screen, self.color, [self.x, self.y], self.radius)def move(self, screen):"""小球移动:param screen: 窗口:return:"""self.x += self.speed_xself.y += self.speed_y# 左右边界if self.x > W - self.radius or self.x < self.radius:self.speed_x = -self.speed_y# 上下边界if self.y > H - self.radius or self.y < self.radius:self.vy = -self.vy# 移动频率time.sleep(0.001)self.draw(screen)balls = []
def create_ball(screen):"""创建小球:param screen::return:"""x = random.randint(0, W)y = random.randint(0, H)speed_x = random.randint(-5, 5)speed_y = random.randint(-5, 5)r = 3color = 'white'b = Ball(x, y, speed_x, speed_y, r, color)balls.append(b)b.draw(screen)复制代码

大球的绘制和鼠标控制大球

大球主要的属性有半径、颜色,移动的速度和方向都是跟随鼠标运动的,捕获鼠标的位置设置大球的 X、Y 坐标

class Player:radius = Nonecolor = Nonex = 1000y = 1000def __init__(self, radius, color):"""初始化:param radius: 半径:param color: 颜色"""self.radius = radiusself.color = colordef move(self, screen):"""大球移动:return:"""# 鼠标检测if pygame.mouse.get_focused():# 获取光标位置,x, y = pygame.mouse.get_pos()mouse = pygame.mouse.get_pressed()pygame.draw.circle(screen, self.color, [x, y], self.radius)self.x = xself.y = y
复制代码

大球碰撞到小球后游戏结束

当大球碰撞到小球后游戏就结束了,计算大球的坐标减去小球的坐标小于两球的半径之和就表示它们碰撞了

# 小球每次移动后计算碰撞结果
for ball in balls:ball.move(screen)if abs(p.x - ball.x) < 13 and abs(p.y - ball.y) < 13:is_loop = False #结束程序循环标志break
复制代码

显示 GAME OVER 字样和游戏的时间

def show_text(screen, text, pos, color, font_bold=False, font_size=18, font_italic=False):"""显示文字:param screen: 窗口:param text: 文字:param pos: 坐标:param color: 颜色:param font_bold: 是否粗体:param font_size: 大小:param font_italic: 是否斜体:return:"""cur_font = pygame.font.SysFont('Courier', font_size)cur_font.set_bold(font_bold)cur_font.set_italic(font_italic)text_fmt = cur_font.render(text, 1, color)screen.blit(text_fmt, pos)show_text(screen, "Game over!", (120, 180), "green", True, 60)
show_text(screen, text_time, (220, 270), "green", True, 30)
复制代码

游戏效果

总结

本文使用了 Python 是实现了一个简单的是男人就坚持 100 秒的小游戏,有兴趣的小伙伴可以对游戏进一步扩展,比如过几秒钟加几个小球等等。

Python游戏开发pygame模块,Python实现球球碰撞小游戏相关推荐

  1. 【Cocos Creator游戏开发教程】仿微信趣味画赛车小游戏(三)代码实现

    [Cocos Creator游戏开发教程]仿微信趣味画赛车小游戏(一)前言,界面UI [Cocos Creator游戏开发教程]仿微信趣味画赛车小游戏(二)物理刚体关节 项目地址已放到 github ...

  2. 【Cocos Creator游戏开发教程】仿微信趣味画赛车小游戏(一)前言,界面UI

    前言 这个是我去年3月份在简书上发布的,不玩简书了,就迁到CSDN吧-- 最近遇到一款游戏,感觉玩起来还行,于是顺带就用来熟悉一下Cocos Creator(太久没用). 项目地址已放到 github ...

  3. 【Cocos Creator游戏开发教程】仿微信趣味画赛车小游戏(二)物理刚体关节

    [Cocos Creator游戏开发教程]仿微信趣味画赛车小游戏(一)前言,界面UI 项目地址已放到 github 上,需要的小伙伴可自行下载. 这节我们讲一下车子的物理刚体关节. 我在项目中添加了一 ...

  4. html游戏开发开题报告,基于H5 网页的打豆豆小游戏的设计与实现毕业论文+开题报告+设计源码...

    摘  要 网页游戏是一个用现实包装的快感反馈引擎,它的根本目的始终是让玩家能够得到舒畅的体验为了娱乐心神,所以开发出大家喜欢的,高品质的休闲游戏会受到人们的普遍欢迎.打豆豆小游戏这款游戏主要是利用cs ...

  5. Python游戏开发pygame模块,Python实现吃豆人,儿时的回忆

    老规矩,先上效果图 这是一个吃豆人的小游戏.我们8090后这一代人肯定会碰到过.黄点是我们自己,红点就是怪物们.这是最原始版的电子游戏. 然后我们可以在随便一个地方新建一个游戏代码,利用这个包的代码, ...

  6. 【项目】游戏开发期末大作业 之 基于Java的小游戏 “大鱼吃小鱼“ (代码素材齐全)

    1.EatFish游戏开发过程 1.游戏窗口创建 2.添加背景图片 3.启动封面 4.启动页面的点击事件 5.游戏开始的背景添加 6.双缓存解决闪屏问题 7.敌方鱼类的生成 8.我方鱼的生成 9.我方 ...

  7. 【java游戏开发】教你用java做出扫雷小游戏

    扫雷是一款大众类的益智小游戏.根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输. 本课程详细讲解一个扫雷游戏的开发过程.只要90分钟就可以完成一个你自己亲手开发出来的Java ...

  8. html 转盘游戏开发,【scratch】简单的大转盘小游戏

    彩色大转盘 大家是否在各种饭店.商家.网页上看到过大转盘的抽奖活动装置? 对就是这种!!!有各种奖品以及充斥着整个版面50%+的谢谢参与. 我们的小码农也做了一款简单的并且没有(大概)谢谢参与的大转盘 ...

  9. python语音开发库-各种 Python 库/模块/工具

    1.1 字符串处理 re 正则表达式的标准库. StringIO / cStringIO 以读写文件的方式来操作字符串(有点类似于内存文件). cStringIO 是 C 语言实现的,提供高性能:而 ...

最新文章

  1. EyeDropper 开发实践
  2. java变量数据类型_Java——变量和数据类型
  3. Mac+docker+flask
  4. VTK:Texture之TextureThreshold
  5. Can not create a Path from an empty string解决
  6. [2020-11-23 contest]图(dfs剪枝),劫富济贫(字典树),小A的树(树形DP),游戏(贪心/斜率优化)
  7. LeetCode 339. 嵌套列表权重和(DFS)
  8. cocos2d 嵌入网页_在 cocos2d-x 中嵌入浏览器
  9. 自动化刷EOS资金盘(类Fomo3D)游戏
  10. 服务器网络连接详细信息,Windows10怎么样查看网络连接详细信息
  11. Poisson 分布
  12. 讯时后台编辑器在IE8下无法打开窗口的解决办法
  13. 学习银行业务----存款
  14. The last dimension of the inputs to `Dense` should be defined. Found `None`.
  15. [python] 使用Jieba工具中文分词及文本聚类概念
  16. Flutter 2(1),还在等机会
  17. 【JY|土木】失稳你过来,我们谈谈吧。
  18. 数据结构与算法之美笔记——基础篇(中):树,二叉树,二叉查找树,平衡二叉查找树,红黑树,递归树,堆
  19. Gradle构建项目深入浅出
  20. python随机出现外星人飞船_python外星人入侵游戏如何改变飞船的大小

热门文章

  1. 删除 此电脑 文件夹
  2. pandas使用insert函数将dataframe特定数据列移动到第一列实战:Move a Column to First Position
  3. R语言构建xgboost模型:使用xgboost构建广义线性模型(GLM):使用gblinear算法拟合线性模型并配置L1和L2正则化
  4. python使用箱图法和业务规则进行异常数据处理并检查预测使用的数据特征是否有字段缺失的情况并补齐
  5. python代码实现堆排序
  6. 时间序列+截尾和拖尾
  7. SVD(奇异值分解)+NMF(非负矩阵分解)
  8. 影像组学视频学习笔记(27)-SimpleITK包介绍、Li‘s have a solution and plan.
  9. java里面怎么导入sql文件_java将SQL文件导入到数据库
  10. cmd进入Oracle的sql*plus