You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.0 KiB
92 lines
3.0 KiB
import tkinter as tk
|
|
import socket
|
|
import ast
|
|
|
|
# Creamos el socket una vez al inicio del cliente
|
|
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
host = '127.0.0.1'
|
|
port = 12345
|
|
client_socket.connect((host, port))
|
|
|
|
def recibir_casillas_especiales():
|
|
try:
|
|
# Recibe las coordenadas de las casillas especiales del servidor
|
|
data = client_socket.recv(1024).decode()
|
|
return ast.literal_eval(data)
|
|
except Exception as e:
|
|
print(f"Error al recibir las casillas especiales: {e}")
|
|
return []
|
|
|
|
intentos = 0
|
|
|
|
def enviar_posicion(fila, columna):
|
|
global intentos
|
|
try:
|
|
if intentos < 20:
|
|
# Envía la posición al servidor
|
|
mensaje = f"{fila},{columna}"
|
|
client_socket.sendall(mensaje.encode())
|
|
|
|
# Recibe la respuesta del servidor
|
|
respuesta = client_socket.recv(1024).decode()
|
|
print(f"Respuesta del servidor: {respuesta}")
|
|
|
|
# Actualiza el mensaje en la interfaz de usuario
|
|
lbl_estado.config(text=respuesta)
|
|
|
|
# Cambia el color de la casilla si es especial
|
|
if respuesta == "¡HAS TOCADO!":
|
|
btn = botones[fila][columna]
|
|
btn.config(bg="red")
|
|
elif respuesta == "¡AGUA!":
|
|
pass
|
|
|
|
intentos += 1
|
|
|
|
if intentos == 20:
|
|
lbl_estado_final.config(text="¡HAS AGOTADO TUS INTENTOS!")
|
|
root.after(2000, root.destroy)
|
|
|
|
# Actualiza el número de intentos en la interfaz de usuario
|
|
lbl_intentos.config(text=f"Intentos: {intentos}/20")
|
|
except Exception as e:
|
|
print(f"Error al enviar la posición al servidor: {e}")
|
|
|
|
def clic_casilla(fila, columna):
|
|
print(f"Posición clicada: ({fila}, {columna})")
|
|
enviar_posicion(fila, columna)
|
|
|
|
def crear_cuadricula(root, filas, columnas):
|
|
global botones
|
|
botones = []
|
|
for fila in range(filas):
|
|
fila_botones = []
|
|
for columna in range(columnas):
|
|
cuadricula = tk.Button(root, width=4, height=2, bg="blue", command=lambda f=fila, c=columna: clic_casilla(f, c))
|
|
cuadricula.grid(row=fila, column=columna)
|
|
fila_botones.append(cuadricula)
|
|
botones.append(fila_botones)
|
|
|
|
# Crea una etiqueta para mostrar el estado del clic
|
|
root = tk.Tk()
|
|
root.title("Hundir la Flota - Cliente")
|
|
lbl_estado = tk.Label(root, text="")
|
|
lbl_estado.grid(row=10, columnspan=10)
|
|
|
|
# Recibe las coordenadas de las casillas especiales
|
|
casillas_especiales = recibir_casillas_especiales()
|
|
print(f"Casillas especiales recibidas: {casillas_especiales}")
|
|
|
|
# Crear la cuadrícula de juego
|
|
crear_cuadricula(root, 10, 10)
|
|
|
|
# Etiqueta para mostrar el estado final del juego
|
|
lbl_estado_final = tk.Label(root, text="")
|
|
lbl_estado_final.grid(row=11, columnspan=10)
|
|
|
|
# Etiqueta para mostrar el número de intentos
|
|
lbl_intentos = tk.Label(root, text="Intentos: 0/20")
|
|
lbl_intentos.grid(row=12, columnspan=10)
|
|
|
|
root.mainloop()
|