Juego del Gato en Python
Capturas:
Código:
from Tkinter import * """Manda alertas al usuario mediante una caja de texto"""import tkMessageBox from SimpleDialog import SimpleDialog """Son cajas con las cuales nosotros podemos pedir por ejemplo los nombres del jugador dentro del programa parahacerlo un poco mas interactivo"""import tkSimpleDialog def bloquear(): """Bloqueamos los botones """ for i in range(0, 9): listaBotones[i].config(state="disable") def iniciarJ(): """Necesitamos desbloquear los botones""" for i in range(0, 9): listaBotones[i].config(state="normal") listaBotones[i].config(bg="blue") listaBotones[i].config(text="") tablero[i] = "N" """ La palabra global nos sirve para definir que estamos utilizando una variable global y no una local, el tksimpledialog nos sirve para mostrar unas cajas de texto, que es una de las importaciones que estamos utilizando mas arriba """ global nombreJugador1, nombreJugador2 nombreJugador1 = tkSimpleDialog.askstring("Jugador", "Escribe el nombre del jugador 1: ") nombreJugador2 = tkSimpleDialog.askstring("Jugador", "Escribe el nombre del jugador 2: ") """ Aqui ponemos el turno del jugador""" turnoJugador.set("Turno: " + nombreJugador1) def cambiar(num): global turno, nombreJugador1, nombreJugador2 if tablero[num] == "N" and turno == 0: listaBotones[num].config(text="X") listaBotones[num].config(bg="white") tablero[num] = "X" turno = 1 turnoJugador.set("Turno jugador: " + nombreJugador1) elif tablero[num] == "N" and turno == 1: listaBotones[num].config(text="O") listaBotones[num].config(bg="lightblue") tablero[num] = "O" turno = 0 turnoJugador.set("Turno jugador: " + nombreJugador2) listaBotones[num].config(state="disable") verificar() """Con Esta funcion verificamos que jugador gano"""def verificar(): if (tablero[0] == "X" and tablero[1] == "X" and tablero[2] == "X") or ( tablero[3] == "X" and tablero[4] == "X" and tablero[5] == "X") or ( tablero[6] == "X" and tablero[7] == "X" and tablero[8] == "X"): bloquear() tkMessageBox.showinfo("Ganador", "Ganaste jugador " + nombreJugador1) elif (tablero[0] == "X" and tablero[3] == "X" and tablero[6] == "X") or ( tablero[1] == "X" and tablero[4] == "X" and tablero[7] == "X") or ( tablero[2] == "X" and tablero[5] == "X" and tablero[8] == "X"): bloquear() tkMessageBox.showinfo("Ganador", "Ganaste jugador " + nombreJugador1) elif (tablero[0] == "X" and tablero[4] == "X" and tablero[8] == "X") or ( tablero[2] == "X" and tablero[4] == "X" and tablero[6] == "X"): bloquear() tkMessageBox.showinfo("Ganador", "Ganaste jugador " + nombreJugador1) elif (tablero[0] == "O" and tablero[1] == "O" and tablero[2] == "O") or ( tablero[3] == "O" and tablero[4] == "O" and tablero[5] == "O") or ( tablero[6] == "O" and tablero[7] == "O" and tablero[8] == "O"): bloquear() tkMessageBox.showinfo("Ganador", "Ganaste jugador " + nombreJugador2) elif (tablero[0] == "O" and tablero[3] == "O" and tablero[6] == "O") or ( tablero[1] == "O" and tablero[4] == "O" and tablero[7] == "O") or ( tablero[2] == "O" and tablero[5] == "O" and tablero[8] == "O"): bloquear() tkMessageBox.showinfo("Ganador", "Ganaste jugador " + nombreJugador2) elif (tablero[0] == "O" and tablero[4] == "O" and tablero[8] == "O") or ( tablero[2] == "O" and tablero[4] == "O" and tablero[6] == "O"): bloquear() tkMessageBox.showinfo("Ganador", "Ganaste jugador " + nombreJugador2) """Creamos nuestra ventana (ventana es igual a un nuevo constructor de Tkinter)"""Ventana = Tk() """Empezamos a configuar las cosas basicas como la geometria"""Ventana.geometry("400x500") Ventana.title("Juego de gato") Ventana.config(bg="white") """ Se va a manejar una variable turno que sera de tipo entero y nos dira el turno del jugador en caso de que sea turnodel jugador 1 o 2 """turno = 0""" Queremos hacer un juego interactivo por lo tanto vamos a pedir los nombres de los jugadores """nombreJugador1 = ""nombreJugador2 = "" """ Ahora vamos a declarar una lista de botones para crear el tablero """listaBotones = [] """ Necesitamos llevar un control interno del tablero por lo que hay que crear una lista del tablero dondeinternamente manejamos donde hay una X, una O o donde no hay nada """tablero = [] """ Por ultimo haremos una etiqueta donde nos diga que jugador esta actuando, declaramos un stringvar que pueda estarcambiando el nombre del jugador """turnoJugador = StringVar() """ Si el tablero no tienen nada adentro le asignamos tres valor X, O u N """for i in range(0, 9): """ estamos agregando al tablero una N para saber que no hay nada ahi al principio """ tablero.append("N") """ Despues de esto empezamos a generar cada uno de los botones """""" Boton0 es igual a un nuevo boton que estara dentro de la ventana que tiene un ancho y un alto y despueslleva el comando de la funcion que queremos mandar llamar """boton0 = Button(Ventana, width=9, height=3, command=lambda: cambiar(0)) """ la lista de botones va a agregar al boton0 para que despues lo podamos modificar en el momento que nosotrosqueseemos """listaBotones.append(boton0) """ Le damos una localizacion al boton """boton0.place(x=50, y=50) """" Creamos todos los botones """boton1 = Button(Ventana, width=9, height=3, command=lambda: cambiar(1)) listaBotones.append(boton1) boton1.place(x=150, y=50) boton2 = Button(Ventana, width=9, height=3, command=lambda: cambiar(2)) listaBotones.append(boton2) boton2.place(x=250, y=50) boton3 = Button(Ventana, width=9, height=3, command=lambda: cambiar(3)) listaBotones.append(boton3) boton3.place(x=50, y=150) boton4 = Button(Ventana, width=9, height=3, command=lambda: cambiar(4)) listaBotones.append(boton4) boton4.place(x=150, y=150) boton5 = Button(Ventana, width=9, height=3, command=lambda: cambiar(5)) listaBotones.append(boton5) boton5.place(x=250, y=150) boton6 = Button(Ventana, width=9, height=3, command=lambda: cambiar(6)) listaBotones.append(boton6) boton6.place(x=50, y=250) boton7 = Button(Ventana, width=9, height=3, command=lambda: cambiar(7)) listaBotones.append(boton7) boton7.place(x=150, y=250) boton8 = Button(Ventana, width=9, height=3, command=lambda: cambiar(8)) listaBotones.append(boton8) boton8.place(x=250, y=250) """ Ahora vaos a deshabilitar los botones para que no se les pueda dar click antes de iniciar el juego y despuesanyadir otro boton para iniciar el juego, se anyadira tambien la etiqueta del jugador """ turnoEtiqueta = Label(Ventana, textvariable=turnoJugador).place(x=100, y=20) iniciar = Button(Ventana, bg='blue', fg='white', text='Iniciar juego', width=15, height=3, command=iniciarJ).place( x=130, y=350) """ Ahora vamos a crear la funcion bloquear """bloquear() print(tablero) Ventana.mainloop() """ Al momento de nosotros utilizar la funcion command=cambiar en los botones hay un error de logica porque al momentode dar click en iniciar se mandan los numeros que esta mandando cada boton y ya no pasa nada mas, para solucionar estose usa una funcion llamada lambda que son funciones anonimas de una sola linea, como lambda no recibe parametrosentonces no se manda a llamar automaticamente al momento de iniciar la ventana, pero al darle click lamba lo que tieneadentro manda a llamar la funcion cambiar en este caso y asi se truquea el error """
No hay comentarios:
Publicar un comentario