<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用 Python 開發(fā)打地鼠小游戲

          共 4195字,需瀏覽 9分鐘

           ·

          2020-12-24 07:25

          游戲畫面

          首先先進行游戲畫面排版,

          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 來說,需要創(chuàng)建一個全局的 Application 對象,其參數(shù)是命令行參數(shù)列表,可以通過 setFixedSize 來設(shè)置游戲框的大小。
          我們還設(shè)置了類變量 virusnum 作為地鼠個數(shù)計量

          接下來我們創(chuàng)建一個地鼠類,把相關(guān)的地洞排布起來

          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)

          再創(chuàng)建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

          此時我們程序的效果如下



          設(shè)置工具欄

          下面我們來為游戲頁面添加必要的工具欄,比如開始按鈕,游戲積分框等等

          #?右側(cè)固定窗口內(nèi)控件
          ????????self.settingslayout?=?QGridLayout()??#?網(wǎng)格布局
          ????????self.settingsWidget?=?QWidget()
          ????????self.settingsWidget.setFixedSize(80,?350)
          ????????self.imagelayout.addWidget(self.settingsWidget,?0,?5,?1,?5)
          ????????self.settingsWidget.setLayout(self.settingslayout)

          之后再創(chuàng)建相關(guān)的按鈕和輸入框

          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('消滅病毒數(shù):0')
          ????????self.killBrowser.setFixedSize(70,?50)

          ????????self.escapeBrowser?=?QTextBrowser()
          ????????self.escapeBrowser.setText('逃離病毒數(shù):0')
          ????????self.escapeBrowser.setFixedSize(70,?50)

          ????????self.remaintimeText?=?QTextBrowser()
          ????????self.remaintimeText.setText('剩余時間:\n30s')
          ????????self.remaintimeText.setFixedSize(70,?55)

          在這里,對于開始按鈕,采用了與其他按鈕不同處理方式,當程序處于游戲中時,該按鈕就變成“結(jié)束游戲”,所以我們來看看 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("結(jié)束游戲")
          ????????????????self.gamestart()
          ????????????else:
          ????????????????btn.setText("開始游戲")
          ????????????????self.gameover()

          對于用到的 gamestart 和 gameover 兩個函數(shù),代碼如下

          ????def?gamestart(self):
          ????????score?=?0
          ????????self.textBrowser.setText("正在游戲")
          ????????self.timer.start(30000)??#?30秒執(zhí)行1次
          ????????self.virustimer.start(1000)
          ????????self.remaintimer.start(1000)

          ????def?gameover(self):
          ????????self.timer.stop()
          ????????self.virustimer.stop()
          ????????self.textBrowser.setText("游戲結(jié)束")
          ????????self.mousenum?=?0
          ????????for?i?in?range(25):
          ????????????exec("self.virus{0}.flag?=?0".format(i))

          最后再把按鈕等增加到游戲頁面右側(cè)

          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)

          現(xiàn)在我們的游戲頁面是如下樣式



          游戲積分

          既然是游戲,當然要有積分功能。對于地鼠游戲,我們點擊鼠標的時候,就是砸地鼠的時候

          ????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

          這樣,一個基本的游戲積分也就有了!

          最后來看看最終的效果吧

          更多閱讀



          5 分鐘完全掌握 Python 協(xié)程


          程序運行慢?你怕是寫的假 Python


          賽博朋克科幻文化的起源和意義


          特別推薦


          程序員摸魚指南


          為你精選的硅谷極客資訊,
          來自FLAG巨頭開發(fā)者、技術(shù)、創(chuàng)投一手消息




          點擊下方閱讀原文加入社區(qū)會員

          瀏覽 38
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  性爱福利网站 | 欧美内射视频在线观看 | 免费成人视频在线豆花 | 好男人一区二区三区在线观看 | 午夜成人大片 |