Este proyecto fue propuesto para el curso de programación paralela y concurrente del ciclo VII de la carrera de Ingeniería de Sistemas de la Universidad Nacional Mayor de San Marcos.
La finalidad de este proyecto era aplicar los conocimientos en programación paralela y concurrente mediante un lenguaje de programación, a elección del alumno.
Se aplicó:
- Aplicación de threads.
- Aplicación de mutex.
- Aplicación de divide y vencerás.
- Aplicación de semáforos.
- Aplicación de variables de condición.
Este juego trata sobre una nave que se va a encargar de eliminar a los alienígenas que vienen a destruir la tierra, consta de tres niveles, en los dos primeros vienen alienígenas comunes y en el último nivel aparece el jefe final, este enemigo puede ser eliminado con 8 balas. Puedes ir de derecha a izquierda con las teclas 'a' y 'd', también puedes disparar con la barra espaciadora.
- OpenGL para manejar los gráficos.
- PisKel para los sprites a mostrar.
- Visual Studio Code para programar el proyecto.
- Instalar mingw (Una versión que soporte threads).
- Instalar la librería de OpenGL.
- Clonar el repositorio.
git clone git@github.com:Fabo2303/game-thread-opengl.git
- Ubicarnos en la carpeta src.
cd src/
- Ejecutar un comando en la terminal para compilar el proyecto.
g++ -o main main.cpp -lfreeglut -lglew32 -lopengl32 -lglu32
- Ejecutar el archivo generado por la compilación
./main.exe o ./main
No se utilizaron sprites en el sentido tradicional, sino que se realizó el dibujo a través de una matriz de colores. A continuación, mostraré los sprites que se emplearon.
-
Nave espacial Recreado desde https://acortar.link/J3bPs3
-
Enemigos comunes
- Alien anaranjado Recreado desde https://acortar.link/5sIcGv
- Alien morado Recreado desde https://acortar.link/YMkiyG
-
Jefe Final Recreado desde https://acortar.link/6o5XUE
A primera vista, puede parecer que es un proceso complejo, y probablemente lo sea, pero en este caso, nos apoyaremos en la herramienta Piskel para facilitar el trabajo.
Nos dirigiremos a Piskel para crear un nuevo sprite. Este paso podría ser el más desafiante, ya que implica la transformación de una imagen en un sprite pixelado. Sin embargo, para facilitar este proceso, aprovecharemos la propiedad de simetría de los sprites.
Una vez que hayamos terminado el sprite, necesitaremos ajustar el panel a la imagen y pintar el fondo con un color muy diferente al que se utilizó en el sprite. Guardaremos el archivo con la extensión .piskel y, al exportarlo, seleccionaremos la opción Others, donde procederemos a descargar el archivo en C.
Al abrir el archivo en C, observaremos que existe un vector que contiene todo el sprite. Si lo prefieres, puedes utilizarlo de esta manera, pero si necesitas una matriz, deberemos formatearlo. Para ello, puedes utilizar este script de Python. Al final, este generará un archivo txt con la matriz.
data = [AGREGAR EL VECTOR] rows = AGREGAR LAS FILAS columns = AGREGAR LAS COLUMNAS matrix = [data[i:i+columns] for i in range(0, len(data), columns)] with open("matrix2.txt", "w") as file: for row in matrix: file.write("{") for i, value in enumerate(row): file.write(hex(value)) if i != len(row) - 1: file.write(", ") file.write("},\n")
Finalmente, ya está en tu control como lo dibujarás con esta matriz, aunque si lo necesitas puedes ver la manera en la que yo lo hago.