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