En este artículo, veremos cómo podemos crear un juego de piedra, papel y tijera usando Tkinter. 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 las tres formas con la mano extendida. Estas formas son «piedra», «papel» y «tijeras».
Condiciones del ganador del juego
Que haya un jugador que esté jugando con una computadora como oponente. Ahora,
- Si el jugador selecciona papel y la computadora selecciona tijera, la computadora gana
- Si el jugador elige Roca y la computadora elige Tijera, el jugador 1 gana
- Si el jugador elige papel y la computadora elige roca, el jugador 1 gana
- Y si el jugador selecciona Papel y la computadora selecciona Papel – Dibuja
- Si el jugador selecciona Rock y la computadora selecciona Rock – Dibuja
- Si el jugador selecciona Tijera y la computadora selecciona Tijera – Dibujar
Herramientas y tecnologías utilizadas
- Tkinter: es una interfaz estándar de Python para el kit de herramientas Tk GUI que se envía con Python. Python con tkinter es la forma más rápida y sencilla de crear aplicaciones GUI.
- Aleatorio: Python define un conjunto de funciones que se utilizan para generar o manipular números aleatorios a través del módulo aleatorio.
- PIL: Python Imaging Library (expansión de PIL) es el paquete de procesamiento de imágenes de facto para el lenguaje Python. Incorpora herramientas ligeras de procesamiento de imágenes que ayudan a editar, crear y guardar imágenes.
Implementación de GUI
Parte 1: procesamiento y manejo de imágenes
1) Importe Python Module Tkinter para ejecutar aplicaciones GUI.
2) Desde PIL Importar ImageTk, Imagen para procesamiento de imágenes.
3) Importación aleatoria que ayudará a la computadora a seleccionar las opciones de piedra, papel o tijera al azar.
4) Ahora se crea un objeto raíz que es el objeto de la ventana principal.
- Título de esta ventana -> Piedra, Papel, Tijera
- Dimensiones de esta ventana -> “800×680”
5) Crear un lienzo de ancho=800, alto=680
6) Ahora creamos etiquetas en la ventana GUI
- l1 =Jugador-> fuente=’Argelino’, tamaño=25
- l2 =Computadora-> fuente=’Argelina’, tamaño=25
- l3 =Vs font=’Argelina’, tamaño=40
7) Ahora las etiquetas se colocan en la ventana.
- l1 en x=80, y=20
- l2 en x=560, y=20
- l3 en x=370, y=230
Para la imagen predeterminada:
1) Se usa una variable llamada img_p para abrir la imagen de la mano predeterminada y cambiar su tamaño a (300,300). Esto se mostrará en la condición predeterminada en el juego en el lugar del jugador.
2) Se usa una variable llamada img_c para almacenar la imagen predeterminada volteada de izquierda a derecha usando la función de transposición y se guarda en la variable. Esto se mostrará en la condición predeterminada en el juego en el lugar del costado de la computadora.
3) Las imágenes img_p e img_c se cargan en el lienzo ahora usando Tk.PhotoImage
Para imagen de roca:
1) Se usa una variable llamada rock_p para abrir la imagen de la mano de roca y cambiar su tamaño a (300,300). Esto se mostrará al lado del jugador cuando el jugador seleccione roca en el juego.
2) Una variable llamada rock_c se usa para almacenar la imagen de la mano de una roca volteada de izquierda a derecha usando la función de transposición y se mostrará en el lado de la computadora cuando la computadora seleccione aleatoriamente una roca en el juego.
3) Las imágenes rock_p y rock_c se cargan en el lienzo ahora usando Tk.PhotoImage.
Para imagen de papel
1) Se usa una variable llamada paper_p para abrir la imagen de la mano de papel y cambiar su tamaño a (300,300). Esto se mostrará al lado del jugador cuando el jugador seleccione papel en el juego.
2) Una variable llamada paper_c se usa para almacenar imágenes de manos de papel volteadas de izquierda a derecha usando la función de transposición y se mostrará en el lado de la computadora cuando la computadora seleccione papel al azar en el juego.
3) Las imágenes paper_p y paper_c se cargan en el lienzo ahora usando Tk.PhotoImage.
Para Tijeras Imagen
1) Se usa una variable llamada scissor_p para abrir la imagen de la mano de tijera y cambiar su tamaño a (300,300). Esto se mostrará al lado del jugador cuando el jugador seleccione la tijera en el juego.
2) Una variable llamada scissor_c se usa para almacenar la imagen de la mano de tijera volteada de izquierda a derecha usando la función de transposición y se mostrará en el lado de la computadora cuando la computadora seleccione aleatoriamente la tijera en el juego.
3) Las imágenes scissor_p y scissor_c se cargan en el lienzo ahora usando Tk.PhotoImage.
Para Imagen de Selección:
1) Se usa una variable llamada img_s para abrir la selección de imágenes de manos, es decir, imagen combinada de piedra, papel y tijera, y cambiar su tamaño a (300,130).
2) La imagen img_s se carga en el lienzo ahora usando Tk.PhotoImage.
Parte 2: Implementación del juego
1) Se define una función de juego en la que tenemos una lista llamada seleccionar que tiene los valores 1, 2, 3 que representan piedra, papel y tijera respectivamente.
2) Aquí random.choice selecciona aleatoriamente las opciones 1-3 para computadora
3) Establecer imagen para Player en lienzo
- Si el jugador selecciona 1 (roca), muestra la imagen de la roca en el lienzo usando create_image.
- Si el jugador selecciona 2 (Papel), muestra la imagen de papel en el lienzo usando create_image.
- Si el jugador selecciona 3 (Tijera), muestra la imagen de tijera en el lienzo usando create_image.
4) Establecer imagen para computadora en lienzo
- Si la computadora selecciona 1 (roca), muestre la imagen de la roca en el lienzo usando create_image.
- Si la computadora selecciona 2 (Papel) Muestre la imagen de papel en el lienzo usando create_image.
- Si la computadora selecciona 3 (Tijera), muestre la imagen de tijera en el lienzo usando create_image.
5) Obtención del resultado
- Si el jugador elige Piedra y la computadora elige Piedra O Si el jugador elige Papel y la computadora elige Papel O Si el jugador elige Tijera y la computadora elige Tijera. Resultado mostrado-> Dibujar
- Si el jugador elige Piedra y la computadora elige Tijera O Si el jugador elige Papel y la computadora elige Roca O Si el jugador elige Tijera y la computadora elige Papel. Resultado mostrado -> Jugador ganado
- De lo contrario, se muestra el resultado -> Computadora ganada
Nota: este resultado se muestra en el lienzo en forma de texto con dimensiones (390 600), font=’Argelina’, tag=’resultado’.
6) Botones
- Botón Borrar -> Elimina el resultado actual y cambia las cifras en ambos lados a sus condiciones predeterminadas.
- Botón Rock -> Selecciona la opción 1 en el juego de funciones y muestra una imagen de la mano que muestra el lado Rock On Player.
- Botón de papel -> Selecciona la opción 2 en el juego de funciones y muestra la imagen de la mano que muestra el papel en el lado del jugador
- Botón de tijera -> Selecciona la opción 3 en el juego de funciones y muestra una imagen de la mano que muestra la tijera en el lado del jugador.
Imágenes utilizadas:
principal.py
Python3
from tkinter import * from PIL import ImageTk, Image import random # main window object root = Tk() # Title of GUI window root.title('Rock Paper Scissor') # Size of window root.geometry('800x680') # Creating canvas canvas = Canvas(root, width=800, height=680) canvas.grid(row=0, column=0) # Creating labels on GUI window l1 = Label(root, text='Player', font=('Algerian', 25)) l2 = Label(root, text='Computer', font=('Algerian', 25)) l3 = Label(root, text='Vs', font=('Algerian', 40)) # Placing all the labels on window l1.place(x=80, y=20) l2.place(x=560, y=20) l3.place(x=370, y=230) # Default image img_p = Image.open("default.jpeg") img_p = img_p.resize((300, 300)) # Flipping image from left to right img_c = img_p.transpose(Image.FLIP_LEFT_RIGHT) # Loading images to put on canvas img_p = ImageTk.PhotoImage(img_p) img_c = ImageTk.PhotoImage(img_c) # Rock image rock_p = Image.open('rock.jpeg') rock_p = rock_p.resize((300, 300)) # Flipping image from left to right rock_c = rock_p.transpose(Image.FLIP_LEFT_RIGHT) # Loading images to put on canvas rock_p = ImageTk.PhotoImage(rock_p) rock_c = ImageTk.PhotoImage(rock_c) # Paper image paper_p = Image.open('paper.jpeg') paper_p = paper_p.resize((300, 300)) # Flipping image from left to right paper_c = paper_p.transpose(Image.FLIP_LEFT_RIGHT) # Loading images to put on canvas paper_p = ImageTk.PhotoImage(paper_p) paper_c = ImageTk.PhotoImage(paper_c) # Scissor image scissor_p = Image.open('scissor.jpeg') scissor_p = scissor_p.resize((300, 300)) # Flipping image from left to right scissor_c = scissor_p.transpose(Image.FLIP_LEFT_RIGHT) # Loading images to put on canvas scissor_p = ImageTk.PhotoImage(scissor_p) scissor_c = ImageTk.PhotoImage(scissor_c) # Selection image img_s = Image.open("Selection.jpeg") img_s = img_s.resize((300, 130)) img_s = ImageTk.PhotoImage(img_s) # Putting image on canvas on specific coordinates canvas.create_image(0, 100, anchor=NW, image=img_p) canvas.create_image(500, 100, anchor=NW, image=img_c) canvas.create_image(0, 400, anchor=NW, image=img_s) canvas.create_image(500, 400, anchor=NW, image=img_s) # game function def game(player): select = [1, 2, 3] # Randomly selects option for computer computer = random.choice(select) # Setting image for player on canvas if player == 1: # Puts rock image on canvas canvas.create_image(0, 100, anchor=NW, image=rock_p) elif player == 2: # Puts paper image on canvas canvas.create_image(0, 100, anchor=NW, image=paper_p) else: # Puts scissor image on canvas canvas.create_image(0, 100, anchor=NW, image=scissor_p) # Setting image for computer on canvas if computer == 1: # Puts rock image on canvas canvas.create_image(500, 100, anchor=NW, image=rock_c) elif computer == 2: # Puts paper image on canvas canvas.create_image(500, 100, anchor=NW, image=paper_c) else: # Puts scissor image on canvas canvas.create_image(500, 100, anchor=NW, image=scissor_c) # Obtaining result by comparison if player == computer: # Case of DRAW res = 'Draw' # Case of player's win elif (player == 1 and computer == 3) or (player == 2 and computer == 1) or (player == 3 and computer == 2): res = 'You won' # Case of computer's win else: res = 'Computer won' # Putting result on canvas canvas.create_text(390, 600, text='Result:- ' + res, fill="black", font=('Algerian', 25), tag='result') # Function for clear button def clear(): # Removes result from canvas canvas.delete('result') # Puts default image on canvas canvas.create_image(0, 100, anchor=NW, image=img_p) canvas.create_image(500, 100, anchor=NW, image=img_c) # Button for selecting rock rock_b = Button(root, text='Rock', command=lambda: game(1)) rock_b.place(x=35, y=487) # Button for selecting paper paper_b = Button(root, text='Paper', command=lambda: game(2)) paper_b.place(x=128, y=487) # Button for selecting scissor scissor_b = Button(root, text='Scissor', command=lambda: game(3)) scissor_b.place(x=220, y=487) # Button for clear clear_b = Button(root, text='CLEAR', font=('Times', 10, 'bold'), width=10, command=clear).place(x=370, y=28) root.mainloop()
Producción
Miembros del equipo
Publicación traducida automáticamente
Artículo escrito por utkarshshaw y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA