製作一個打地鼠的小遊戲!100行Python程式碼輕鬆搞定
阿新 • • 發佈:2020-12-15
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯絡我們以作處理。
以下文章來源於蘿蔔大雜燴 ,作者周蘿蔔
遊戲畫面
首先先進行遊戲畫面排版,
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
這樣,一個基本的遊戲積分也就有了!