Space Destroyer
Duelo de naves para dos jugadores escrito en Python y Pygame, conectado por sockets TCP crudos con un servidor dedicado multihilo que maneja el emparejamiento y el relevo de estado.

Descripción general
Un duelo de naves para dos jugadores donde la parte de redes importa tanto como el juego. Cada cliente corre Pygame localmente mientras un proceso servidor independiente maneja las conexiones: asigna a cada jugador un ID, los empareja y mantiene un hilo por cliente durante toda la partida.
El problema
Los juegos de Pygame son de un solo jugador por defecto. Compartir el estado del juego entre dos máquinas implica resolver la sincronización uno mismo: quién posee la verdad, cómo viaja el estado y qué ven los jugadores mientras nadie más se ha conectado.
Lo que construí
Diseñé un protocolo cliente-servidor mínimo sobre TCP: un servidor de sockets en Python que acepta dos jugadores, guarda su último estado conocido y responde cada mensaje del cliente con el estado de su rival usando un hilo por conexión. La pantalla de espera, el emparejamiento y la condición de victoria surgen de ese intercambio.
Características clave
- Proceso servidor dedicado, independiente de los clientes, ejecutable en cualquier máquina de la misma red.
- Emparejamiento básico: el primer jugador espera; la segunda conexión inicia la partida automáticamente.
- Un hilo por cliente en el servidor para manejar conexiones concurrentes.
- Frames de texto compactos con posición, balas, puntaje y vida en cada intercambio.
- Mecánicas clásicas: movimiento lateral, disparos láser con límite de tres balas, punto por impacto, corazones que resisten seis impactos y pantalla de victoria.
Decisiones técnicas
- Sockets TCP con un hilo por cliente: entrega ordenada y confiable, fácil de razonar para un juego de dos jugadores.
- Estado relevado por el servidor central en lugar de punto a punto, así los clientes nunca necesitan conocer la dirección del otro.
- Frames de texto plano en vez de una librería de serialización: triviales de depurar con prints y netcat.
Tecnologías
- Python
- Pygame
- Sockets (TCP)
- Threading
Capturas de pantalla

