Este proyecto es un Raycaster en C++ que simula un entorno estilo Doom. Utiliza las librerías SDL y SDL_Image para cargar imágenes, música y archivos de texto desde la carpeta "assets". El código fuente se encuentra en la carpeta "script" e incluye los archivos: main.cpp
, raycaster.h
, color.h
, imageLoader.h
y print.h
. Además, hay una carpeta "SDL2" que contiene las librerías SDL y SDL_Image necesarias para la ejecución.
El objetivo de este proyecto es desarrollar un Ray Caster simple que renderice un nivel jugable. Los puntos cubiertos fueron:
- Controlar al jugador sin atravesar las paredes ni causar fallos. ✅
- Mantener al menos 30 fps constantemente (los fps se deben mostrar). ❌
- Implementar una cámara con movimiento hacia adelante y hacia atrás, así como rotación. ✅
- Rotación horizontal con el mouse. ✅
- Incluir un minimapa que muestre la posición del jugador en una esquina del mundo. ✅
- Agregar música de fondo para una experiencia más inmersiva.✅
- Incorporar efectos de sonido. ✅
- Agregar al menos una animación a alguna sprite en la pantalla. ✅
- Incluir una pantalla de bienvenida. ✅
- Seleccionar entre múltiples niveles. ✅
- Pantalla de éxito cuando se cumpla una condición en el nivel. ✅
Este proyecto fue desarrollado en CLion para compilar y ejecutar. Asegúrate de tener instalado SDL y SDL_Image en tu entorno de desarrollo.
Enlace al Video de Demostración
- Librerías SDL y SDL_Image: Se encuentran en la carpeta "SDL2".
Se muestran detalles del archivo principal del proyecto Raycaster
.
La clase Raycaster
es el núcleo de tu proyecto y se encarga de renderizar el mundo en estilo Doom. Aquí hay una descripción de sus principales atributos y métodos:
-
Atributos:
player
: Una estructura que representa al jugador con información sobre su posición, orientación y campo de visión.map
: Un vector que almacena el mapa del mundo.renderer
: El renderizador de SDL para dibujar en la pantalla.scale
: Un factor de escala para ajustar la altura de las paredes.textSize
: El tamaño de textura utilizado para texturizar las paredes.
-
Métodos:
load_map(const string& filename)
: Carga el mapa desde un archivo de texto.render()
: Renderiza el mundo y realiza la proyección de rayos.has_won()
: Verifica si el jugador ha ganado al llegar a una posición específica en el mapa.draw_victory_screen()
: Dibuja la pantalla de victoria cuando el jugador gana.
La clase Fog
se encarga de dibujar un efecto de niebla en la pantalla para mejorar la estética del juego. Sus atributos principales son:
renderer
: El renderizador de SDL para dibujar el efecto de niebla.opacity
: La opacidad de la niebla.color
: El color de la niebla.
El método draw()
se utiliza para dibujar el efecto de niebla en la pantalla.
Estas estructuras almacenan información sobre el jugador y los impactos de rayos en el mundo, respectivamente. Son utilizadas por la clase Raycaster
para realizar cálculos y renderizar el juego.
El código también incluye diversas funciones y métodos adicionales para realizar tareas específicas, como proyección de rayos, dibujo de elementos en la pantalla y detección de colisiones.
Asegúrate de explorar el código fuente para obtener una comprensión completa de cómo se implementa el proyecto. Si tienes alguna pregunta o necesitas más información sobre una parte específica del código, no dudes en preguntar.
Si deseas contribuir a este proyecto, ¡te damos la bienvenida! Puedes abrir problemas (issues) y enviar solicitudes de extracción (pull requests) para mejorar el código y la funcionalidad.
Este proyecto se distribuye bajo la Licencia MIT.
¡Disfruta del juego! 😎