Juego de piedra, papel o tijera – Proyecto Python

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:

por defecto.jpg

papel.jpg

roca.jpg

tijera.jpg

Selección.jpg

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

  1. Utkarsh Shaw
  2. chirag bhatia

Publicación traducida automáticamente

Artículo escrito por utkarshshaw 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 *