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()