赞
踩
最近在学习使用 Python 来完成一些小游戏,使用到的有 Pygame 和 PyQt5 等,根据网上前人的代码,整理了一个打地鼠的小游戏,今天也分享给大家,一起学习!
首先先进行游戏画面排版,
- class TopWindow(QWidget):
- def __init__(self, parent=None):
- super().__init__(parent)
- self.virusnum = 0
- self.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 作为地鼠个数计量
接下来我们创建一个地鼠类,把相关的地洞排布起来
- class virus(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个地洞
- for i in range(25):
- exec("self.virus{0}=virus()".format(i))
- for i in range(5):
- for j in range(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()
- def handle_play_button(self):
- btn = self.sender()
- if btn is not None:
- text = btn.text()
- if text == "开始游戏":
- btn.setText("结束游戏")
- self.gamestart()
- else:
- btn.setText("开始游戏")
- self.gameover()
对于用到的 gamestart 和 gameover 两个函数,代码如下
- def gamestart(self):
- score = 0
- self.textBrowser.setText("正在游戏")
- self.timer.start(30000) # 30秒执行1次
- self.virustimer.start(1000)
- self.remaintimer.start(1000)
-
- def gameover(self):
- self.timer.stop()
- self.virustimer.stop()
- self.textBrowser.setText("游戏结束")
- self.mousenum = 0
- for i in range(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)
现在我们的游戏页面是如下样式
既然是游戏,当然要有积分功能。对于地鼠游戏,我们点击鼠标的时候,就是砸地鼠的时候
- def mousePressEvent(self, event):
- self.setCursor(QCursor(QPixmap(r"sucai/down.png")))
- self.upTime.start(100)
- self.kill()
-
- def up(self):
- self.setCursor(QCursor(QPixmap(r"sucai/up.png")))
然后再进行游戏得分的逻辑
- def kill(self):
- try:
- if self.flag == 1:
- self.setStyleSheet("QPushButton{border-image: url(sucai/killvirus2.png)}") # 地鼠被砸
- global score
- score += 1
- self.flag = 0
- except:
- pass
这样,一个基本的游戏积分也就有了!
最后来看看最终的效果吧
源码获取,在公众号后台回复“小助手”,找他领取,备注暗号:打地鼠
- 推荐阅读:
- 入门: 最全的零基础学Python的问题 | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径
- 干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 | 从万众期待到口碑扑街!唐探3令人失望 | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
- 趣味:弹球游戏 | 九宫格 | 漂亮的花 | 两百行Python《天天酷跑》游戏!
- AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
- 小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!| 再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|
年度爆款文案
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。