PyQt5 – Juego de piedra, papel y tijera

En este artículo veremos cómo podemos crear un juego de piedra, papel y tijera usando PyQt5. Piedra, papel o tijera es un juego de manos que generalmente se juega entre dos personas, en el que cada jugador forma simultáneamente una de tres formas con la mano extendida. Estas formas son «piedra», «papel» y «tijeras». A continuación se muestra la representación de cómo se verá el juego.

Pasos de implementación de GUI: 1. Cree una etiqueta principal que muestre el título del juego, configure su fuente y propiedades 2. Debajo de la etiqueta principal, cree una etiqueta de usuario que muestre el signo de la mano seleccionado por el usuario 3. Cree una etiqueta de computadora que mostrará el signo manual elegido por la computadora 4. Entre el usuario y la etiqueta de la computadora, cree una etiqueta para mostrar el texto «vs» 5. Cree una etiqueta de resultado para mostrar la fuente del conjunto de resultados y otras propiedades 6. Cree tres botones de presión para piedra, papel y tijera respectivamente 7. Cree un botón de reinicio para reiniciar el juego Pasos de implementación del back-end:1. Cree la opción de usuario y la variable de contador establezca su valor en -1 2. Agregue acciones al botón de piedra, papel y tijera 3. Dentro de las acciones establezca el valor de elección de acuerdo con el botón presionado y establezca el valor del contador en 3 y haga todo los tres botones deshabilitan 4. Cree un objeto de temporizador que llame al método después de cada segundo 5. Dentro del método de temporizador, verifique si el valor del contador es -1, luego no haga nada más, establezca el valor del contador en la etiqueta de la computadora y disminuya el contador 6. Y verifique si el valor del contador es igual a 0, luego obtenga un valor aleatorio de 1 a 3, de acuerdo con el valor, configure el símbolo de la mano en la etiqueta de la computadora 7. Llame al método who_win para obtener el resultado 8. Dentro del método who_wins primero verifique si el el partido es empate, de lo contrario, encuentre al ganador y establezca el ganador en la etiqueta de resultado 9. Agregue acción al botón de reinicio 10.Dentro de la acción del botón de reinicio, establezca el valor del contador en -1, habilite todos los botones y elimine la imagen de la computadora y la etiqueta del usuario

A continuación se muestra la implementación. 

Python3

# importing libraries
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import random
import sys
 
 
class Window(QMainWindow):
 
    def __init__(self):
        super().__init__()
 
        # setting title
        self.setWindowTitle("Python ")
 
        # setting geometry
        self.setGeometry(100, 100, 320, 400)
 
        # calling method
        self.UiComponents()
 
        # showing all the widgets
        self.show()
 
    # method for components
    def UiComponents(self):
 
        # counter variable
        self.counter = -1
 
        # choice variable
        self.choice = 0
 
        # creating head label
        head = QLabel("Rock Paper Scissor", self)
 
        # setting geometry to the head
        head.setGeometry(20, 10, 280, 60)
 
        # font
        font = QFont('Times', 15)
        font.setBold(True)
        font.setItalic(True)
        font.setUnderline(True)
 
        # setting font to the head
        head.setFont(font)
 
        # setting alignment of the head
        head.setAlignment(Qt.AlignCenter)
 
        # setting color effect to the head
        color = QGraphicsColorizeEffect(self)
        color.setColor(Qt.darkCyan)
        head.setGraphicsEffect(color)
 
        # creating a vs label
        self.vs = QLabel("vs", self)
 
        # setting geometry
        self.vs.setGeometry(150, 110, 30, 50)
 
        # setting font
        font.setUnderline(False)
        font.setItalic(False)
        self.vs.setFont(font)
 
        # creating your choice label
        self.user = QLabel("You", self)
 
        # setting geometry
        self.user.setGeometry(50, 100, 70, 70)
        self.user.setStyleSheet("border : 2px solid black; background : white;")
 
        # setting alignment
        self.user.setAlignment(Qt.AlignCenter)
 
        # creating computer choice  label
        self.computer = QLabel("Computer", self)
 
        # setting geometry
        self.computer.setGeometry(200, 100, 70, 70)
        self.computer.setStyleSheet("border : 2px solid black; background : white;")
 
        # setting alignment
        self.computer.setAlignment(Qt.AlignCenter)
 
        # result label
        self.result = QLabel(self)
 
        # setting geometry to the result
        self.result.setGeometry(25, 200, 270, 50)
 
        # setting font
        self.result.setFont(QFont('Times', 14))
 
        # setting alignment
        self.result.setAlignment(Qt.AlignCenter)
 
        # setting border and color
        self.result.setStyleSheet("border : 2px solid black; background : white;")
 
 
        # creating three push button
        # for rock paper and scissor
        self.rock = QPushButton("Rock", self)
        self.rock.setGeometry(30, 270, 80, 35)
 
        self.paper = QPushButton("Paper", self)
        self.paper.setGeometry(120, 270, 80, 35)
 
        self.scissor = QPushButton("Scissor", self)
        self.scissor.setGeometry(210, 270, 80, 35)
 
        # adding actions to the buttons
        self.rock.clicked.connect(self.rock_action)
        self.paper.clicked.connect(self.paper_action)
        self.scissor.clicked.connect(self.scissor_action)
 
        # creating push button to reset all the game
        game_reset = QPushButton("Reset", self)
 
        # setting geometry
        game_reset.setGeometry(100, 320, 120, 50)
 
        # setting color effect
        color = QGraphicsColorizeEffect(self)
        color.setColor(Qt.red)
        game_reset.setGraphicsEffect(color)
 
        # adding action tot he reset button
        game_reset.clicked.connect(self.reset_action)
 
        # creating a timer object
        timer = QTimer(self)
 
        # adding action to the timer
        timer.timeout.connect(self.showTime)
 
        # starting the timer
        timer.start(1000)
 
 
 
    def showTime(self):
 
        # if counter value is - 1
        if self.counter == -1:
            pass
 
        # if counter is not - 1
        else:
             
            # setting counter value to the label
            self.computer.setText(str(self.counter))
 
            if self.counter == 0:
                self.comp_choice = random.randint(1, 3)
 
                # if computer choice is 1
                if self.comp_choice == 1:
 
                    # setting rock image to the computer label
                    self.computer.setStyleSheet("border-image : url(rock.png);")
 
                elif self.comp_choice == 2:
                    # setting paper image to the computer label
                    self.computer.setStyleSheet("border-image : url(Paper.png);")
 
                else:
                    # setting scissor image to the computer label
                    self.computer.setStyleSheet("border-image : url(scissor.png);")
 
                # checking who won the match
                self.who_won()
 
            # decrementing the counter value
            self.counter -= 1
 
 
    def rock_action(self):
 
        # making choice as 1
        self.choice = 1
 
        # setting rock image to the user label
        self.user.setStyleSheet("border-image : url(rock.png);")
 
        # making counter value to 3
        self.counter = 3
 
        # disabling the push button
        self.rock.setDisabled(True)
        self.paper.setDisabled(True)
        self.scissor.setDisabled(True)
 
    def paper_action(self):
 
        # making choice as 2
        self.choice = 2
 
        # setting rock image to the user label
        self.user.setStyleSheet("border-image : url(Paper.png);")
 
        # making counter value to 3
        self.counter = 3
 
        # disabling the push button
        self.rock.setDisabled(True)
        self.paper.setDisabled(True)
        self.scissor.setDisabled(True)
 
    def scissor_action(self):
 
        # making choice as 3
        self.choice = 3
 
        # setting rock image to the user label
        self.user.setStyleSheet("border-image : url(scissor.png);")
 
        # making counter value to 3
        self.counter = 3
 
        # disabling the push button
        self.rock.setDisabled(True)
        self.paper.setDisabled(True)
        self.scissor.setDisabled(True)
 
 
    def reset_action(self):
 
        # making result label empty
        self.result.setText("")
 
        # resting the counter value
        self.counter = -1
 
        # enabling the push buttons
        self.rock.setEnabled(True)
        self.paper.setEnabled(True)
        self.scissor.setEnabled(True)
 
        # removing images from the user and computer label
        self.user.setStyleSheet("border-image : null;")
        self.computer.setStyleSheet("border-image : null;")
 
 
    def who_won(self):
 
        # if match is draw
        if self.choice == self.comp_choice:
 
            # setting text to the result label
            self.result.setText("Draw Match")
 
        else:
            # condition for winning
            # user choose rock
            if self.choice == 1:
                # computer choose paper
                if self.comp_choice == 2:
                    # setting text to the result
                    self.result.setText("Computer Wins")
                else:
                    self.result.setText("User Wins")
 
            # user chooses paper
            elif self.choice == 2:
                # computer choose scissor
                if self.comp_choice == 3:
                    # setting text to the result
                    self.result.setText("Computer Wins")
                else:
                    self.result.setText("User Wins")
 
            # if user chooses scissor
            elif self.choice == 3:
                # computer choose rock
                if self.comp_choice == 1:
                    # setting text to the result
                    self.result.setText("Computer Wins")
                else:
                    self.result.setText("User Wins")
 
 
 
 
 
# create pyqt5 app
App = QApplication(sys.argv)
 
# create the instance of our Window
window = Window()
 
# start the app
sys.exit(App.exec())

Producción :

Publicación traducida automáticamente

Artículo escrito por rakshitarora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *