⚡ Inicio Rápido: Si quieres empezar inmediatamente, ejecuta:
scripts/install-deps.sh # Instala Allegro y dependencias automáticamente scripts/build.sh run # Compila y ejecuta el juegoO consulta
QUICK_START.mdpara instrucciones detalladas.
- Space Invaders en C
- 📑 Tabla de Contenidos
- 📋 Descripción del Proyecto
- 🏗️ Arquitectura del Proyecto
- 🔧 Requisitos del Sistema
- 📦 Instalación de Dependencias
- 🚀 Compilación y Ejecución
- 🎮 Controles del Juego
- ⚙️ Configuración del Juego
- 🐛 Solución de Problemas
- 📝 Desarrollo y Contribución
- 📜 Licencia
- 🤝 Contribuciones
- 📞 Contacto
- 📚 Referencias y Recursos
- 🙏 Agradecimientos
Space Invaders en C es una implementación del clásico juego arcade desarrollada en C utilizando la biblioteca gráfica Allegro 5. El proyecto demuestra programación estructurada, gestión de memoria dinámica, detección de colisiones, y renderizado de gráficos 2D.
- Nave espacial controlable con movimiento lateral y disparo
- 55 invasores alienígenas organizados en formación (11x5)
- Sistema de colisiones entre proyectiles y entidades
- Sistema de puntuación por tipo de enemigo (10/20/30 puntos)
- Sistema de vidas (3 vidas iniciales)
- Sprites y animaciones personalizadas
- Efectos de sonido integrados
- Configuración modular en
config.h
space-invaders-c/
├── scripts/ # Scripts de automatización
│ ├── install-deps.sh # Instalador de dependencias (macOS/Linux)
│ ├── install-deps.bat # Instalador de dependencias (Windows)
│ ├── build.sh # Script de compilación (macOS/Linux)
│ ├── build.bat # Script de compilación (Windows)
│ └── test_resources.sh # Verificador de recursos
├── include/ # Archivos de cabecera (.h)
│ ├── bullet.h # Gestión de proyectiles
│ ├── config.h # Configuración centralizada
│ ├── game.h # Lógica principal del juego
│ ├── martian.h # Lógica de enemigos
│ ├── object.h # Objetos genéricos (explosiones, etc.)
│ ├── ship.h # Lógica de la nave del jugador
│ └── types.h # Tipos y enumeraciones
├── src/ # Código fuente (.c)
│ ├── main.c # Punto de entrada
│ ├── game.c # Bucle principal y gestión del juego
│ ├── bullet.c # Implementación de proyectiles
│ ├── ship.c # Implementación de la nave
│ ├── martian.c # Implementación de enemigos
│ └── object.c # Implementación de objetos
├── resources/ # Recursos del juego
│ ├── images/ # Sprites y gráficos (.bmp, .png)
│ ├── sounds/ # Efectos de sonido (.wav)
│ └── fonts/ # Fuentes (.ttf)
├── lib/ # Bibliotecas de Allegro (Windows)
├── Makefile # Makefile para Windows
├── Makefile.unix # Makefile para macOS/Linux
└── README.md # Este archivo
- Compilador C: GCC (recomendado: MinGW-w64 para Windows, GCC/Clang para macOS)
- Biblioteca Allegro 5: Versión 5.2 o superior
- Make: Para usar el Makefile (opcional en Windows, usar mingw32-make)
- Git: Para clonar el repositorio
- Windows 10/11 (x64)
- macOS 10.15+ (Catalina o superior)
- Linux (Ubuntu, Debian, Fedora, Arch)
- Instalar Homebrew (si no lo tienes):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"- Instalar Allegro 5:
brew install allegro- Verificar instalación:
pkg-config --modversion allegro-5Ejecuta el instalador desde CMD o PowerShell como Administrador:
scripts\install-deps.batEste script descargará e instalará automáticamente:
- MinGW 14.1.0 en
C:\mingw64 - Allegro 5.2.9 en
C:\allegro-5.2.9.1-mingw-14.1.0
Si prefieres hacerlo tú mismo:
- Descarga MinGW 14.1.0 (WinLibs) y extráelo en
C:\mingw64. - Descarga Allegro 5.2.9 (MinGW 13.2.0 compatible) y extráelo en
C:\allegro-5.2.9.1-mingw-14.1.0.
- Descarga Allegro 5.2 precompilado desde: https://github.com/liballeg/allegro5/releases
- Extrae en
C:\allegro-5.2.9.1-mingw-14.1.0\(o actualiza las rutas en el Makefile)
sudo apt update
sudo apt install build-essential
sudo apt install liballegro5-dev liballegro5.2sudo dnf install gcc make
sudo dnf install allegro5-devel allegro5git clone https://github.com/RGiskard7/space-invaders-c.git
cd space-invaders-cOpción A: Crear un Makefile nuevo para Unix
Dado que el Makefile actual está configurado para Windows, crea un archivo Makefile.unix:
# Makefile.unix para macOS/Linux
CC=gcc
CFLAGS=-g -Wall -pedantic
EXECUTABLE=SpaceInvaders
# Detección automática de pkg-config
ALLEGRO_LIBS=$(shell pkg-config --libs allegro-5 allegro_main-5 allegro_image-5 allegro_font-5 allegro_ttf-5 allegro_primitives-5)
ALLEGRO_CFLAGS=$(shell pkg-config --cflags allegro-5)
# Archivos fuente y objetos
SRCS=src/main.c src/game.c src/bullet.c src/ship.c src/martian.c src/object.c
OBJS=main.o game.o bullet.o ship.o martian.o object.o
# Regla por defecto
all: $(EXECUTABLE)
# Regla para compilar el ejecutable
$(EXECUTABLE): $(OBJS)
@echo "Compilando Space Invaders..."
$(CC) $(CFLAGS) -o $(EXECUTABLE) $(OBJS) $(ALLEGRO_LIBS)
@echo "Compilacion exitosa: ./$(EXECUTABLE)"
# Reglas para compilar objetos
%.o: src/%.c
$(CC) $(ALLEGRO_CFLAGS) -I include $(CFLAGS) -c $< -o $@
# Limpiar archivos generados
clean:
rm -f *.o $(EXECUTABLE)
# Ejecutar el juego
run: all
./$(EXECUTABLE)
# Empaquetar
dist: clean
tar -czf space-invaders.tar.gz src/ include/ resources/ Makefile.unix README.md
.PHONY: all clean run distLuego compila con:
make -f Makefile.unixOpción B: Compilación manual
# Compilar archivos objeto
gcc -c src/main.c -I include $(pkg-config --cflags allegro-5) -o main.o
gcc -c src/game.c -I include $(pkg-config --cflags allegro-5) -o game.o
gcc -c src/bullet.c -I include $(pkg-config --cflags allegro-5) -o bullet.o
gcc -c src/ship.c -I include $(pkg-config --cflags allegro-5) -o ship.o
gcc -c src/martian.c -I include $(pkg-config --cflags allegro-5) -o martian.o
gcc -c src/object.c -I include $(pkg-config --cflags allegro-5) -o object.o
# Enlazar
gcc -o SpaceInvaders main.o game.o bullet.o ship.o martian.o object.o \
$(pkg-config --libs allegro-5 allegro_main-5 allegro_image-5 allegro_font-5 allegro_ttf-5 allegro_primitives-5)Opción A: Script Automático (Recomendado)
scripts\build.bat runOpción B: Manual (MinGW)
Asegúrate de que C:\mingw64\bin esté en tu PATH y ejecuta:
mingw32-make
SpaceInvaders.exe./SpaceInvadersSpaceInvaders.exeSi usas VS Code, el proyecto ya está configurado para compilar y ejecutar fácilmente:
- Compilar y Jugar: Pulsa
F5.- Esto recompilará automáticamente cualquier cambio y lanzará el juego con el depurador.
- Solo Compilar: Pulsa
Ctrl+Shift+B.- Útil para verificar errores sin abrir el juego.
| Tecla | Acción |
|---|---|
← (Flecha Izquierda) |
Mover nave a la izquierda |
→ (Flecha Derecha) |
Mover nave a la derecha |
ESPACIO |
Disparar proyectil |
ESC |
Salir del juego |
Puedes modificar parámetros del juego editando include/config.h:
// Resolución de pantalla
#define DISPLAY_HEIGHT 600
#define DISPLAY_WIDTH 600
// Configuración de la nave
#define SHIP_SPEED 6 // Velocidad de movimiento
#define SHIP_BULLET_SPEED 15 // Velocidad de proyectiles
#define SHIP_LIFE 3 // Vidas iniciales
// Configuración de marcianos
#define MAX_ENEMIES 55 // Número de enemigos
#define MART_SPEED 5 // Velocidad de enemigos
#define MART_BULLET_SPEED 5 // Velocidad de disparos
// Modo Dios (invencibilidad)
#define GOD_MODE 0 // 0 = desactivado, 1 = activado
// Puntuación por tipo de enemigo
#define POINTS_01 30 // Fila superior
#define POINTS_02 20 // Fila media
#define POINTS_03 10 // Fila inferiorDespués de modificar config.h, recompila el proyecto.
# Verifica que pkg-config encuentra Allegro
pkg-config --modversion allegro-5
# Si no aparece, reinstala Allegro
brew reinstall allegro # macOS
sudo apt reinstall liballegro5-dev # LinuxEl Makefile busca la biblioteca en rutas específicas. Soluciones:
- Usa las DLLs incluidas: Copia
allegro_monolith-5.2.dlla la misma carpeta que el.exe - Ajusta las rutas en el Makefile (líneas 8-16)
- Instala Allegro con MSYS2:
pacman -S mingw-w64-x86_64-allegroProblema: Las rutas de recursos no son correctas o el juego no se ejecuta desde el directorio correcto.
Solución:
- Ejecuta el juego SIEMPRE desde el directorio raíz del proyecto:
# ✅ Correcto
cd space-invaders-c
./SpaceInvaders
# ❌ Incorrecto
cd space-invaders-c/src
../SpaceInvaders # No encontrará los recursos- Verifica que las rutas en
config.hsean correctas:
// ✅ Correcto (ejecutable en directorio raíz)
#define BACKGROUND_IMG_RSC "resources/images/background.bmp"
// ❌ Incorrecto
#define BACKGROUND_IMG_RSC "../resources/images/background.bmp"- Usa el script de verificación:
scripts/test_resources.shEste script te dirá si todos los recursos son accesibles desde la ubicación actual.
Falta enlazar alguna biblioteca de Allegro. Asegúrate de incluir:
allegro_monolith(Windows) o todas las individuales (Unix):allegro-5allegro_main-5allegro_image-5allegro_font-5allegro_ttf-5allegro_primitives-5
chmod +x SpaceInvaders
./SpaceInvaders# macOS/Linux
make -f Makefile.unix
# Ya incluye -g para debug
# Windows
mingw32-make
# Ya incluye -g en CFLAGSvalgrind --leak-check=full ./SpaceInvadersAl contribuir, sigue este formato:
tipo(alcance): descripción breve
- Detalle 1
- Detalle 2
Ejemplos:
feat(ship): añadir escudo temporalfix(collision): corregir detección con bordesdocs(readme): actualizar instrucciones de macOS
- Fase 1: Mecánicas básicas (movimiento, disparos, colisiones)
- Fase 2: Sistema de puntuación y vidas
- Fase 3: Menú principal y pantalla de Game Over
- Fase 4: Niveles progresivos con dificultad creciente
- Fase 5: Power-ups y mejoras de nave
- Fase 6: Tabla de puntuaciones (high scores)
Este proyecto está bajo la licencia MIT. Consulta el archivo LICENSE para más información.
MIT License
Copyright (c) 2024 RGiskard7
Se concede permiso para usar, copiar, modificar y distribuir este software
con o sin fines comerciales, siempre que se incluya este aviso de copyright.
¡Las contribuciones son bienvenidas! Para contribuir:
- Haz un fork del repositorio
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -m 'feat: añadir nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
- Mejorar sprites y animaciones
- Añadir más efectos de sonido
- Implementar música de fondo
- Sistema de puntuaciones persistente
- Soporte para múltiples idiomas
- Soporte para gamepad/joystick
- Autor: RGiskard7
- GitHub: @RGiskard7
- Repositorio: space-invaders-c
- Issues: Reportar un bug
- Allegro 5 Documentation: https://liballeg.org/a5docs/trunk/
- Space Invaders Original: https://en.wikipedia.org/wiki/Space_Invaders
- C Programming: https://www.learn-c.org/
- Game Development Patterns: https://gameprogrammingpatterns.com/
- Comunidad de Allegro 5 por la excelente biblioteca
- Taito Corporation por el juego original Space Invaders (1978)
- Todos los contribuidores y testers del proyecto
¿Te gustó el proyecto? ¡Dale una ⭐ en GitHub!
Desarrollado por Edu Díaz (RGiskard7) ❤️