Compare commits
No commits in common. 'master' and 'main' have entirely different histories.
@ -1,91 +0,0 @@
|
|||||||
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()
|
|
@ -1,46 +0,0 @@
|
|||||||
Juego Hundir la Flota - Cliente y Servidor
|
|
||||||
|
|
||||||
Este es un juego de Hundir la Flota implementado en un entorno cliente-servidor. El juego permite a un jugador intentar hundir barcos en una cuadrícula especial de 10x10 con casillas especiales.
|
|
||||||
|
|
||||||
|CLIENTE|
|
|
||||||
|
|
||||||
Requisitos
|
|
||||||
- Python 3.x
|
|
||||||
- Biblioteca tkinter (incluida en la instalación estándar de Python)
|
|
||||||
|
|
||||||
Ejecución
|
|
||||||
1. Ejecute el servidor antes de iniciar el cliente.
|
|
||||||
2. Abra una terminal y ejecute el script del cliente.
|
|
||||||
|
|
||||||
1.El cliente establecerá una conexión con el servidor y mostrará una interfaz gráfica del juego.
|
|
||||||
Funcionalidades
|
|
||||||
|
|
||||||
-El cliente tiene una cuadrícula de juego de 10x10.
|
|
||||||
-Puede hacer clic en las casillas para intentar hundir barcos.
|
|
||||||
-El juego le indicará si ha tocado un barco o si ha dado en el agua.
|
|
||||||
-El número de intentos está limitado a 20.
|
|
||||||
|
|
||||||
|SERVIDOR|
|
|
||||||
|
|
||||||
Requisitos
|
|
||||||
-Python 3.x
|
|
||||||
|
|
||||||
Ejecución
|
|
||||||
1.Abra una terminal y ejecute el script del servidor.
|
|
||||||
python servidor.py
|
|
||||||
|
|
||||||
|
|
||||||
1. El servidor esperará conexiones entrantes.
|
|
||||||
Funcionalidades
|
|
||||||
|
|
||||||
-El servidor gestiona la lógica del juego y las conexiones con los clientes.
|
|
||||||
-Define casillas especiales donde se encuentran los barcos.
|
|
||||||
-Envía las coordenadas de las casillas especiales al cliente al establecer la conexión.
|
|
||||||
-Recibe las coordenadas de los clics del cliente y envía la respuesta (tocaste o agua).
|
|
||||||
-Limita el número de intentos del cliente a 20.
|
|
||||||
|
|
||||||
Importante
|
|
||||||
|
|
||||||
-Asegúrese de tener permisos para ejecutar scripts y de que los puertos utilizados (predeterminadamente el 12345) estén disponibles.
|
|
||||||
-Se recomienda ejecutar el servidor en un terminal y el cliente en otro.
|
|
||||||
¡Disfrute del juego Hundir la Flota!
|
|
@ -1,52 +0,0 @@
|
|||||||
import socket
|
|
||||||
import threading
|
|
||||||
import random
|
|
||||||
|
|
||||||
# Define las coordenadas de casillas especiales
|
|
||||||
casillas_especiales = [(2, 5), (3, 3), (4, 7), (5, 2), (6, 0),
|
|
||||||
(6, 5), (7, 8), (8, 4), (9, 1), (9, 9)]
|
|
||||||
|
|
||||||
def manejar_conexion(conn, addr):
|
|
||||||
print(f"Conexión establecida con {addr}")
|
|
||||||
|
|
||||||
# Envía las coordenadas de las casillas especiales al cliente
|
|
||||||
conn.sendall(str(casillas_especiales).encode())
|
|
||||||
|
|
||||||
intentos = 0
|
|
||||||
|
|
||||||
while intentos < 20:
|
|
||||||
data = conn.recv(1024).decode()
|
|
||||||
if not data:
|
|
||||||
break
|
|
||||||
print(f"Mensaje recibido de {addr}: {data}")
|
|
||||||
|
|
||||||
# Verifica si la casilla clicada es especial y envía la respuesta al cliente
|
|
||||||
fila, columna = map(int, data.split(','))
|
|
||||||
if (fila, columna) in casillas_especiales:
|
|
||||||
respuesta = "¡HAS TOCADO!"
|
|
||||||
else:
|
|
||||||
respuesta = "¡AGUA!"
|
|
||||||
conn.sendall(respuesta.encode())
|
|
||||||
|
|
||||||
intentos += 1
|
|
||||||
|
|
||||||
print(f"Conexión cerrada con {addr}")
|
|
||||||
conn.close()
|
|
||||||
|
|
||||||
def main():
|
|
||||||
host = '127.0.0.1'
|
|
||||||
port = 12345
|
|
||||||
|
|
||||||
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
||||||
server_socket.bind((host, port))
|
|
||||||
server_socket.listen(5)
|
|
||||||
|
|
||||||
print("Servidor esperando conexiones...")
|
|
||||||
|
|
||||||
while True:
|
|
||||||
conn, addr = server_socket.accept()
|
|
||||||
thread = threading.Thread(target=manejar_conexion, args=(conn, addr))
|
|
||||||
thread.start()
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
Loading…
Reference in new issue