Juego de disparos espacial (Space Shooter) desarrollado en Haskell utilizando la biblioteca gráfica Gloss. Este proyecto fue realizado por el Grupo 9 de la asignatura de Programación Declarativa.
- Pablo N.M.
- Angela C.L.
- Mario R.M.
- José Manuel M.P.
"Naves" es un videojuego de acción frenética donde tomas el mando de una nave espacial para combatir contra oleadas de enemigos, un poderoso jefe final y esquivar peligrosos meteoritos. El objetivo es sobrevivir y destruir a la amenaza alienígena.
El juego implementa un sistema robusto de físicas y colisiones, así como una IA para controlar el comportamiento de las distintas entidades enemigas.
- Motor Gráfico: Construido sobre
Graphics.Gloss, con soporte para sprites (JuicyPixels) para naves, enemigos, proyectiles y fondos. - Sistema de Combate:
- Arma principal rápida controlada con el ratón.
- Bombas de área.
- Variedad de Enemigos:
- Naves enemigas.
- Jefes finales (
Boss) con torretas destructibles y múltiples fases. - Peligros ambientales como lluvias de meteoritos.
- Modos de Juego:
- Juego Normal: La experiencia estándar de supervivencia.
- Modo Torneo: Una competición estructurada en rondas consecutivas con dificultad progresiva y reglas personalizables.
- Sistema de Estadísticas: Generación de reportes detallados al finalizar la partida (precisión, enemigos abatidos, tiempo de juego, etc.).
- Configurable: Ajuste de parámetros del juego mediante archivos de texto.
Para compilar y ejecutar este proyecto necesitas:
- Clona este repositorio en tu máquina local.
- Abre una terminal en la carpeta raíz del proyecto.
- Ejecuta el siguiente comando para descargar dependencias, compilar y ejecutar el juego:
cabal new-runEl manejo de la nave es intuitivo, combinando teclado y ratón.
| Acción | Tecla / Input |
|---|---|
| Moverse | W, A, S, D o Flechas de dirección |
| Disparar | Clic Izquierdo del Ratón |
| Lanzar Bomba | Espacio |
| Salir / Pausar | ESC (Al salir se guardan las estadísticas) |
| Pantalla | Tecla | Acción |
|---|---|---|
| Menú Principal | Enter / Espacio |
Iniciar Juego Normal |
| Menú Principal | T |
Ir al menú de Modo Torneo |
| Menú Torneo | Enter / Espacio |
Iniciar el Torneo (Carga config) |
| Victoria / Derrota | R |
Reiniciar o volver al menú |
| Cualquier Pantalla | ESC |
Cerrar la aplicación |
El archivo config.txt en la raíz del proyecto permite personalizar la experiencia del Modo Torneo sin necesidad de recompilar. Puedes ajustar parámetros como:
- Dificultad: Vida del jugador, daño, cantidad de enemigos.
- Progresión: Cómo aumenta la dificultad (o disminuye tu vida/daño) ronda tras ronda.
Ejemplo de parámetros en config.txt:
numero_rondas = 3 # Cantidad de partidas del torneo
vida_primera_ronda = 1000 # Puntos de vida iniciales
incremento_naves = 1 # Enemigos extra por cada nueva rondaEl código fuente se organiza en las siguientes carpetas:
app/: Contiene el punto de entrada de la aplicación.Main.hs: Gestión del bucle principal, estados de pantalla y manejo de eventos.
src/: Módulos con la lógica del juego.Tipos.hs: Definición de estructuras de datos (GameState, Ship, Enemy, etc.).Fisica.hs: Lógica de movimiento, velocidad y actualización de posiciones.Colisiones.hs: Detección de impactos entre entidades.IA.hs: Inteligencia artificial y comportamiento de enemigos.Renderizar.hs: Funciones para dibujar el estado del juego en pantalla.Torneo.hs: Lógica específica y gestión de estado para el modo torneo.Estadisticas.hs: Recopilación y exportación de datos de juego.Meteoritos.hs: Generación y comportamiento de obstáculos.Stars.hs: Generación procedural del fondo estrellado.
data/: Archivos de datos como posiciones predefinidas de torretas.sprites/: Recursos gráficos (imágenes PNG) para naves, meteoritos, etc.