Hoy crearemos un conocido juego de piedra, tijeras, papel. La biblioteca python python y la biblioteca tkinter nos ayudarán con esto, pero si no sabe qué es, le aconsejo que lea este artículo.
Lo primero que necesitamos es una estructura inicial, una ventana, se verá así para mí:
from tkinter import * import random as rdm class Main(Frame): def __init__(self, root): super(Main, self).__init__(root) self.startUI() def startUI(self): pass if __name__ == '__main__': root = Tk() root.geometry("500x500+200+200") root.title(", , ") root.resizable(False, False) root["bg"] = "#FFF" app = Main(root) app.pack() root.mainloop()
Aquí creamos una ventana inmutable de 500 por 500 con el título "Piedra, tijeras, papel" y un fondo blanco. Es en esta ventana donde agregaremos botones, contadores, etc.
Ahora en nuestro método startUI agregue las siguientes líneas:
btn = Button(root, text="", font=("Times New Roman", 15)) btn = Button(root, text="", font=("Times New Roman", 15)) btn3 = Button(root, text="", font=("Times New Roman", 15)) btn.place(x=10, y=100, width=120, height=50) btn2.place(x=155, y=100, width=120, height=50) btn3.place(x=300, y=100, width=120, height=50)
Estas 7 líneas agregarán 3 botones a nuestra ventana que no hacen nada. Lo arreglaremos más tarde.
El usuario hace su elección haciendo clic en uno de los 3 botones, esto es genial, pero necesitamos un oponente, para eso está el módulo aleatorio.
Y ahora agregaremos una función que manejará la selección y daremos una respuesta sobre quién ganó en esta ronda. Hagámoslo así:
btn = Button(root, text="", font=("Times New Roman", 15), command=lambda x=1: self.btn_click(x)) btn2 = Button(root, text="", font=("Times New Roman", 15), command=lambda x=2: self.btn_click(x)) btn3 = Button(root, text="", font=("Times New Roman", 15), command=lambda x=3: self.btn_click(x))
¿Qué está pasando aquí?
Todo es muy sencillo. En términos generales, si un jugador presiona una piedra, 1 irá, si hay tijeras, luego 2, y si es papel, luego 3, y no solo irá, sino que también se mostrará en la consola.
A expensas de la computadora. Él hace su elección, pero su elección no va a ninguna parte.
Antes de hacer la lógica, necesitamos pasar el resultado al jugador, y para esto usaremos la Etiqueta . Agregue las siguientes líneas a startUI :
self.lbl = Label(root, text=" !", bg="#FFF", font=("Times New Roman", 21, "bold")) self.lbl.place(x=120, y=25) self.lbl2 = Label(root, justify="left", font=("Times New Roman", 13), text=f": {self.win}\n:" f" {self.lose}\n: {self.drow}", bg="#FFF") self.lbl2.place(x=5, y=5)
Genial Ahora tenemos una inscripción en la que mostraremos el resultado de la ronda y una inscripción con estadísticas.
Hagamos 3 contadores:
1. Pérdidas
2. victorias
3. nada
Para hacer esto, agregue la siguiente línea a la misma startUI :
self.win = self.drow = self.lose = 0
Ahora en la clase principal , cree el método btn_click y escriba las siguientes líneas en él:
def btn_click(self, choise): comp_choise = rdm.randint(1, 3) print(choise)
La música no sonó mucho. En el mismo lugar, en btn_click , elimine
imprimir (elegir)
y escribe estas líneas:
if choise == comp_choise: self.drow += 1 self.lbl.configure(text="") elif choise == 1 and comp_choise == 2 \ or choise == 2 and comp_choise == 3 \ or choise == 3 and comp_choise == 1: self.win += 1 self.lbl.configure(text="") else: self.lose += 1 self.lbl.configure(text="") self.lbl2.configure(text=f": {self.win}\n:" f" {self.lose}\n: {self.drow}") del comp_choise
En realidad todo, este es el final de la creación. Todo funciona, puedes jugar.
Código completo:
from tkinter import * import random as rdm class Main(Frame): def __init__(self, root): super(Main, self).__init__(root) self.startUI() def startUI(self): btn = Button(root, text="", font=("Times New Roman", 15), command=lambda x=1: self.btn_click(x)) btn2 = Button(root, text="", font=("Times New Roman", 15), command=lambda x=2: self.btn_click(x)) btn3 = Button(root, text="", font=("Times New Roman", 15), command=lambda x=3: self.btn_click(x)) btn.place(x=10, y=100, width=120, height=50) btn2.place(x=155, y=100, width=120, height=50) btn3.place(x=300, y=100, width=120, height=50) self.lbl = Label(root, text=" !", bg="#FFF", font=("Times New Roman", 21, "bold")) self.lbl.place(x=150, y=25) self.win = self.drow = self.lose = 0 self.lbl2 = Label(root, justify="left", font=("Times New Roman", 13), text=f": {self.win}\n:" f" {self.lose}\n: {self.drow}", bg="#FFF") self.lbl2.place(x=5, y=5) def btn_click(self, choise): comp_choise = rdm.randint(1, 3) if choise == comp_choise: self.drow += 1 self.lbl.configure(text="") elif choise == 1 and comp_choise == 2 \ or choise == 2 and comp_choise == 3 \ or choise == 3 and comp_choise == 1: self.win += 1 self.lbl.configure(text="") else: self.lose += 1 self.lbl.configure(text="") self.lbl2.configure(text=f": {self.win}\n:" f" {self.lose}\n: {self.drow}") del comp_choise if __name__ == '__main__': root = Tk() root.geometry("430x160+200+200") root.title(", , ") root.resizable(False, False) root["bg"] = "#FFF" app = Main(root) app.pack() root.mainloop()