#-*- coding: utf-8 -*-from tkinter import * from tkinter import messagebox from tkinter import simpledialog # Variables globales.ventanaPrincipal = Tk() nombreJugador1 = "" # Variable que contendrá el nombre de un jugador.nombreJugador2 = "" # Variable que contendrá el nombre de un jugador.listaBotones = [] # Lista/arreglo que almacenará cada uno de los botones del tablero de juego.casillas = [] # Lista/arreglo que almacenará la elección de cada jugador.etiquetaTurnoJugador = StringVar() # Declara una variable Tkinter(), de tipo cadena para mostrar el nombre del jugador.numeroJugador = 0 # Variable para cambiar entre jugador según el turno correspondiente. # Función para configurar el diseño de la ventana principal y sus elementos.def tablero(): # Configuración de la ventana. ventanaPrincipal.title("Juego del gato") # Título de la ventana ventanaPrincipal.geometry("370x460") # Medidas de la ventana # Etiqueta en la que se muestra el nombre del jugador según sea su turno proporcionado por la variable turnoJugador etiquetaTurno = Label(ventanaPrincipal, textvariable=etiquetaTurnoJugador, font='bold 16') etiquetaTurno.place(x=130, y=10) # Coordenadas de posición en la ventana. # Botón de inicio del juego que ejecuta a la función iniciarJuego() botonIniciar = Button(ventanaPrincipal, bg='blue', fg='white', text='Iniciar juego', cursor="sizing", width=15, height=3, command=lambda: iniciarJuego()) botonIniciar.place(x=130, y=380) # Coordenadas de posición en la ventana. # Lineas que dividen el tablero. linea1 = Canvas(ventanaPrincipal, width=310, height=10) linea1.place(x=30, y=140) # Coordenadas de posición en la ventana. linea1.create_line(310, 0, 0, 0, width=25, fill='black') linea2 = Canvas(ventanaPrincipal, width=310, height=10) linea2.place(x=30, y=240) # Coordenadas de posición en la ventana. linea2.create_line(310, 0, 0, 0, width=25, fill='black') linea3 = Canvas(ventanaPrincipal, width=10, height=310) linea3.place(x=130, y=45) # Coordenadas de posición en la ventana. linea3.create_line(0, 310, 0, 0, width=25, fill='black') linea4 = Canvas(ventanaPrincipal, width=10, height=310) linea4.place(x=230, y=45) # Coordenadas de posición en la ventana. linea4.create_line(0, 310, 0, 0, width=25, fill='black') # Botones del tablero de juego que ejecutan la función selección() enviando un número que hace referencia a su posición. boton0 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(0)) listaBotones.append(boton0) # El botón se almacena en la lista de botones. boton0.place(x=50, y=70) # Coordenadas de posición en la ventana. boton1 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(1)) listaBotones.append(boton1) # El botón se almacena en la lista de botones. boton1.place(x=150, y=70) # Coordenadas de posición en la ventana. boton2 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(2)) listaBotones.append(boton2) # El botón se almacena en la lista de botones. boton2.place(x=250, y=70) # Coordenadas de posición en la ventana. boton3 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(3)) listaBotones.append(boton3) # El botón se almacena en la lista de botones. boton3.place(x=50, y=170) # Coordenadas de posición en la ventana. boton4 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(4)) listaBotones.append(boton4) # El botón se almacena en la lista de botones. boton4.place(x=150, y=170) # Coordenadas de posición en la ventana. boton5 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(5)) listaBotones.append(boton5) # El botón se almacena en la lista de botones. boton5.place(x=250, y=170) # Coordenadas de posición en la ventana. boton6 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(6)) listaBotones.append(boton6) # El botón se almacena en la lista de botones. boton6.place(x=50, y=270) # Coordenadas de posición en la ventana. boton7 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(7)) listaBotones.append(boton7) # El botón se almacena en la lista de botones. boton7.place(x=150, y=270) # Coordenadas de posición en la ventana. boton8 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(8)) listaBotones.append(boton8) # El botón se almacena en la lista de botones. boton8.place(x=250, y=270) # Coordenadas de posición en la ventana. # Se llena la lista -> casillas = [] con la letra "N" para que la lista tenga un tamaño de 9 elementos. for i in range(0, 9): # Ciclo en el que se le asignan valores a la variable "i" en un rango de 0 a 8. casillas.append("N") # Se almacena la letra N en la posición i de la lista/arreglo. # Función para bloquear todos los botones del tablero según sea necesario.def bloquearInicio(): for i in range(0, 9): # Ciclo en el que se le asignan valores a la variable "i" en un rango de 0 a 8. listaBotones[i].config(state="disable") # Se inhabilita el botón en la posición i de la lista/arreglo. # Función para iniciar la ejecución del juego.def iniciarJuego(): for i in range(0, 9): # Ciclo en el que se le asignan valores a la variable "i" en un rango de 0 a 8. listaBotones[i].config(state="normal") # Se habilita el botón en la posición i de la lista/arreglo. listaBotones[i].config(bg="lightgray") # Se le asigna un nuevo fondo al botón. listaBotones[i].config(text="") # Se le asigna una cadena de texto vacía al botón para limpiar cualquier texto anterior. casillas[i] = "N" # Para no tener que reiniciar la ventana al volver a precionar el botón Iniciar juego. print(casillas) global nombreJugador1, nombreJugador2 # Se llama a las variables globales a las que vamos a acceder. # Lanza una ventana de diálogo en la que se puede ingresar una cadena de texto, la cual se va almacenar en la variable. # Se le envía como parametro el título de la ventana y un mensaje para mostrar. nombreJugador1 = simpledialog.askstring("Jugador", "Escribe el nombre del jugador 1: ") nombreJugador2 = simpledialog.askstring("Jugador", "Escribe el nombre del jugador 2: ") # Comprobamos que no se hayan ingresado datos sin tipo a las variables de los nombres o cadenas vacías # Si se cumple la condición anterior se concatena el contenido de nombreJugador1 a la etiqueta que muestra los turnos. if ((nombreJugador1 and nombreJugador2) is not None) and ((nombreJugador1 and nombreJugador2)!=""): etiquetaTurnoJugador.set("Turno: " + nombreJugador1) else: #Si no se cumple la condición aparece una ventana informando el error, y se bloquea el inicio del juego. messagebox.showwarning("Error", "Favor de llenar correctamente los nombres de usuario.") bloquearInicio() # Función que slecciona y marca el botón (casilla) deacuerdo al turno y al jugador, recibiendo como parámetro el número del botón.def selecion(numero): global numeroJugador, nombreJugador1, nombreJugador2 # Se llama a las variables globales a las que vamos a acceder if numeroJugador == 0: # Se verifica que la casilla contenga N y que sea el turno del jugador 0. listaBotones[numero].config(text="X") # Coloca X en el botón. listaBotones[numero].config(bg="white") # Cambia el fondo del botón. casillas[numero] = "X" # Se almacena X en la lista casillas = [] numeroJugador = 1 # Cambia el turno del jugador. etiquetaTurnoJugador.set("Turno: " + nombreJugador2)# La etiqueta cambia y muestra el nombre del otro jugador. print (casillas) elif casillas[numero] == "N" and numeroJugador == 1: # Se verifica que la casilla contenga N y que sea el turno del jugador 1. listaBotones[numero].config(text="O") # Coloca O en el botón. listaBotones[numero].config(bg="lightblue") # Cambia el fondo del botón. casillas[numero] = "O" # Se almacena O en la lista casillas = [] numeroJugador = 0 # Cambia el turno del jugador. etiquetaTurnoJugador.set("Turno: " + nombreJugador1)# La etiqueta cambia y muestra el nombre del otro jugador. print (casillas) listaBotones[numero].config(state="disable") # El botón seleccionado de acuerdo a su número (parámetro enviado) se desactiva. verificarVictoria() # Se llama a la función verificarVictoria() al finalizar la selección en cada turno. # Función que ejecuta las condiciones de victoria.def verificarVictoria(): # Verificación de victoria horizontal para el numeroJugador = 0 (1). if (casillas[0] == "X" and casillas[1] == "X" and casillas[2] == "X") or ( casillas[3] == "X" and casillas[4] == "X" and casillas[5] == "X") or ( casillas[6] == "X" and casillas[7] == "X" and casillas[8] == "X"): bloquearInicio() # Bloquemos las botones. # Mostramos ventana de victoria con nombreJugador1. messagebox.showinfo("Ganaste", "Ganaste jugador: " + nombreJugador1) # Verificación de victoria vertical para el numeroJugador = 0 (1). elif (casillas[0] == "X" and casillas[3] == "X" and casillas[6] == "X") or ( casillas[1] == "X" and casillas[4] == "X" and casillas[7] == "X") or ( casillas[2] == "X" and casillas[5] == "X" and casillas[8] == "X"): bloquearInicio() # Bloquemos las botones. # Mostramos ventana de victoria con nombreJugador1. messagebox.showinfo("Ganaste", "Ganaste jugador: " + nombreJugador1) # Verificación de victoria diagonal para el numeroJugador = 0 (1). elif (casillas[0] == "X" and casillas[4] == "X" and casillas[8] == "X") or ( casillas[2] == "X" and casillas[4] == "X" and casillas[6] == "X"): bloquearInicio() # Bloquemos las botones. # Mostramos ventana de victoria con nombreJugador1. messagebox.showinfo("Ganaste", "Ganaste jugador: " + nombreJugador1) # Verificación de victoria horizontal para el numeroJugador = 1 (2). elif (casillas[0] == "O" and casillas[1] == "O" and casillas[2] == "O") or ( casillas[3] == "O" and casillas[4] == "O" and casillas[5] == "O") or ( casillas[6] == "O" and casillas[7] == "O" and casillas[8] == "O"): bloquearInicio() # Bloquemos las botones. # Mostramos ventana de victoria con nombreJugador2. messagebox.showinfo("Ganaste", "Ganaste jugador: " + nombreJugador2) # Verificación de victoria vertical para el numeroJugador = 1 (2). elif (casillas[0] == "O" and casillas[3] == "O" and casillas[6] == "O") or ( casillas[1] == "O" and casillas[4] == "O" and casillas[7] == "O") or ( casillas[2] == "O" and casillas[5] == "O" and casillas[8] == "O"): bloquearInicio() # Bloquemos las botones. # Mostramos ventana de victoria con nombreJugador2. messagebox.showinfo("Ganaste", "Ganaste jugador: " + nombreJugador2) # Verificación de victoria diagonal para el numeroJugador = 1 (2). elif (casillas[0] == "O" and casillas[4] == "O" and casillas[8] == "O") or ( casillas[2] == "O" and casillas[4] == "O" and casillas[6] == "O"): bloquearInicio() # Bloquemos las botones. # Mostramos ventana de victoria con nombreJugador2. messagebox.showinfo("Ganaste", "Ganaste jugador: " + nombreJugador2) # Si todas las condiciones anteriores no se cumplen y todas las casillas han sido seleccionadas # muestra una ventana de diálogo indicando el empate. elif (casillas[0] != "N" and casillas[1] != "N" and casillas[2] != "N" and casillas[3] != "N" and casillas[4] != "N" and casillas[5] != "N" and casillas[6] != "N" and casillas[7] != "N" and casillas[8] != "N"): bloquearInicio() # Bloquemos las botones. # Mostramos ventana de empate con los nombres de los jugadores. messagebox.showinfo("Empate", "Los jugadores: " + nombreJugador1 + " y " + nombreJugador2 + " han empatado.") tablero() # Se ejecuta la función tablero para crear todos los elementos de la ventana de juego.bloquearInicio() # Bloqueamos los botones.ventanaPrincipal.mainloop() # Se ejecuta la ventana principal.
martes, 24 de marzo de 2020
Juego del Gato
Suscribirse a:
Comentarios de la entrada (Atom)
No hay comentarios.:
Publicar un comentario