Supongo que todos hemos jugado el juego de piedra, papel o tijeras. Bueno por si alguien pasó su infancia en un búnker, puede checarlo aquí: Piedra, papel o tijeras
En este post, vamos a recrear el juego, pero además le agregaremos una interfaz gráfica con botones de radio, un botón normal y una caja de texto.
#Scissors, paper, rock game
#Importamos todo el modulo Tkinter para la interfaz grafica
from Tkinter import *
#importamos el modulo random para generar la eleccion del contrincante del cpu
import random
#Lista que contiene las opciones que tiene el cpu para jugar
WEAPONS = ["scissors", "paper", "rock"]
#Definimos la clase Application donde guardaremos todos los widgets como botones, texto y radiobuttons
#Application hereda de Frame
class Application(Frame):
#Metodo constructor de application
def __init__(self, master):
#Invocamos el consructor de Frame
Frame.__init__(self, master)
#Digamos que muestra el objeto Application en pantalla
self.grid()
#Invocamos el metodo createWidgets(), definido mas abajo
self.createWidgets()
#Metodo que crea los elementos que se colocarán en la ventana raiz
def createWidgets(self):
#Label es un widget que muestra texto, no tiene interacción alguna
Label(self, text = "Pick scissors, paper or rock and then press the fight button"
).grid(row = 0, column = 0, sticky = W)
#Variable que contendra la eleccion del jugador
self.election = StringVar()
#Los botones de radio que presentan las opciones a elegir para el jugador
Radiobutton(self, text = "Scissors", variable = self.election, value = "scissors"
).grid(row = 1, column = 0, sticky = W)
Radiobutton(self, text = "Paper", variable = self.election, value = "paper"
).grid(row = 2, column = 0, sticky = W)
Radiobutton(self, text = "Rock", variable = self.election, value = "rock"
).grid(row = 3, column = 0, sticky = W)
#El boton que activa el inicio del juego, manda a llamar el metodo fight()
Button(self, text = "Fight", bg = "Red", command = self.fight).grid(row = 4, column = 0)
#Creamos la caja de texto en donde se mostrara el resultado del juego, por el momento esta vacio
self.result = Text(self, width = 40, height = 5, wrap = WORD)
self.result.grid(row = 5, column = 0, columnspan = 3)
#Metodo que calcula una eleccion de arma para el cpu y compara para ver quien gana
def fight(self):
#Elige pseudoaleatoriamente un arma para el cpu
self.cpuWeapon = random.choice(WEAPONS)
self.message = ""
if self.election.get() == "rock" and self.cpuWeapon == "scissors":
self.message = "You Win!!!"
elif self.election.get() == "paper" and self.cpuWeapon == "rock":
self.message = "You Win!!!"
elif self.election.get() == "scissors" and self.cpuWeapon == "paper":
self.message = "You Win!!!"
elif self.cpuWeapon == "scissors" and self.election.get() == "paper":
self.message = "You Lose!!!"
elif self.cpuWeapon == "rock" and self.election.get() == "scissors":
self.message = "You Lose!!!"
elif self.cpuWeapon == "paper" and self.election.get() == "rock":
self.message = "You Lose!!!"
else:
self.message = "TIE!!!!"
#Concatenamos el mensaje con las armas de cada uno (cpu/user)
self.message += "\nYour weapon: " + self.election.get() + "\nCPU Weapon: " + self.cpuWeapon
#Borramos lo que hay en el cuadro de texto
self.result.delete(0.0, END)
#Mostramos el mensaje en el cuadro de texto
self.result.insert(0.0, self.message)
#main
#Instanciamos un objeto Tk() en donde se colocaran los demas widgets
root = Tk()
#Le damos el nombre a nuestra GUI
root.title("Scissors, paper, rock")
#Se le asigna un tamaño como string en formato anchoxalto
root.geometry("350x250")
#instanciamos un objeto Application y le mandamos como maestro al objeto root
app = Application(root)
#el ciclo principal de la aplicacion
root.mainloop()
La idea del programa, viene de un proyecto del libro Guide to Programming with Python, de Michael Dawson. Próximamente haré un post sobre el libro.
2 responses so far ↓
Dieg-o // May 25, 2009 at 6:36 pm
Está muy densa la onda, no entiendo nada de lo que escribes en este blog.
hdgam3r // May 25, 2009 at 8:23 pm
@Dieg-o: yo sé que es difícil entenderle a un programa con tan sólo verlo, la verdad este tipo de ejemplos están orientados a personas que tienen al menos los fundamentos en algún lenguaje de programación. Estoy planeando hacer unos pequeños tutoriales en python para principiantes.