1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 4195字,需瀏覽 9分鐘

         ·

        2020-12-24 07:25

        游戲畫(huà)面

        首先先進(jìn)行游戲畫(huà)面排版,

        class?TopWindow(QWidget):
        ????def?__init__(self,?parent=None):
        ????????super().__init__(parent)
        ????????self.virusnum?=?0
        ????????self.setWindowTitle("消滅地鼠小游戲")
        ????????self.setWindowIcon(QIcon(r'sucai/圖標(biāo).jpg'))


        app?=?QApplication(sys.argv)
        Display?=?TopWindow()
        Display.setFixedSize(900,?600)
        Display.show()
        sys.exit(app.exec_())

        對(duì)于 PyQt5 來(lái)說(shuō),需要?jiǎng)?chuàng)建一個(gè)全局的 Application 對(duì)象,其參數(shù)是命令行參數(shù)列表,可以通過(guò) setFixedSize 來(lái)設(shè)置游戲框的大小。
        我們還設(shè)置了類變量 virusnum 作為地鼠個(gè)數(shù)計(jì)量

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

        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個(gè)地洞

        ????????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í)我們程序的效果如下



        設(shè)置工具欄

        下面我們來(lái)為游戲頁(yè)面添加必要的工具欄,比如開(kāi)始按鈕,游戲積分框等等

        #?右側(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="開(kāi)始游戲",?clicked=self.handle_play_button)
        ????????self.startPushButton.setFixedSize(80,?40)
        ????????#?self.startPushButton.clicked.connect(self.gamestart)??#?綁定信號(hào)

        ????????self.textBrowser?=?QTextBrowser()
        ????????self.textBrowser.setText('游戲未開(kāi)始')
        ????????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('剩余時(shí)間:\n30s')
        ????????self.remaintimeText.setFixedSize(70,?55)

        在這里,對(duì)于開(kāi)始按鈕,采用了與其他按鈕不同處理方式,當(dāng)程序處于游戲中時(shí),該按鈕就變成“結(jié)束游戲”,所以我們來(lái)看看 handle_play_button

        @QtCore.pyqtSlot()
        ????def?handle_play_button(self):
        ????????btn?=?self.sender()
        ????????if?btn?is?not?None:
        ????????????text?=?btn.text()
        ????????????if?text?==?"開(kāi)始游戲":
        ????????????????btn.setText("結(jié)束游戲")
        ????????????????self.gamestart()
        ????????????else:
        ????????????????btn.setText("開(kāi)始游戲")
        ????????????????self.gameover()

        對(duì)于用到的 gamestart 和 gameover 兩個(gè)函數(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))

        最后再把按鈕等增加到游戲頁(yè)面右側(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)在我們的游戲頁(yè)面是如下樣式



        游戲積分

        既然是游戲,當(dāng)然要有積分功能。對(duì)于地鼠游戲,我們點(diǎn)擊鼠標(biāo)的時(shí)候,就是砸地鼠的時(shí)候

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

        然后再進(jìn)行游戲得分的邏輯

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

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

        最后來(lái)看看最終的效果吧

        更多閱讀



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


        程序運(yùn)行慢?你怕是寫的假 Python


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


        特別推薦


        程序員摸魚(yú)指南


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




        點(diǎn)擊下方閱讀原文加入社區(qū)會(huì)員

        瀏覽 38
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            影音先锋在线男人资源 | 娇妻被粗大的上司征服 | 大香蕉96 | 久久福利电影 | 撸一撸在线视频 | 《性呻吟》未删减版视频 | 这里只有精品爱豆视频 | 91热热 | 91精品国产99久久久久久女少 | 少妇叫床声|