Python打地鼠游戏编程报告 打地鼠python游戏代码_Python打地鼠游戏编程报告

烟花三月下扬州,我想3月能下楼。虽然很多地方都已经开始慢慢的开放了,但是我怀念的胡辣汤,海底捞,还有烧鸡都没有开门。眼看宅在家,吃了睡睡了吃,肚子上的救生圈都出来了一层又一层。宅男的我都练出一身厨艺。买了理发工具已经可以兼职当“Tony”老师理发了。

想必大家已经窝在家里快发霉了吧,趁着时间充裕,我又重新捡起了之前学习的PyQt5。以前不是有一个打地鼠的游戏,这次用简单100多行代码写一个《消灭地鼠病毒》的小游戏,效果如下,废话少说先看视频!

视频镇楼



01

PyQt介绍及安装

PyQt5是基于Digia公司强大的图形程式框架Qt5的python接口,由一组python模块构成。PyQt5本身拥有超过620个类和6000函数及方法。在可以运行于多个平台,包括:Unix, Windows,and Mac OS。Python的gui中有三大框架,分别是PyQt、wxpython和tkinter,我个人偏爱于PyQt,因为PyQt是比较流行的一个 Tkinter 的替代品,功能非常强大,可以用Qt开发多美漂亮的界面,也就可以用PyQt开发多么漂亮的界面

安装PyQt

其实安装比较简单,只需在命令行输入pip install PyQt5,引入模块:

Python打地鼠游戏编程报告 打地鼠python游戏代码_新窗口_02



02

构建界面

构造窗口,添加图标和音乐,并以网格形式对控件进行布局

1).构造1个窗口

Python打地鼠游戏编程报告 打地鼠python游戏代码_Python_03

  • PyQt5应用必须创建一个应用(Application)对象;
  • sys.argv参数是一个来自命令行的参数列表,Top是窗口的类,setFixedSize设置窗口大小为900x600;
  • show()方法在屏幕上显示出widget;
  • sys.exit(app.exec_())调用主循环用于接收来自窗口触发的事件,并且转发他们到widget应用上处理

Python打地鼠游戏编程报告 打地鼠python游戏代码_Python打地鼠游戏编程报告_04

2).添加图标、名称及背景音乐

Python打地鼠游戏编程报告 打地鼠python游戏代码_网格布局_05

效果如下

Python打地鼠游戏编程报告 打地鼠python游戏代码_新窗口_06

3).构造网格布局,并将25张地洞图片填满5x5=25个网格

Python打地鼠游戏编程报告 打地鼠python游戏代码_新窗口_07

  • QgridLayout为网格布局,除了网格布局,PyQt5有绝对位置和布局类两种布局管理方式;
  • 其中布局管理又分为水平布局、垂直布局、网格布局、表单布局四种布局方法;
  • 每种方法都有其特点,这里不再展开,有兴趣的朋友可以研究一下,本次只采用网格布局;

首先创建QgridLayout的实例,然后循环构造25个virus类,最后通过addWidget()方法将25个virus类分别放入imagelayout实例中,其中每个virus都包含地洞图等信息

Python打地鼠游戏编程报告 打地鼠python游戏代码_新窗口_08

运行程序,效果如图

Python打地鼠游戏编程报告 打地鼠python游戏代码_Python打地鼠游戏编程报告_09

4)在右侧添加设置栏

大家可以发现,上述效果图布局比较稀疏,因为我留有空余,想在右边放置一列设置栏,包含开始游戏、消灭病毒数、逃跑病毒数以及剩余时间等信息。

首先构造1个新的窗口,并将其嵌入主窗体中:

Python打地鼠游戏编程报告 打地鼠python游戏代码_Python打地鼠游戏编程报告_10

创建QgridLayout的实例,然后构造新窗口,设置大小,将其添加到主窗体中,addWidget5个参数分别为要添加的新窗口、在第1行、第6列,占5行、1列,效果如下:

Python打地鼠游戏编程报告 打地鼠python游戏代码_网格布局_11

添加设置信息

Python打地鼠游戏编程报告 打地鼠python游戏代码_新窗口_12

用setText函数对各个标签进行命名,最后用addWidget将其放入新加的窗口中,其中“开始游戏”标签还绑定了gamestart函数,后续还会讲到,效果如下:

Python打地鼠游戏编程报告 打地鼠python游戏代码_新窗口_13



03

添加时间控件

为什么要添加时间控件呢?因为我们要设置一局游戏的时长、要设置病毒每次出现的时间间隔、要设置病毒停留的时间,PyQt5有现成的计时函数Qtimer,我们需要设置3个计时器。

Python打地鼠游戏编程报告 打地鼠python游戏代码_Python_14

共添加了全局计时、病毒随机出现计时、剩余时间计时共3个计时器,这3个计时器都在gamestart函数下启动

Python打地鼠游戏编程报告 打地鼠python游戏代码_新窗口_15

当点击“开始游戏”时,会启动gamestart函数,然后启动timer(全局)、virustimer(病毒出现间隔)、remainter(游戏剩余时间)3个计时器,同时,计时器会按照设置的时间循环定时启动绑定的函数。其中全局计时器绑定gameover函数

Python打地鼠游戏编程报告 打地鼠python游戏代码_Python_16

即30秒后会调用该函数,将结束游戏。

病毒出现计时器绑定virusactive函数

Python打地鼠游戏编程报告 打地鼠python游戏代码_新窗口_17

首先检测上个病毒在哪个位置出现,然后将该位置恢复为地洞图片,其中virus.flag(初始值为0,病毒出现后设置成1)是病毒出现在哪个框的标志;

后续会用于检测小锤是否砸到病毒。接着用random函数在25个地洞中随机选出下次病毒将会出现的位置,并将该位置的地洞图片替换为病毒出现的图片。

剩余时间计时器绑定remainTimeshow函数

Python打地鼠游戏编程报告 打地鼠python游戏代码_新窗口_18

每个1秒更新一下剩余时间,并用setText函数将更新内容投送到remaintimeText标签框,请大家注意,最下面一行是重新启动剩余时间计时器,这样就能达到循环的效果了。



04

添加提示框

为了避免游戏中不小心点了右上角的叉号而将游戏关闭,需要添加1个提示框

Python打地鼠游戏编程报告 打地鼠python游戏代码_Python打地鼠游戏编程报告_19

closeEvent代表窗口关闭时间,用QMessageBox.question函数进行消息提示,效果如下:

Python打地鼠游戏编程报告 打地鼠python游戏代码_网格布局_20



05

记分问题

经过上面的几个步骤,基本框架已经搭建完了,现在需要考虑如何消灭病毒和计分的问题了。

1).首先绑定1个鼠标事件,即鼠标点击时,将鼠标指针换成落下的小锤图片

Python打地鼠游戏编程报告 打地鼠python游戏代码_网格布局_21

mousePressEvent为鼠标点击函数,每次鼠标点击时该函数会启动,停留0.1秒,接着启动upTime计时器,该计时器绑定up函数

Python打地鼠游戏编程报告 打地鼠python游戏代码_Python_22

即0.1秒后鼠标指针由落下的小锤图片替换成抬起的锤子图片,这样就完成了1次敲击动作。最后构造1个kill函数,主要用于计分

Python打地鼠游戏编程报告 打地鼠python游戏代码_Python_23

之前说过,每个virus类都有其特征,那么我们就可以比对当前小锤砸到的virus类是否是病毒之前出现的那个virus类,通过什么来比较呢?

还记得前面说过的virus.flag吗?我们设置的每个virus的flag的初始值为0,当病毒出现在该virus类时,之前已将其设置成1,只需要看看当前小锤砸到的virus类的flag是否为1就可以判断小锤是否砸到病毒了,如果砸到则计1分。


到这里基本已经将游戏的整个编写过程讲解完毕,这只是1个非常基础的游戏,PyQt还可以制作很多更加高大上的游戏,感兴趣的朋友可以继续研究探索。