需求

1,显示一个窗口。
2,我们要做到的功能有鼠标点击屏幕生成小球。
3,生成的小球大小随机,颜色随机,向随机方向移动,速度也随机。
4,大的球碰到小球时可以吃掉小球,吃掉后会变大。
5,球碰到边界会弹回去。

思路

思路很简单
1,这个游戏我们使用python的pygame,先生成一个带有背景颜色固定大小的窗口
2,建一个颜色类,用来生成随机颜色
3,建一个球类用于生成随机的各样小球
4,建主方法,调用颜色和球生成小游戏
5,打包

第一步 生成窗口

我们需要导入pygame模块,如果你用的是PyCharm的话点击下面这个代码,PyCharm会自动下载pygame模块

import pygame

如果你没用PyCharm的话就直接使用命令导入

pip install pygame

导入成功后我们建一个窗口对象

screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('大球吃小球')
screen.fill((224, 224, 224))
pygame.display.flip()
running = True
# 开启一个事件循环处理发生的事件
while running:# 从消息队列中获取事件并对事件进行处理for event in pygame.event.get():if event.type == pygame.QUIT:running = False

800和600是窗口的长宽,大球吃小球是窗口的标题,(224,224,224)代表窗口颜色是RGB格式的颜色表达式下面是用来监听事件的后面会用到,现在开始运行

if __name__=="__main__":main()


很好,现在第一步完成了

第二步 建一个颜色类

@unique
class Color(Enum):red = (255, 0, 0)@staticmethoddef random_color():"""获得随机颜色"""r = randint(0, 255)g = randint(0, 255)b = randint(0, 255)return r, g, b

颜色类,比较简单,生成三个随机值就是一个随机的颜色了,这也就是刚才上面说的RGB值

第三步 球类

球类复杂一些,需要传入位置坐标,半径,移动距离和颜色
还要有吃,移动,和生成三个方法。代码如下

class Ball():def __init__(self, x, y, reduis, sx, sy, color=Color.red):self._sy = syself._x = xself._y = yself._reduis = reduisself._sx = sxself._color = colorself._alive = Truedef move(self, screen):self._x += self._sxself._y += self._syif self._x - self._reduis <= 0 or self._x + self._reduis >= screen.get_width():self._sx = -self._sxif self._y - self._reduis <= 0 or self._y + self._reduis >= screen.get_height():self._sy = -self._sydef eat(self, other):if self._alive and other._alive and other != self:dx = self._x - other._xdy = self._y - other._ydistance = sqrt(dx ** 2 + dy ** 2)print(distance)if distance < int(self._reduis) + int(other._reduis) and int(self._reduis) > int(other._reduis):other._alive = Falseself._reduis = self._reduis + int(other._reduis * 0.146)def draw(self, screen):pygame.draw.circle(screen, self._color, (self._x, self._y), self._reduis, 0)

移动和吃这两个方法的逻辑不难,我就不在这说了,不懂的可以在面评论或私信。关于属性在init里有个alive存活代表这小球是否存活的属性,需要大家注意
我就说下生成draw这个方法吧
circle这个方法的参数分别是screen窗口对象,颜色,球的坐标,球的半径,和是否填充

第四步 在主方法里调用并编写点击生成和反弹方法

代码如下:

    balls = [] #pygame.init()screen = pygame.display.set_mode((800, 600))pygame.display.set_caption('大球吃小球')running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:#x, y = event.pos#radius = randint(10, 100)#if x - radius < 0:#x = radius#if y - radius < 0:#y = radius#sx, sy = randint(-10, 10), randint(-10, 10)#color = Color.random_color()#ball = Ball(x, y, radius, sx, sy, color)## 将球添加到列表容器中balls.append(ball)#screen.fill((224, 224, 224))#for ball in balls:#if ball._alive:#ball.draw(screen)#else:#balls.remove(ball)#pygame.display.flip()pygame.time.delay(50)#for ball in balls:#ball.move(screen)## 检查球有没有吃到其他的球for other in balls:#ball.eat(other)#

我在更改代码的部分后面加了#,表示区分
首先我们声明一个balls用来做装球的容器,然后在事件监听部分加上对鼠标点击事件的监听ifx-radius是为了防止在界面边缘点击时生成的球超出边界,然后将生成的球的对象放入容器balls里遍历容器,判断是否存活,若存活则生成,若已死则移除容器。
将窗口设置为50毫秒刷新一次,最后再次遍历判断球有没有吃其他球,现在运行。
大家可以看到效果已经出来了,现在还差最后一步。打包

打包

打包工具我用的是Pyinstaller需要先安装一下

pip install Pyinstaller

然后打开pycharm底部的terminal面板输入

pyinstaller -F  xyx.py

回车就行了
如果没有pycharm的话就在命令窗口进入到项目目录下,再输入这个命令回车就行了,找到dist的exe双击就运行了

自学一周python做的一个小游戏《大球吃小球》相关推荐

  1. java编写游戏_java编写小游戏-大球吃小球

    游戏界面: 点击火箭开始游戏 点击Exit退出游戏 左上角显示当前成绩和历史最高分 退出自动保存最高成绩 代码获取 扫码关注微信公众号[程序猿声] 在后台回复[EBG]不包括[]即可获取. 玩法: 玩 ...

  2. JAVA编程实战之编写小游戏-大球吃小球(eat ball game)

    游戏界面: 点击火箭开始游戏 点击Exit退出游戏 左上角显示当前成绩和历史最高分 退出自动保存最高成绩 代码获取 扫码关注微信公众号[程序猿声] 在后台回复[EBG]不包括[]即可获取. 玩法: 玩 ...

  3. python入门学习记录之pygame实现简单动画游戏:大球吃小球

    引言: 文章python示例主要是跟着CSDN博客专家:骆昊来学习python开发的,有兴趣的可以学习一下 骆昊:<<https://blog.csdn.net/jackfrued> ...

  4. python游戏模块 - 26 小项目-坦克行动 / 大球吃小球

    1. 小项目 - 坦克行动 import pygame from sys import exit from enum import Enum, unique ​ """e ...

  5. 用Python做贪吃蛇小游戏

    用Python做贪吃蛇小游戏 简介 引言 游戏预览 结构图 代码框架图 代码讲解 main主函数-开始工作 show_start_info()欢迎进入游戏 running_game-让我们开始游戏吧 ...

  6. 黑白块游戏java代码_用java做的一个小游戏—黑白反斗棋(适合菜鸟)

    用Java做的一个小游戏,黑白反斗棋,我玩过了5*5和10*10的.是学习之后做的,不是自己原始开发的. import java.awt.Color; import java.awt.FlowLayo ...

  7. Python第三周习题集(一) (工资结算系统 抽象类 静态方法 贪吃蛇 分数的重写 五子棋 大球吃小球 )...

    # 工资结算系统 1. 部门经理 1.5万元/月 2. 程序员 工作时间 150元/小时 3.销售员 1200底薪,+ %5销售额的提成 # 给你员工,得出工资. 员工类,父类 下面3类子类.#我写的 ...

  8. python练习---大球吃小球游戏

    要求: 鼠标点击屏幕会自动产生不同大小的小球,小球会自动移动,碰到屏幕边界反弹回来,当不同大小的小球相遇在一起发生碰撞,大的小球会吃掉较小的小球,变得更大 代码: import pygame impo ...

  9. Python大球吃小球

    本小游戏采用了pygame模块 1.产生随机颜色的小球.2.小球具有移动.吃别的小球.绘制这3个方法.3.鼠标点击事件 上源码 // 大球吃小球 from enum import Enum, uniq ...

最新文章

  1. 深度学习目标检测模型全面综述:Faster R-CNN、R-FCN和SSD
  2. (web前端笔记)2020-12-23(ajax)
  3. 【视频】谷歌大佬30分钟让你入门机器学习(2019谷歌I/O资源分享)
  4. linux mysql dns_Linux下搭建DNS服务器及踩坑
  5. 计算机电路板工作原理,PCB电路板测试仪的组成及测试原理.
  6. 51nod 1412
  7. 解决Mac文件乱码问题
  8. LightTable:更改Julia代码字体和console中字体
  9. 王道考研系列 计算机考研 ——机试指南(第二版) 笔记(一)
  10. 使用UltraISO将苹果dmg镜像转换标准ISO镜像
  11. 中国火炬统计数据 2008-2021年
  12. 伺服控制的三环控制原理及整定仿真和Simulink模型
  13. headers信息修改
  14. 微软MSN博客申请使用全功略(转)
  15. 实时网速监测app_实时网速安卓下载_实时网速监测安卓app下载-XP软件园
  16. yiui易柚7 是Android什么版本,康佳YIUI易柚系统升级5.0版本
  17. kvm虚拟机扩展磁盘空间
  18. 2022-2028年中国红枣行业发展模式分析及市场分析预测报告
  19. 记录谷粒商城P90 商品发布关于[500] during [POST](null空指针)的坑
  20. symbian模拟器的修正

热门文章

  1. Camera 的曝光校正概述
  2. js动态生成的DOM绑定事件失效的问题
  3. 微信小程序开发(十二)富文本插件wxParse的使用
  4. 高斯滤波、均值滤波、savgol滤波python程序
  5. Arouter讲解4_Core,flutter游戏
  6. 登录IE时常出现闪退:Internet Explorert停止工作解决办法
  7. pwn - 格式化字符串攻击
  8. 凝心聚力,不负好时光——慧慧兔团建拓展之旅
  9. Python爬虫分析——B站UP主视频数据分析
  10. 资深HR告诉你,面试中你不知道的那些秘密!