python - 作業13:打地鼠小遊戲(附代碼)


github指路 沖沖沖沖衝

作業要求

作業要求

課程知識點

QtDesigner的用法

1

設計步驟

設計步驟

對話框的實現

對話框的實現

對話框的測試

對話框的測試

嗶嗶賴賴

上個學期的作業我居然現在才……想起來要寫博客(當然我早就傳到GitHub上面去了啊哈哈哈哈哈~
2
當時好像是期末周來着(大概可能實在是來不及吧

現在也是期末周來着,我還欠着安卓開發&數據庫的大作業沒嗶嗶賴賴,先把時間久遠的python補上我的數據庫概率論軟件工程和數據挖掘可怎麼辦呀555555555555

說實話這個作業小小的困擾了我一段時間來着

然後具體的歷程艱不艱辛我也記不太真切了,大概就是邊寫代碼邊暗戳戳罵人的那種狀態吧……感覺不錯就哼個歌,寫不出來就抓下頭髮(導致我現在要禿了,全網徵集洗了會長頭髮的洗髮水555555555555555555最好是香香的那種/拜託了!

直接放代碼吧,截圖也沒弄:))

相比於其他來說真的工程量不算大

完整代碼和詳細註釋

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/12/10 11:29
# @Author : Chen Shan
# Function :GUI programming - ground mouse games

import time
import os
import sys
import PyQt5.QtCore as qc
import PyQt5.QtGui as qg
import PyQt5.QtWidgets as qw

import threading as t
import random

import numpy as np
import matplotlib

matplotlib.use("Qt5Agg")
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure  # 注意不是pyplot下的那個figure
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("Whac-A-Mole")
        MainWindow.resize(750, 639)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.Start = QtWidgets.QPushButton(self.centralwidget)
        self.Start.setGeometry(QtCore.QRect(100, 30, 150, 50))
        self.Start.setObjectName("Start")
        self.Pause = QtWidgets.QPushButton(self.centralwidget)
        self.Pause.setGeometry(QtCore.QRect(300, 30, 150, 50))
        self.Pause.setObjectName("Pause")
        self.Stop = QtWidgets.QPushButton(self.centralwidget)
        self.Stop.setGeometry(QtCore.QRect(500, 30, 150, 50))
        self.Stop.setObjectName("Stop")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(100, 100, 150, 150))
        self.pushButton.setText("")
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(300, 100, 150, 150))
        self.pushButton_2.setText("")
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(500, 100, 150, 150))
        self.pushButton_3.setText("")
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(100, 250, 150, 150))
        self.pushButton_4.setText("")
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_5.setGeometry(QtCore.QRect(300, 250, 150, 150))
        self.pushButton_5.setText("")
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_6.setGeometry(QtCore.QRect(500, 250, 150, 150))
        self.pushButton_6.setText("")
        self.pushButton_6.setObjectName("pushButton_6")
        self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_7.setGeometry(QtCore.QRect(100, 400, 150, 150))
        self.pushButton_7.setText("")
        self.pushButton_7.setObjectName("pushButton_7")
        self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_8.setGeometry(QtCore.QRect(300, 400, 150, 150))
        self.pushButton_8.setText("")
        self.pushButton_8.setObjectName("pushButton_8")
        self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_9.setGeometry(QtCore.QRect(500, 400, 150, 150))
        self.pushButton_9.setText("")
        self.pushButton_9.setObjectName("pushButton_9")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(200, 570, 300, 50))
        font = QtGui.QFont()
        font.setFamily("HanziPen SC")
        font.setPointSize(36)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.Score = QtWidgets.QLabel(self.centralwidget)
        self.Score.setGeometry(QtCore.QRect(500, 570, 150, 50))
        font = QtGui.QFont()
        font.setFamily("HanziPen SC")
        font.setPointSize(36)
        self.Score.setFont(font)
        self.Score.setObjectName("Score")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 750, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Whac-A-Mole"))
        self.Start.setText(_translate("MainWindow", "PLAY"))
        self.Pause.setText(_translate("MainWindow", "STOP"))
        self.Stop.setText(_translate("MainWindow", "END"))
        self.label.setText(_translate("MainWindow", "SCORE :"))
        self.Score.setText(_translate("MainWindow", "0"))


class myMainWindow(qw.QMainWindow, Ui_MainWindow):
    # 重載構造函數
    def __init__(self, parent=None):
        # 重載父類構造函數
        super().__init__(parent)
        # 改變窗口顯示的title
        self.setWindowTitle("Whac-A-Mole")

        # 調用Ui_MainWindow中的函數來顯示界面
        self.setupUi(self)
        self.retranslateUi(self)

        # 難易程度(可調節)
        # 隨機產生地鼠的時間(ms)
        self.t2 = 1000
        # 地鼠顯示時間(ms)
        self.t1 = 800
        # 遊戲總時間(ms)
        self.t3 = 10000
        self.ppp = 0

        # 初始化
        self.init()

        # 動作組(每個按鈕的點擊效果)
        self.pushButton.clicked.connect(self.action1)
        self.pushButton_2.clicked.connect(self.action2)
        self.pushButton_3.clicked.connect(self.action3)
        self.pushButton_4.clicked.connect(self.action4)
        self.pushButton_5.clicked.connect(self.action5)
        self.pushButton_6.clicked.connect(self.action6)
        self.pushButton_7.clicked.connect(self.action7)
        self.pushButton_8.clicked.connect(self.action8)
        self.pushButton_9.clicked.connect(self.action9)
        self.Start.clicked.connect(self.startGame)
        self.Stop.clicked.connect(self.stopGame)
        self.Pause.clicked.connect(self.pauseGame)

    def init(self):
        # 參數
        # 暫停狀態參數(0爲不暫停,1爲暫停)
        self.isPaused = 0
        # 地鼠圖片
        self.p1 = 'QPushButton{background-image:url("pic/3.png")}'
        self.p3 = 'QPushButton{background-image:url("pic/4.png")}'
        # 背景圖片
        self.p2 = 'QPushButton{background-image:url("pic/2.png")}'
        # 初始化背景圖
        self.pushButton.setStyleSheet(self.p2)
        self.pushButton_2.setStyleSheet(self.p2)
        self.pushButton_3.setStyleSheet(self.p2)
        self.pushButton_4.setStyleSheet(self.p2)
        self.pushButton_5.setStyleSheet(self.p2)
        self.pushButton_6.setStyleSheet(self.p2)
        self.pushButton_7.setStyleSheet(self.p2)
        self.pushButton_8.setStyleSheet(self.p2)
        self.pushButton_9.setStyleSheet(self.p2)

    def showScore(self):
        self.Score.setText(str(self.score))

    def startGame(self):
        # 初始化
        # 分數
        self.score = 0
        # 記錄按鈕是否有地鼠,0爲無,1爲有
        self.haveMouse1 = 0
        self.haveMouse2 = 0
        self.haveMouse3 = 0
        self.haveMouse4 = 0
        self.haveMouse5 = 0
        self.haveMouse6 = 0
        self.haveMouse7 = 0
        self.haveMouse8 = 0
        self.haveMouse9 = 0
        # 設置定時器
        # 控制地鼠出現的時間
        self.timer1 = qc.QTimer(self)
        # 控制隨機產生地鼠的時間
        self.timer2 = qc.QTimer(self)
        self.timer2.timeout.connect(self.CreateMouse)
        self.timer2.start(self.t2)
        # 控制遊戲總時間
        self.timer3 = qc.QTimer(self)
        self.timer3.timeout.connect(self.gameOver)
        self.timer3.start(self.t3)
        # 初始化分數顯示
        self.label.setText("SCORE :")
        self.Score.setText(str(self.score))

    def pauseGame(self):
        # 如果在沒有暫停時按了暫停按鈕
        if self.isPaused == 0:
            # 改變暫停狀態
            self.isPaused = 1
            # 改變按鍵顯示內容
            self.Pause.setText("CONTINUE")
            # 關閉定時器
            self.timer2.stop()
            # 初始化背景圖
            self.pushButton.setStyleSheet(self.p2)
            self.pushButton_2.setStyleSheet(self.p2)
            self.pushButton_3.setStyleSheet(self.p2)
            self.pushButton_4.setStyleSheet(self.p2)
            self.pushButton_5.setStyleSheet(self.p2)
            self.pushButton_6.setStyleSheet(self.p2)
            self.pushButton_7.setStyleSheet(self.p2)
            self.pushButton_8.setStyleSheet(self.p2)
            self.pushButton_9.setStyleSheet(self.p2)

        # 如果在暫停時按了繼續按鈕
        elif self.isPaused == 1:
            # 改變暫停狀態
            self.isPaused = 0
            # 改變按鍵顯示內容
            self.Pause.setText("STOP")
            # 重新打開定時器
            self.timer2.start(self.t2)

    def gameOver(self):
        if self.ppp != 0:
            self.timer3.stop()
            self.label.setText("GAME OVER!FINAL SCORE :")
            self.Score.setText(str(self.score))
            self.timer1.stop()
            self.timer2.stop()
        self.ppp += 1
        # 初始化背景圖
        self.pushButton.setStyleSheet(self.p2)
        self.pushButton_2.setStyleSheet(self.p2)
        self.pushButton_3.setStyleSheet(self.p2)
        self.pushButton_4.setStyleSheet(self.p2)
        self.pushButton_5.setStyleSheet(self.p2)
        self.pushButton_6.setStyleSheet(self.p2)
        self.pushButton_7.setStyleSheet(self.p2)
        self.pushButton_8.setStyleSheet(self.p2)
        self.pushButton_9.setStyleSheet(self.p2)

    def stopGame(self):
        self.timer3.stop()
        self.label.setText("GAME OVER!FINAL SCORE :")
        self.Score.setText(str(self.score))
        self.timer1.stop()
        self.timer2.stop()
        # 初始化背景圖
        self.pushButton.setStyleSheet(self.p2)
        self.pushButton_2.setStyleSheet(self.p2)
        self.pushButton_3.setStyleSheet(self.p2)
        self.pushButton_4.setStyleSheet(self.p2)
        self.pushButton_5.setStyleSheet(self.p2)
        self.pushButton_6.setStyleSheet(self.p2)
        self.pushButton_7.setStyleSheet(self.p2)
        self.pushButton_8.setStyleSheet(self.p2)
        self.pushButton_9.setStyleSheet(self.p2)

    # 點擊地鼠後地鼠消失
    def action1(self):
        # 如果有地鼠
        if self.haveMouse1 == 1:
            self.haveMouse1 = 0
            # 點擊後圖變成背景圖
            self.pushButton.setStyleSheet(self.p2)
            # 分數+1
            self.score += 1
            self.showScore()

    def action2(self):
        # 如果有地鼠
        if self.haveMouse2 == 1:
            self.haveMouse2 = 0
            # 點擊後圖變成背景圖
            self.pushButton_2.setStyleSheet(self.p2)
            # 分數+1
            self.score += 1
            self.showScore()

    def action3(self):
        # 如果有地鼠
        if self.haveMouse3 == 1:
            self.haveMouse3 = 0
            # 點擊後圖變成背景圖
            self.pushButton_3.setStyleSheet(self.p2)
            # 分數+1
            self.score += 1
            self.showScore()

    def action4(self):
        # 如果有地鼠
        if self.haveMouse4 == 1:
            self.haveMouse4 = 0
            # 點擊後圖變成背景圖
            self.pushButton_4.setStyleSheet(self.p2)
            # 分數+1
            self.score += 1
            self.showScore()

    def action5(self):
        # 如果有地鼠
        if self.haveMouse5 == 1:
            self.haveMouse5 = 0
            # 點擊後圖變成背景圖
            self.pushButton_5.setStyleSheet(self.p2)
            # 分數+1
            self.score += 1
            self.showScore()

    def action6(self):
        # 如果有地鼠
        if self.haveMouse6 == 1:
            self.haveMouse6 = 0
            # 點擊後圖變成背景圖
            self.pushButton_6.setStyleSheet(self.p2)
            # 分數+1
            self.score += 1
            self.showScore()

    def action7(self):
        # 如果有地鼠
        if self.haveMouse7 == 1:
            self.haveMouse7 = 0
            # 點擊後圖變成背景圖
            self.pushButton_7.setStyleSheet(self.p2)
            # 分數+1
            self.score += 1
            self.showScore()

    def action8(self):
        # 如果有地鼠
        if self.haveMouse8 == 1:
            self.haveMouse8 = 0
            # 點擊後圖變成背景圖
            self.pushButton_8.setStyleSheet(self.p2)
            # 分數+1
            self.score += 1
            self.showScore()

    def action9(self):
        # 如果有地鼠
        if self.haveMouse9 == 1:
            self.haveMouse9 = 0
            # 點擊後圖變成背景圖
            self.pushButton_9.setStyleSheet(self.p2)
            # 分數+1
            self.score += 1
            self.showScore()

    # 地鼠自動消失
    def stop1(self):
        self.haveMouse1 = 0
        # 顯示背景圖
        self.pushButton.setStyleSheet(self.p2)

    def stop2(self):
        self.haveMouse2 = 0
        # 顯示背景圖
        self.pushButton_2.setStyleSheet(self.p2)

    def stop3(self):
        self.haveMouse3 = 0
        # 顯示背景圖
        self.pushButton_3.setStyleSheet(self.p2)

    def stop4(self):
        self.haveMouse4 = 0
        # 顯示背景圖
        self.pushButton_4.setStyleSheet(self.p2)

    def stop5(self):
        self.haveMouse5 = 0
        # 顯示背景圖
        self.pushButton_5.setStyleSheet(self.p2)

    def stop6(self):
        self.haveMouse6 = 0
        # 顯示背景圖
        self.pushButton_6.setStyleSheet(self.p2)

    def stop7(self):
        self.haveMouse7 = 0
        # 顯示背景圖
        self.pushButton_7.setStyleSheet(self.p2)

    def stop8(self):
        self.haveMouse8 = 0
        # 顯示背景圖
        self.pushButton_8.setStyleSheet(self.p2)

    def stop9(self):
        self.haveMouse9 = 0
        # 顯示背景圖
        self.pushButton_9.setStyleSheet(self.p2)

    # 隨機產生地鼠
    def CreateMouse(self):
        # 在數組name中隨機一個控件名
        temp = random.randint(1, 9)
        # 將隨機到的按鈕顯示地鼠
        if temp == 1:
            self.pushButton.setStyleSheet(self.p1)
            self.haveMouse1 = 1
            # 打開一次性計時器
            self.timer1.singleShot(self.t1, self.stop1)
        elif temp == 2:
            self.pushButton_2.setStyleSheet(self.p3)
            self.haveMouse2 = 1
            # 打開一次性計時器
            self.timer1.singleShot(self.t1, self.stop2)
        elif temp == 3:
            self.pushButton_3.setStyleSheet(self.p1)
            self.haveMouse3 = 1
            # 打開一次性計時器
            self.timer1.singleShot(self.t1, self.stop3)
        elif temp == 4:
            self.pushButton_4.setStyleSheet(self.p3)
            self.haveMouse4 = 1
            # 打開一次性計時器
            self.timer1.singleShot(self.t1, self.stop4)
        elif temp == 5:
            self.pushButton_5.setStyleSheet(self.p1)
            self.haveMouse5 = 1
            # 打開一次性計時器
            self.timer1.singleShot(self.t1, self.stop5)
        elif temp == 6:
            self.pushButton_6.setStyleSheet(self.p1)
            self.haveMouse6 = 1
            # 打開一次性計時器
            self.timer1.singleShot(self.t1, self.stop6)
        elif temp == 7:
            self.pushButton_7.setStyleSheet(self.p1)
            self.haveMouse7 = 1
            # 打開一次性計時器
            self.timer1.singleShot(self.t1, self.stop7)
        elif temp == 8:
            self.pushButton_8.setStyleSheet(self.p3)
            self.haveMouse8 = 1
            # 打開一次性計時器
            self.timer1.singleShot(self.t1, self.stop8)
        elif temp == 9:
            self.pushButton_9.setStyleSheet(self.p1)
            self.haveMouse9 = 1
            # 打開一次性計時器
            self.timer1.singleShot(self.t1, self.stop9)


app = qw.QApplication(sys.argv)
form = myMainWindow()
# 設定最小的程序窗口大小
form.setMinimumSize(750, 700)
form.show()
app.exec_()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章