Un juego de invasión espacial tipo Space Invaders desarrollado en C usando la biblioteca ncurses para interfaz de terminal.
Los cielos oscuros sobre la Tierra anuncian una amenaza inminente: una invasión alienígena está en marcha. Los enemigos del espacio exterior han lanzado una ofensiva contra la Facultad de Matemática y Computación de la Universidad de la Habana, y la humanidad depende de tus habilidades para repeler la invasión.
MatCom Invasion es un juego arcade clásico donde controlas una nave espacial para defender la tierra de invasores alienígenas. Dispara a los enemigos, esquiva colisiones y alcanza el puntaje más alto.
- ✨ Interfaz de terminal con colores usando ncurses
- 🎮 Sistema de jugador con 3 vidas
- 👾 Múltiples tipos de enemigos alienígenas
- 💥 Sistema de colisiones y disparos
- 🏆 Tabla de puntajes altos (Top 10)
- 💾 Sistema de guardado y carga de partidas
- ⏸️ Menú de pausa con opciones de guardado
- 🎯 Algoritmo LRU para gestión de frames de enemigos
- 🧵 Arquitectura multihilo (concurrencia con pthread)
- GCC (compilador de C)
- Make
- libncurses5-dev (biblioteca ncurses)
- pthread (para multithreading)
sudo apt-get update
sudo apt-get install -y libncurses5-dev libncursesw5-dev gcc makeO simplemente usa:
make install-depssudo pacman -S ncurses gcc makesudo dnf install ncurses-devel gcc makemakemake runmake debugmake release- ↑/↓: Navegar por las opciones
- Espacio: Seleccionar opción
- Letras/Números: Ingresar nombre de jugador
- A / ←: Mover izquierda
- D / →: Mover derecha
- W / ↑: Mover arriba
- S / ↓: Mover abajo
- Espacio: Disparar
- Q: Pausar juego
- ↑/↓: Navegar opciones
- Espacio: Seleccionar
- S: Volver al menú principal (en pantalla de scores)
MatCom-Invasion/
├── src/ # Código fuente (.c)
│ ├── main.c # Punto de entrada
│ ├── game.c # Lógica del juego
│ ├── draw.c # Funciones de dibujo
│ ├── input.c # Manejo de entrada
│ └── score.c # Sistema de puntajes
├── include/ # Archivos de cabecera (.h)
│ ├── types.h # Definiciones de tipos
│ ├── config.h # Configuraciones
│ ├── game.h
│ ├── draw.h
│ ├── input.h
│ └── score.h
├── data/ # Datos del juego
│ ├── high_scores.txt # Puntajes altos
│ └── saved_game.dat # Partida guardada
├── build/ # Archivos objeto (.o)
├── bin/ # Ejecutable compilado
├── Makefile # Sistema de compilación
└── README.md # Este archivo
- START NEW GAME: Iniciar nueva partida
- START SAVED GAME: Cargar partida guardada
- BEST SCORES: Ver tabla de mejores puntajes
- EXIT: Salir del juego
El juego guarda automáticamente:
- Puntajes altos: Se guardan automáticamente al terminar cada partida
- Partida: Puedes guardar tu progreso desde el menú de pausa
Ubicaciones:
- Puntajes:
data/high_scores.txt - Partida guardada:
data/saved_game.dat
make cleanmake distcleanmake helpPuedes modificar la configuración del juego editando include/config.h:
DELAY: Velocidad del juego (microsegundos entre frames)NUMBER_BULLETS: Máximo de balas simultáneasNUMBER_ALIENS: Máximo de aliens simultáneosMAX_HIGH_SCORES: Cantidad de puntajes a guardar
El juego utiliza programación orientada a eventos para manejar las interacciones del jugador con el entorno. Detecta eventos como entrada del teclado y responde apropiadamente (mover nave, disparar, etc.).
Se utilizan dos hilos principales para ejecutar tareas en paralelo:
- Hilo de juego: Actualiza estado del juego y renderiza gráficos
- Hilo de entrada: Maneja input del usuario en tiempo real
- Sincronización: Usa mutex (
pthread_mutex) para evitar condiciones de carrera
Implementa el algoritmo Least Recently Used (LRU) para determinar dónde aparecerán los enemigos en el campo de juego. Gestiona frames de memoria para los aliens de manera eficiente.
Usado para asignación eficiente de recursos:
- Gestión de bullets (disparos)
- Gestión de aliens activos
- Optimiza el uso de memoria del juego
Proyecto desarrollado como parte del curso de Sistemas Operativos en la Facultad de Matemática y Computación, Universidad de La Habana.
Este proyecto es de código abierto para fines educativos.
¡Disfruta del juego y defiende MatCom! 🌍🚀