100 líneas de código Python, haz un juego de golpear un topo

pantalla de juego

Primero, haz el diseño de la pantalla del juego.

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_())

Para PyQt5, se debe crear un objeto de aplicación global, cuyo parámetro es una lista de parámetros de la línea de comandos, y el tamaño del cuadro del juego se puede configurar a través de setFixedSize.
También establecemos la variable de clase virusnum como el número de ardillas

A continuación, creamos una clase de gopher y organizamos las madrigueras relevantes

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)

Crea 25 madrigueras más

        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

En este punto, el efecto de nuestro programa es el siguiente

establecer barra de herramientas

A continuación, agreguemos las barras de herramientas necesarias para la página del juego, como el botón de inicio, el cuadro de puntos del juego, etc.

# 右侧固定窗口内控件
        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)

Luego cree los botones y cuadros de entrada relevantes

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)

Aquí, el botón de inicio se maneja de manera diferente a otros botones. Cuando el programa está en el juego, el botón se convierte en "finalizar juego", así que echemos un vistazo a 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()

Para las dos funciones gamestart y gameover utilizadas, el código es el siguiente

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

Finalmente, agregue botones, etc. al lado derecho de la página del juego.

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)

Ahora nuestra página de juego se ve así

creditos del juego

Dado que es un juego, por supuesto, debe haber una función de punto. Para el juego de la ardilla, cuando hacemos clic con el mouse, aplastamos la ardilla

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

Luego proceda a la lógica de la puntuación del juego.

    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

¡De esta manera, también está disponible un crédito de juego básico!

Aquí me gustaría recomendar el grupo Q de aprendizaje de Python que construí yo mismo: 831804576. Todos en el grupo están aprendiendo Python. Si quieres aprender o estás aprendiendo Python, eres bienvenido a unirte. Todos son un grupo de desarrollo de software y comparten productos secos de vez en cuando (solo relacionado con el desarrollo de software de Python),
incluida una copia de los últimos materiales avanzados de Python y enseñanza basada en cero en 2022 que he compilado yo mismo. Bienvenidos a los socios medianos y pequeños avanzados que están interesados ​​en ¡Pitón!

Supongo que te gusta

Origin blog.csdn.net/BYGFJ/article/details/124312639
Recomendado
Clasificación