最近在学习使用 Python 来完成一些小游戏,使用到的有 Pygame 和 PyQt5 等,根据网上前人的代码,整理了一个打地鼠的小游戏,今天也分享给大家,一起学习!
游戏画面
首先先进行游戏画面排版,
classTopWindow(QWidget):def__init__(self,parent=None):super().__init__(parent)self.virusnum=0self.setWindowTitle("消灭地鼠小游戏")self.setWindowIcon(QIcon(r'sucai/图标.jpg'))app=QApplication(sys.argv)Display=TopWindow()Display.setFixedSize(900,600)Display.show()sys.exit(app.exec_())
对于 PyQt5 来说,需要创建一个全局的 Application 对象,其参数是命令行参数列表,可以通过 setFixedSize 来设置游戏框的大小。
我们还设置了类变量 virusnum 作为地鼠个数计量
接下来我们创建一个地鼠类,把相关的地洞排布起来
classvirus(QPushButton):def__init__(self,parent=None):super().__init__(parent)self.setFixedSize(160,120)self.setStyleSheet("QPushButton{border-image: url(sucai/地洞2.png)}")self.upTime=QTimer()self.upTime.timeout.connect(self.up)
再创建25个地洞
foriinrange(25):exec("self.virus{0}=virus()".format(i))foriinrange(5):forjinrange(5):exec("self.imagelayout.addWidget(self.virus{0},{1},{2})".format(t,i,j))t+=1
此时我们程序的效果如下
设置工具栏
下面我们来为游戏页面添加必要的工具栏,比如开始按钮,游戏积分框等等
#右侧固定窗口内控件self.settingslayout=QGridLayout()#网格布局self.settingsWidget=QWidget()self.settingsWidget.setFixedSize(80,350)self.imagelayout.addWidget(self.settingsWidget,0,5,1,5)self.settingsWidget.setLayout(self.settingslayout)
之后再创建相关的按钮和输入框
self.startPushButton=QtWidgets.QPushButton(text="开始游戏",clicked=self.handle_play_button)self.startPushButton.setFixedSize(80,40)#self.startPushButton.clicked.connect(self.gamestart)#绑定信号self.textBrowser=QTextBrowser()self.textBrowser.setText('游戏未开始')self.textBrowser.setFixedSize(70,40)self.killBrowser=QTextBrowser()self.killBrowser.setText('消灭病毒数:0')self.killBrowser.setFixedSize(70,50)self.escapeBrowser=QTextBrowser()self.escapeBrowser.setText('逃离病毒数:0')self.escapeBrowser.setFixedSize(70,50)self.remaintimeText=QTextBrowser()self.remaintimeText.setText('剩余时间:\n30s')self.remaintimeText.setFixedSize(70,55)
在这里,对于开始按钮,采用了与其他按钮不同处理方式,当程序处于游戏中时,该按钮就变成“结束游戏”,所以我们来看看 handle_play_button
@QtCore.pyqtSlot()defhandle_play_button(self):btn=self.sender()ifbtnisnotNone:text=btn.text()iftext=="开始游戏":btn.setText("结束游戏")self.gamestart()else:btn.setText("开始游戏")self.gameover()
对于用到的 gamestart 和 gameover 两个函数,代码如下
defgamestart(self):score=0self.textBrowser.setText("正在游戏")self.timer.start(30000)#30秒执行1次self.virustimer.start(1000)self.remaintimer.start(1000)defgameover(self):self.timer.stop()self.virustimer.stop()self.textBrowser.setText("游戏结束")self.mousenum=0foriinrange(25):exec("self.virus{0}.flag=0".format(i))
最后再把按钮等增加到游戏页面右侧
self.settingslayout.addWidget(self.startPushButton,0,0)self.settingslayout.addWidget(self.textBrowser,1,0)self.settingslayout.addWidget(self.killBrowser,2,0)self.settingslayout.addWidget(self.escapeBrowser,3,0)self.settingslayout.addWidget(self.remaintimeText,4,0)#self.settingslayout.addWidget(self.endPushButton,5,0)self.settingslayout.addWidget(self.pauseMusicButton,6,0)
现在我们的游戏页面是如下样式
游戏积分
既然是游戏,当然要有积分功能。对于地鼠游戏,我们点击鼠标的时候,就是砸地鼠的时候
defmousePressEvent(self,event):self.setCursor(QCursor(QPixmap(r"sucai/down.png")))self.upTime.start(100)self.kill()defup(self):self.setCursor(QCursor(QPixmap(r"sucai/up.png")))
然后再进行游戏得分的逻辑
defkill(self):try:ifself.flag==1:self.setStyleSheet("QPushButton{border-image:url(sucai/killvirus2.png)}")#地鼠被砸globalscorescore+=1self.flag=0except:pass
这样,一个基本的游戏积分也就有了!
最后来看看最终的效果吧
源码获取,在公众号后台回复“小助手”,找他领取,备注暗号:打地鼠
推荐阅读:入门:最全的零基础学Python的问题 |零基础学了8个月的Python|实战项目|学Python就是这条捷径干货:爬取豆瓣短评,电影《后来的我们》|38年NBA最佳球员分析| 从万众期待到口碑扑街!唐探3令人失望 |笑看新倚天屠龙记|灯谜答题王|用Python做个海量小姐姐素描图|碟中谍这么火,我用机器学习做个迷你推荐系统电影趣味:弹球游戏 |九宫格 |漂亮的花|两百行Python《天天酷跑》游戏!AI:会做诗的机器人|给图片上色|预测收入|碟中谍这么火,我用机器学习做个迷你推荐系统电影小工具:Pdf转Word,轻松搞定表格和水印!|一键把html网页保存为pdf!|再见PDF提取收费!|用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换|制作一款钉钉低价机票提示器!|60行代码做了一个语音壁纸切换器天天看小姐姐!|
年度爆款文案
1).卧槽!Pdf转Word用Python轻松搞定!
2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃
3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密
4).80行代码!用Python做一个哆来A梦分身
5).你必须掌握的20个python代码,短小精悍,用处无穷
6).30个Python奇淫技巧集
7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货
8).再见Python!我要学Go了!2500字深度分析!
9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片