Tic-Tac-Toe Multiplayer Game
Descripción
Implementacion de un videojuego multijugador por terminal utilizando sockets para la comunicación cliente-servidor, con funcionalidades de inicio de sesión, persistencia de sesión mediante cookies y un protocolo de comunicación personalizado. Este proyecto ayudo a consolidar mis habilidades en sistemas distribuidos y destaca por el diseño de un protocolo de comunicación y la experiencia práctica en programación de redes.
Funcionalidades principales
- Servidor con múltiples conexiones: Maneja múltiples clientes conectados simultáneamente y actualiza el estado del juego utilizando sockets para comunicación bidireccional.
- Autenticación y sesiones: Permite a los jugadores iniciar sesión y mantener la sesión activa mediante cookies.
- Protocolo de comunicación: Diseño de un protocolo sencillo que define mensajes estructurados (JSON, texto plano, etc.), comandos básicos (iniciar partida, realizar jugada, consultar estado) y manejo de errores.
- Persistencia del juego: Guarda el estado de la partida en archivos JSON para garantizar la continuidad.
- Sincronización en tiempo real: Los clientes reciben actualizaciones inmediatas del estado del juego.
Protocolo de Comunicación
Los clientes envian mensajes al servidor en formato JSON:
{
"action": "move",
"data": {
"gameId": "1234",
"player": "X",
"position": [0, 1]
}
}
El servidor responde con el estado actualizado del juego:
{
"status": "success",
"data": {
"board": [
["X", "O", "X"],
["O", "X", " "],
[" ", " ", "O"]
],
"nextPlayer": "O"
}
}
Diagrama de arquitectura

Cómo jugar
- Inicia el servidor:
java Serverjava Server - Inicia los clientes:
java Clientjava Client1 java Client2 - Esperar a que un oponente se conecte. El registro e inicio de sesión se realizan automáticamente, generando un usuario y contraseña para cada cliente al ejecutar su clase correspondiente (Client1/Client2)
- Juega introduciendo coordenadas (x,y) desde la terminal (ej. 1,2 para fila 1, columna 2), una a la vez.
- Realizar movimientos en el tablero hasta que un jugador gane o se declare un empate.
Consulta la especificación completa en el repositorio.
Autenticación y Sesión
- Los usuarios se registran e inician sesión automáticamente al conectarse al servidor.
- El servidor genera un sessionId que el cliente envía en cada solicitud.
- Las sesiones se gestionan mediante cookies para evitar reautenticaciones innecesarias.
Accede al Proyecto
GitHubRetos y Aprendizajes
- Diseño e implementación de un protocolo de comunicación eficiente
- Gestión de múltiples clientes mediante sockets
- Implementación de autenticación y sesiones en una aplicación de red.
- Manejo de persistencia y sincronización del estado en un entorno multijugador.




