RESUMEN INTERFAZ GRÁFICA
V PARTE
5 Noviembre del 2010
Autor: Grupo 50, Segundo Semestre 2010 (Sede San
Carlos)
21. EJEMPLO DE INTERFAZ GRÁFICA CON UN JUEGO GATO
(TRES EN LINEA)
Para este ejemplo se creó un gato, en el que juegan
dos jugadores. Cuando un jugador hace 3 líneas seguidas gana el juego.
Se utilizan algunos de los elementos explicados en
los tutoriales anteriores:
- Uso del IDE PyScripter
- Módulo Tkinter
- Evento objetografico.after(milisegundos,función)
- Método objetografico.grid(row=i,column=j)
- Método lambda para asignar más de un evento a un
botón
- Control de Flujo
- Uso de ventana.withdraw() para ocultar ventanas
- Uso de ventana.deiconify() para mostrar ventanas
- Uso de listas para almacenar información de
manera temporal
- Abastracción y aprovechamiento del lenguaje para
declarar variables por medio de tuplas ()
- Uso de la codificación utf-8 para evitar
problemas con caracteres tales como tildes, eñes, entre otros
- Propiedades y atributos de las ventanas como
resizable para evitar que se pueda redimencionar, o title para colocar
título a
esta
- Uso de font para cambiar el tamaño de la letra de
un control de tipo Label
Ejemplo 33
Para la elaboración de este
proyecto se tomaron en cuenta aspectos de movimientos. Si un
espacio del gato ya fue usado no se puede
volver a usar.
Si todos los espacios del gato
están llenos y nadie hizo un tres en linea se termina el juego.
Si hay un tres en línea se
avisa cuál jugador en específico ganó la partida y se reinician las
casillas, así como la lista donde se guarda
la información. La lista contiene 9 ceros que
corresponden a cada casilla. Si juega el
jugador 1, el espacio en la lista donde jugó se
transforma en un 1 o en un 2, dependiendo
del turno del jugador.
La primera vez el jugador que
inicia es el azul. La segunda vez, inicia el jugador que haya
ganado la partida anterior, si ninguno ganó,
entonces el turno es para el jugador que hizo la
penúltima jugada en el juego anterior.
Los jugadores hacen click en
cada casilla, transformando el color de esta para identificarle.
|
# -*- coding: utf-8
-*-
from Tkinter import *
v0=Tk()
v0.title("Gato")
v0.resizable(0,0)
color,nl,matriz,ganador=["red"],[],[0,0,0,0,0,0,0,0,0],[0]
def imprimir(t): print
t
def doit(f):
v0.after(100,f) # Evento por tiempo
# Crea un gato
def gato():
ind=0
c1,c2=0,0
while ind < 9:
nl.append(Button(v0,text="",width=10,height=5,bg="white"))
nl[ind].grid(row=c2,column=c1)
ind+=1
if c1==2: c1,c2=0,c2+1
else: c1+=1
nl[0].config(command=lambda: jugar(0)),
nl[1].config(command=lambda: jugar(1))
nl[2].config(command=lambda: jugar(2)),
nl[3].config(command=lambda: jugar(3))
nl[4].config(command=lambda: jugar(4)),
nl[5].config(command=lambda: jugar(5))
nl[6].config(command=lambda: jugar(6)),
nl[7].config(command=lambda: jugar(7))
nl[8].config(command=lambda: jugar(8))
def
juego_finalizado(): # Revisa si el gato está lleno. Si lo está devuelve True
ind,largo=0,len(matriz)
while ind < largo:
if matriz[ind] == 0:
return False
break
ind+=1
return True
def tres_linea(lista):
if matriz[lista[0]] != 0 and
matriz[lista[1]] != 0 and matriz[lista[2]] != 0:
if matriz[lista[0]] == matriz[lista[1]]
== matriz[lista[2]]:
ganador[0]=matriz[lista[0]]
return True
return False
def gana():
if tres_linea([0,1,2]) or
tres_linea([3,4,5]) or tres_linea([6,7,8]) or tres_linea([0,3,6]) or tres_linea([1,4,7])
or tres_linea([2,5,8]) or tres_linea([0,4,8]) or tres_linea([2,4,6]):
return True
def limpiar_botones():
color="white"
ind,largo=0,len(nl)
while ind < largo:
nl[ind].config(bg=color)
ind+=1
matriz[0],matriz[1],matriz[2],matriz[3],matriz[4],matriz[5],matriz[6],matriz[7],matriz[8]=0,0,0,0,0,0,0,0,0
def
declarar_ganador():
v0.after(200,declarar_ganador)
if gana():
limpiar_botones()
v0.withdraw()
v1=Toplevel(v0)
if ganador[0] == 1:
l1=Label(v1,text="Ganador:
Jugador 1 (Azul)",font=(16))
color[0]="red"
if ganador[0] == 2:
l1=Label(v1,text="Ganador:
Jugador 2 (Rojo)",font=(16))
color[0]="blue"
l1.pack()
b1=Button(v1,text="OK",command=lambda: v1.withdraw() or
v0.deiconify(),font=(16))
b1.pack()
v1.focus_force()
def reiniciar_juego():
v0.after(200,reiniciar_juego)
if juego_finalizado():
v0.withdraw()
v1=Toplevel(v0)
v1.title("Finalizado")
v1.resizable(0,0)
l1=Label(v1,text="Nadie
Ganó.",font=(16))
l1.pack()
b1=Button(v1,text="OK",command=lambda: v1.withdraw() or
v0.deiconify(),font=(16))
b1.pack()
doit(limpiar_botones())
def jugar(posicion):
if matriz[posicion] != 0:
print "Ya se jugó en esta
posición"
else:
if color[0]=="red":
matriz[posicion]=1
color[0]="blue"
nl[posicion].config(bg=color)
elif color[0]=="blue":
matriz[posicion]=2
color[0]="red"
nl[posicion].config(bg=color)
print "ESTADO DE LA
MATRIZ:",matriz
gato()
declarar_ganador()
reiniciar_juego()
v0.mainloop()
No hay comentarios:
Publicar un comentario