用Python写一个简易版弹球游戏


Posted in Python onApril 13, 2021

我们前面讲了几篇关于类的知识点,为了让大家更好的掌握类的概念,并灵活的运用这些知识,我写了一个有趣又好玩的弹球的游戏,一来可以把类的知识融会一下,二来加深对Python的兴趣.你会发现哎呀Python写小游戏还是蛮方便的,蛮有意思的~~

先看一下我们的最终效果图

用Python写一个简易版弹球游戏

我们分9步来讲解如何写这个小游戏

1.创建游戏的主界面

我们用Python的内置模块Tkinter来完成了,它是Python的标准GUI工具包,可以非常方便在制作GUI小工具,因为是跨平台的,可以方便的在win和linux下运行,我们用Tk里的canvas绘图功能来制作一个小游戏.先来把主界面画出来

用Python写一个简易版弹球游戏

(1).创建一个tk的实例

(2).然后给这个窗口取一个名字叫game

(3).通知窗口管理器调整布局大小,0,0表示不能被拉升

(4).创建一个长为400*500的界面,背景色为默认,边框为厚度为0

(5).通知窗口管理器注册组件

(6).刷新一下界面

2.创建一个Ball球的类

好主界面有了,我们就开始创建球

(1)首先我们创建一个Ball的类,这个类的初始化参数有两个:

一个canvas也就是画图用来画一个球,一个是color,表示球的颜色

(2)在类的初始化的函数里面

初始化canvas,

画一个实心的球并记录下它的id

创建球的默认在主界面上的位置,我们把它放屏幕中间

然后让球出现在主界面上:

用Python写一个简易版弹球游戏

用Python写一个简易版弹球游戏

3.我们让球向上动起来

刚才在Ball类里面有一个draw函数,我们现在在draw里面加点东西,让球向上运动

用Python写一个简易版弹球游戏

4.让球能回弹

(1).第三步我们球能向上运动,现在我们要让它能碰到墙壁反弹

我们刚才是把self.canvas.move(self.id,0,-1)写死0,-1,表示x坐标不动,y坐标不断的-1也就是球在向上运动

现在我们把这两个值设成两个变量self.x,self.y,当我们的球运动到上边界的时候,就把self.y加1,也就向下运行,

当运动到下边界的时候,就把self.y减1,表示向上运行

用Python写一个简易版弹球游戏

(2).那么如何判断球已经碰壁了,很简单,我们动态的去球的坐标[x1,y1,x2,y2],

x1,y1 表示top-left 左上角的坐标

x2,y2 表示bottom-right右下角的坐标

获取了球的坐标之后(它是一个list),判断一下pos[1]和pos[3]就可以了

用Python写一个简易版弹球游戏

5.增加球的运行方向

现在我们的球的运动方向是固定的,我们希望每次球的运动方向要随机,不然太low了,怎么做呢,很简单增加一个随机函数就可以了

在__init__()函数里面,我们改一下

self.x = 0

self.y = -1

变成:

starts=[-3,-2,-1,1,1,2,3]

random.shuffle(starts)

self.x=starts[0]#从list里面随机取一个

self.y=-3#-3表示y轴运动的速度

6.增加小木板

现在我们的球已经可以在界面上到处乱窜了,我们现在增加一个木板来打弹球

用Python写一个简易版弹球游戏

用Python写一个简易版弹球游戏

7.让木板可以移动

我们通过绑定一些键盘事件,让木板可以移动

增加2个函数,左移和右移,有同学会问evt是啥,不急下面会说.

def turn_left(self, evt):

self.x = -2

def turn_right(self, evt):

self.x = 2

在Paddle的初始化函数里面绑定两个键盘事件:

就是按键盘左键就是响应self.turn_left

就是按键盘右键就是响应self.turn_right

evt是向系统注册的事件

用Python写一个简易版弹球游戏

8.增加球和木板的碰撞

现在球也有了,木板也有了,而且可以左右挪动,现在最精彩的部分要上演了,就是增加球碰到木板之后反弹,那么如何判断球碰到木板了,简单我们只要在球的类里面增加一个函数来判断是否碰撞了

def draw(self):

--snip--

if self.hit_paddle(pos) == True:

self.y = -3

--snip--

用Python写一个简易版弹球游戏

9.判断当球运动到底部游戏结束

经过上面8步,游戏大体功能已经有了,那么如何判断游戏结束呢,我们设定只要球运动底部的时候(可以认为是球碰到了地面),游戏就失败了,加几行代码就搞定了.

class Ball():

def __init__(self,canvas,paddle,color):

--snip--

self.hit_bottom=False

def draw(self):

--snip--

if pos[3]>=self.canvas_height:#判断当球的下沿大于等于主界面的高度

self.hit_bottom=True

--snip--

paddle=Paddle(canvas,"blue")

ball=Ball(canvas,paddle,"red")

while 1:

if ball.hit_bottom==False and ball.paddle.started :

ball.draw()

paddle.draw()

tk.update_idletasks()

tk.update()

time.sleep(0.01)

用Python写一个简易版弹球游戏

源码大概100行实现了简单的功能,其实这个游戏还可以增加很多功能,比如记录分数,增加游戏开始和结束的提示,增加木板和球的种类,增加管卡和难度等等大家可以自己发挥一下, 写完很有成就感~~

到此这篇关于用Python写一个简易版弹球游戏的文章就介绍到这了,更多相关python写弹球游戏内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python函数式编程指南(四):生成器详解
Jun 24 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
浅析Git版本控制器使用
Dec 10 Python
Python简单定义与使用二叉树示例
May 11 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
Python OpenCV实现视频分帧
Jun 01 Python
django之状态保持-使用redis存储session的例子
Jul 28 Python
python自定义函数def的应用详解
Jun 03 Python
Python中猜拳游戏与猜筛子游戏的实现方法
Sep 04 Python
python利用paramiko实现交换机巡检的示例
Sep 22 Python
Python3获取cookie常用三种方案
Oct 05 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 Python
python urllib库的使用详解
Apr 13 #Python
用Python将库打包发布到pypi
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
You might like
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
看了就知道什么是JSON
2007/12/09 Javascript
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
javascript深入理解js闭包
2010/07/03 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
美国老牌主机服务商:iPage
2016/07/22 全球购物
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
介绍一下XMLHttpRequest对象
2012/02/12 面试题
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
代办出身证明书
2014/10/21 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
学校教学工作总结2015
2015/05/19 职场文书
小学毕业感言100字
2015/07/30 职场文书
大学军训心得体会800字
2016/01/11 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
Nginx禁止ip访问或非法域名访问
2022/04/07 Servers