Skip to content

Alpaca966/Naves

Repository files navigation

Naves

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.

Autores

  • Pablo N.M.
  • Angela C.L.
  • Mario R.M.
  • José Manuel M.P.

Descripción

"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.

Características Principales

  • 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.

Requisitos

Para compilar y ejecutar este proyecto necesitas:

  • GHC (Glasgow Haskell Compiler)
  • Cabal (Herramienta de construcción y gestión de paquetes)

Instalación y Ejecución

  1. Clona este repositorio en tu máquina local.
  2. Abre una terminal en la carpeta raíz del proyecto.
  3. Ejecuta el siguiente comando para descargar dependencias, compilar y ejecutar el juego:
cabal new-run

Controles

En Juego

El 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)

Menús y Navegación

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

Configuración del Torneo

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 ronda

Estructura del Proyecto

El 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.

About

Juego de Naves usando programación declarativa

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published