100 linhas de código Python, faça um pequeno jogo de whack-a-mole ~

Recentemente, estou aprendendo a usar Python para completar alguns pequenos jogos. Usei Pygame e PyQt5, etc. De acordo com os códigos dos predecessores na Internet, compilei um pequeno jogo de whack-a-mole. Hoje vou compartilhar com você e aprender juntos!

tela do jogo

Em primeiro lugar, a composição da tela do jogo,

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, é necessário criar um objeto Application global, cujo parâmetro é uma lista de parâmetros de linha de comando, e o tamanho da caixa do jogo pode ser definido através de setFixedSize.
Também definimos a variável de classe virusnum como o número de gophers

Em seguida, criamos uma classe gopher e organizamos as tocas 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)  

Crie mais 25 tocas

        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

Neste ponto, o efeito do nosso programa é o seguinte

Barra de ferramentas de configurações

Em seguida, vamos adicionar as barras de ferramentas necessárias à página do jogo, como o botão Iniciar, a caixa de pontos do jogo, 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)  

Em seguida, crie botões e caixas de entrada relacionados

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)  

Aqui, o botão iniciar é tratado de forma diferente dos outros botões. Quando o programa está no jogo, o botão se torna "end game", então vamos dar uma olhada em 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 as funções gamestart e gameover usadas, o código é o seguinte

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

Por fim, adicione botões ao lado direito da página do jogo

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)  

Agora nossa página de jogo se parece com isso

pontos de jogo

Como é um jogo, é claro que deve haver uma função de ponto. Para o jogo gopher, quando clicamos com o mouse, é hora de esmagar o gopher

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

Em seguida, prossiga para a lógica da pontuação do jogo

    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

Desta forma, os pontos básicos do jogo estarão lá!

Finalmente, vamos ver o efeito final.
insira a descrição da imagem aqui

O Python está
se tornando cada vez mais popular e não está longe da era em que todas as pessoas aprendem Python. ser dominado por muitas habilidades. Tenho uma cópia aqui Um conjunto completo de materiais de aprendizado de Python, espero ajudar aqueles que desejam aprender Python!

1. A rota de aprendizado de todas as direções do Python
A rota de todas as direções do Python é classificar os pontos técnicos comumente usados ​​em Python para formar um resumo dos pontos de conhecimento em vários campos. Sua utilidade reside no fato de que você pode encontrar recursos de aprendizado correspondentes de acordo com os pontos de conhecimento acima. Certifique-se de aprender de forma mais abrangente.
insira a descrição da imagem aqui

2. Software de aprendizado
Se um trabalhador deseja fazer um bom trabalho, ele deve primeiro afiar suas ferramentas. O software de desenvolvimento comumente usado para aprender Python está aqui, o que economiza muito tempo.
insira a descrição da imagem aqui

3. Vídeos de aprendizado introdutório
Quando assistimos a vídeos e aprendemos, não podemos simplesmente mover nossos olhos e cérebro sem fazê-lo. Um método de aprendizado mais científico é usá-los após a compreensão. Neste momento, o projeto prático é muito adequado .
insira a descrição da imagem aqui

4. Casos práticos
A teoria ótica não serve para nada.Você tem que aprender a acompanhar e fazer exercícios práticos para aplicar o que aprendeu na prática.Neste momento, você pode aprender com alguns casos práticos.
insira a descrição da imagem aqui

5. Materiais de entrevista
Precisamos aprender Python para encontrar um emprego bem remunerado. As perguntas de entrevista a seguir são os materiais de entrevista mais recentes de empresas de Internet de primeira linha, como Ali, Tencent e Byte, e os chefes de Ali deram respostas confiáveis. Brush After Ao completar este conjunto de materiais de entrevista, acredito que todos podem encontrar um emprego satisfatório.
insira a descrição da imagem aqui
insira a descrição da imagem aqui

Esta versão completa do conjunto completo de materiais de aprendizado do Python foi carregada no CSDN. Se precisar, você pode escanear o código QR da certificação oficial do CSDN abaixo no WeChat para obtê-lo gratuitamente【保证100%免费

Acho que você gosta

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