100 líneas de código Python, haz un pequeño juego de whack-a-mole~

Recientemente, estoy aprendiendo a usar Python para completar algunos juegos pequeños. Usé Pygame y PyQt5, etc. De acuerdo con los códigos de los predecesores en Internet, compilé un juego pequeño de whack-a-mole. Hoy lo compartiré con usted y aprender juntos!

pantalla de juego

En primer lugar, la composición tipográfica 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, es necesario 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

Barra de herramientas de configuración

A continuación, agreguemos las barras de herramientas necesarias a 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 botones relacionados y cuadros de entrada

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 trata 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 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 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í

puntos de juego

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

    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, ¡los puntos básicos del juego estarán allí!

Finalmente, veamos el efecto final.
inserte la descripción de la imagen aquí

Python se
está volviendo cada vez más popular, y no está lejos de la era en que todas las personas aprenden Python. Hay tantos escenarios de aplicación de Python, ya sea un negocio principal o un negocio secundario o cualquier otra cosa, por lo que no necesita estar abrumado por demasiadas habilidades Tengo una copia aquí Un conjunto completo de materiales de aprendizaje de Python, ¡espero ayudar a aquellos que quieren aprender Python!

1. La ruta de aprendizaje de todas las direcciones de Python
La ruta de todas las direcciones de Python consiste en ordenar los puntos técnicos comúnmente utilizados en Python para formar un resumen de los puntos de conocimiento en varios campos. Su utilidad radica en que puede encontrar los recursos de aprendizaje correspondientes. de acuerdo con los puntos de conocimiento anteriores. Asegúrese de aprender de manera más completa.
inserte la descripción de la imagen aquí

2. Software de aprendizaje
Si un trabajador quiere hacer un buen trabajo, primero debe afilar sus herramientas. El software de desarrollo comúnmente utilizado para aprender Python está aquí, lo que le ahorra mucho tiempo.
inserte la descripción de la imagen aquí

3. Videos introductorios de aprendizaje
Cuando vemos videos y aprendemos, no podemos simplemente mover los ojos y el cerebro sin hacerlo. Un método de aprendizaje más científico es usarlos después de la comprensión. En este momento, el proyecto práctico es muy adecuado. .
inserte la descripción de la imagen aquí

4. Casos prácticos
La teoría óptica es inútil, hay que aprender a seguirla y hacer ejercicios prácticos para aplicar lo aprendido a la práctica, en este momento se puede aprender de algunos casos prácticos.
inserte la descripción de la imagen aquí

5. Materiales de entrevistas
Debemos aprender Python para encontrar un trabajo bien remunerado. Las siguientes preguntas de entrevistas son los últimos materiales de entrevistas de compañías de Internet de primera línea como Ali, Tencent y Byte, y los jefes de Ali han dado respuestas autorizadas. Pincel después Completando este conjunto de materiales de entrevista, creo que todos pueden encontrar un trabajo satisfactorio.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Esta versión completa del conjunto completo de materiales de aprendizaje de Python se ha subido a CSDN. Si lo necesita, puede escanear el código QR de la certificación oficial de CSDN a continuación en WeChat para obtenerlo de forma gratuita【保证100%免费

Supongo que te gusta

Origin blog.csdn.net/wslejbb/article/details/130523577
Recomendado
Clasificación