jueves, 14 de septiembre de 2017

Juego del gato en python

Codigo

# -*- coding: utf-8 -*-from Tkinter import * #importa libreria tkinter 
import tkMessageBox #importa libreria tkinter--Cajas de mensaje 
import tkSimpleDialog #importa libreria tkinter--Cajas de dialogo
ven = Tk() #se crea la venta 
ven.geometry("370x460") #se le dan a la ventana sus dimenciones 
ven.title("Juego del gato") #Se le da a la ventaan un titulo
turno = 0 #Variable turnonomj1 = "" #Variable que almacena el nombre del jugador 1
 nomj2 = "" #Variable que almacena el nombre del jugador 2 
lisb = [] #Arreglo que guardara los botones 
tab = [] #Arreglo que guardara que jugador tomo cada casilla ya sea la X o el O
 tab=range(9) #Declaramos el tamaño del arreglo 
turj = StringVar() #Declaramos una variable de tipo sting para poder usarla al enviarle datos a la etiqueta que marcara el turno

linea = Canvas(ven, width=310, height=10)
linea.place(x=30, y=120)
linea.create_line(310, 0, 0, 0, width=25, fill='black')
l2 = Canvas(ven, width=310, height=10)
l2.place(x=30, y=220)
l2.create_line(310, 0, 0, 0, width=25, fill='black')
l3 = Canvas(ven, width=10, height=310)
l3.place(x=130, y=25)
l3.create_line(0, 310, 0, 0, width=25, fill='black')
l4 = Canvas(ven, width=10, height=310)
l4.place(x=230, y=25)
l4.create_line(0, 310, 0, 0, width=25, fill='black')
#En esta parte se crean las 4 lineas que le dan forma al tablero , con su ancho , largo y posicion

def bloq(): #Funcion de bloqueo del juego     
for i in range(0, 9): #Ciclo que se encargara de detener el juego 
lisb[i].config(state="disable")#En esta parte se le ordena a todos los elementos del arreglo lisb[] , que son botones , que pasen al estado de disable        #Estado en el cual el usuario no  puede interactuar con ellos de ninguna manera

def inij():#Funcion de iniciar juego    for i in range(0, 9): #Ciclo que se encarga de hacer los preparativos para iniciar el juego        lisb[i].config(state="normal") #En esta parte se le ordena a todos los elementos del arreglo lisb[] , que son botones , que pasen al estado de normal        #Estado en el cual el usuario puede interactuar con ellos        lisb[i].config(bg="lightgray")#En esta parte se le da un color a los botones del arreglo lisb        lisb[i].config(text="")#En esta parte se le asigna un texto vacio a los botnes del arreglo listb        tab[i] = "N" #En esta parte se limpia el arreglo tab    global nomj1, nomj2  # indica a que variables queremos acceder
    nomj1 = tkSimpleDialog.askstring("Jugador", "Escribe el nombre del jugador 1: ")#Se ´pide el nombre del jugador 1    nomj2 = tkSimpleDialog.askstring("Jugador", "Escribe el nombre del jugador 2: ")#Se ´pide el nombre del jugador 2    if(nomj1==None or nomj1==""): nomj1="Uno" #Hace que el jugador 1 tome dicho nombre en caso de que el usuario olvodase escribirlo o clikease en cancelar en la caja de texto    if(nomj2==None or nomj2==""):nomj2="Dos" #Hace que el jugador 2 tome dicho nombre en caso de que el usuario olvodase escribirlo o clikease en cancelar en la caja de texto    turj.set("Turno: " + nomj1) #Hace que la variable turj tome el nombre del jugador 1 y se la envia a la etiqueta tue
def cam(num): #Funcion que se encarga de llenar las casillas con la figura correspondiente a cada jugador y tambien de llenar el arreglo tab , tomando en cuanta el boton pulsado con el parametro num    global turno, nomj1, nomj2
    if  turno == 0: #Turno del jugador 0        lisb[num].config(text="X") #Se llena el boton correspondiente al lugar num en el arreglo lisb con el texto "X"        lisb[num].config(bg="white")#Se le pone el colo blanco al boton correspondiente al lugar num en el arreglo lisb        tab[num] = "X" #Se llena el lugar num con la letra "X" en el arreglo tub        turno = 1 #Se pasa al siguiente turno        turj.set("Turno: " + nomj2)#Hace que la variable turj tome el nombre del jugador 2 y se la envia a la etiqueta tue    elif  turno == 1: #Turno del jugador 1        lisb[num].config(text="O")#Se llena el boton correspondiente al lugar num en el arreglo lisb con el texto "O"        lisb[num].config(bg="lightblue")#Se le pone el colo azul al boton correspondiente al lugar num en el arreglo lisb        tab[num] = "O" #Se llena el lugar num con la letra "O" en el arreglo tub        turno = 0#Se pasa al siguiente turno        turj.set("Turno: " + nomj1)#Hace que la variable turj tome el nombre del jugador 1 y se la envia a la etiqueta tue    lisb[num].config(state="disable") #El boton correspondiente al lugar num en el arreglo lisb queda en estado "disable" para que el jugador ya no pueda interactuar con el    verif() #Se llama a la funcion verif
def verif():#Funcion encargada de hacer las comparaciones entre casillas para determinar al ganador
    if (tab[0] == "X" and tab[1] == "X" and tab[2] == "X") or (tab[3] == "X" and tab[4] == "X" and tab[5] == "X") or (tab[6] == "X" and tab[7] == "X" and tab[8] == "X") or \
            (tab[0] == "X" and tab[3] == "X" and tab[6] == "X") or (tab[1] == "X" and tab[4] == "X" and tab[7] == "X") or (tab[2] == "X" and tab[5] == "X" and tab[8] == "X") or \
            (tab[0] == "X" and tab[4] == "X" and tab[8] == "X") or (tab[2] == "X" and tab[4] == "X" and tab[6] == "X"):
        #En esta parte se comparan las posiciones del arreglo tab para ver si existe alguna de las combinaciones que resultan en la victoria del jugador con la "X"        bloq()#Se llama a la funcion bloq
        tkMessageBox.showinfo("Ganaste", "Ganaste jugador: " + nomj1)#Se muestra un mensaje de victoria para el jugador 1 ya que si existia una de las combinaciones que lo hacen ganar

    elif (tab[0] == "O" and tab[1] == "O" and tab[2] == "O") or (tab[3] == "O" and tab[4] == "O" and tab[5] == "O") or \
            (tab[6] == "O" and tab[7] == "O" and tab[8] == "O") or (tab[0] == "O" and tab[3] == "O" and tab[6] == "O") or (tab[1] == "O" and tab[4] == "O" and tab[7] == "O") or (tab[2] == "O" and tab[5] == "O" and tab[8] == "O") or \
            (tab[0] == "O" and tab[4] == "O" and tab[8] == "O") or (tab[2] == "O" and tab[4] == "O" and tab[6] == "O"):
        # En esta parte se comparan las posiciones del arreglo tab para ver si existe alguna de las combinaciones que resultan en la victoria del jugador con la "O"        bloq()#Se llama a la funcion bloq        tkMessageBox.showinfo("Ganaste", "Ganaste jugador: " + nomj2)#Se muestra un mensaje de victoria para el jugador 2 ya que si existia una de las combinaciones que lo hacen ganar




b0 = Button(ven, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: cam(0))
lisb.append(b0)
b0.place(x=50, y=50)
b1 = Button(ven, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: cam(1))
lisb.append(b1)
b1.place(x=150, y=50)
b2 = Button(ven, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: cam(2))
lisb.append(b2)
b2.place(x=250, y=50)
b3 = Button(ven, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: cam(3))
lisb.append(b3)
b3.place(x=50, y=150)
b4 = Button(ven, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: cam(4))
lisb.append(b4)
b4.place(x=150, y=150)
b5 = Button(ven, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: cam(5))
lisb.append(b5)
b5.place(x=250, y=150)
b6 = Button(ven, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: cam(6))
lisb.append(b6)
b6.place(x=50, y=250)
b7 = Button(ven, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: cam(7))
lisb.append(b7)
b7.place(x=150, y=250)
b8 = Button(ven, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: cam(8))
lisb.append(b8)
b8.place(x=250, y=250)
#En esta parte se crean los botones con us dimenciones ,posiciones , contornos y funciones , ademas de que son introducidos al arreglo lisb

tue = Label(ven, textvariable=turj).place(x=140, y=10)#Se crea la etiqueta que anuncia el jugador en turno y se coloca en su posicionbini = Button(ven, bg='blue', fg='white', text='Iniciar juego', cursor="sizing", width=15, height=3,command=inij).place(x=130, y=360)#Se crea el boton que inica el juego con sus dimenciones , colores y funcionesbloq()#En esta parte se llama a la funcion bloq para que el jugador no pueda interactuar con los botones hasta no haber pulsado el botn de inicia juego
ven.mainloop()#Se dibuja la ventana y se mantiene activa
 
https://mega.nz/#!MyZ32DwA!O_40DJo8biyK_JMMwnolhbnl-xGiTkOjZpXwXEfoCAQ
 
Imagenes
 

2 comentarios: