Saltar al contenido
>David Cortes_
Todos los proyectos
Proyecto personalVideojuego multijugadorEn producción

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.

Pantalla de victoria con el mensaje del ganador al final de una partida.

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

Vista del jugador 1 durante una partida: dos naves intercambiando disparos con vidas y puntajes visibles.
Vista del jugador 2 de la misma partida sincronizada.

¿Tienes un proyecto en mente?

Estoy disponible para nuevas oportunidades y colaboraciones. Un correo directo es la forma más rápida de iniciar la conversación.