用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赋值操作方法分享
Mar 23 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
Python中的TCP socket写法示例
May 11 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
python3使用flask编写注册post接口的方法
Dec 28 Python
pandas 对日期类型数据的处理方法详解
Aug 08 Python
python打包成so文件过程解析
Sep 28 Python
Python如何实现强制数据类型转换
Nov 22 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
Apr 24 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 Python
Pandas 稀疏数据结构的实现
Jul 25 Python
python 中的jieba分词库
Nov 23 Python
python urllib库的使用详解
Apr 13 #Python
用Python将库打包发布到pypi
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
You might like
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
php+redis实现多台服务器内网存储session并读取示例
2017/01/12 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
最好用的Bootstrap fileinput.js文件上传组件
2016/12/12 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
微信小程序用canvas画图并分享
2020/03/09 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
深入理解Django的中间件middleware
2018/03/14 Python
python实现弹窗祝福效果
2019/04/07 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
3种python调用其他脚本的方法
2020/01/06 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
什么是View State?
2013/01/27 面试题
工程造价自荐信
2013/10/09 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
九一八事变演讲稿
2014/09/05 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
python 字典和列表嵌套用法详解
2021/06/29 Python
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫
使用MybatisPlus打印sql语句
2022/04/22 SQL Server