82 lines
2.8 KiB
C++
82 lines
2.8 KiB
C++
/*
|
|
This source code copyrighted by JailDesigner (2020)
|
|
started on Castalla 15-07-2020.
|
|
*/
|
|
|
|
/*
|
|
Descripción del enfoque utilizado para crear el juego.
|
|
|
|
El programa contine una serie de clases/objetos básicos: la clase sprite
|
|
permite dibujar partes de un fichero png en pantalla. La clase AnimatedSprite
|
|
contiene funcionalidad adicional para crear animaciones. La clase text permite
|
|
dibujar letras de un png en pantalla a partir de una cadena de texto. La clase
|
|
menu permite crear una estructura con diferentes elementos, escribirlos en
|
|
pantalla y seleccionar uno de ellos.
|
|
|
|
A continuación tenemos las clases enfocadas a la lógica del juego, la clase player
|
|
contiene la información del jugador, la clase balloon la de los enemigos y la
|
|
clase bullet para las balas que dispara el jugador. La clase background es
|
|
muy simple y sirve para pintar el fondo de la pantalla. Por ultimo, la clase
|
|
gamedirector es la que realiza toda la lógica y se encarga de hacer interactuar
|
|
al resto de objetos entre si.
|
|
|
|
El objeto gamedirector tiene tres estados: titulo, juego y pausa. Segun su estado
|
|
el bucle que recorre es distinto. En el bucle juego, el objeto gamedirector
|
|
tiene un objeto jugador, un vector con los objetos globo y un vector con los
|
|
objetos bala. Se encarga de comprobar las entradas de teclado o gamepad para
|
|
cerrar la aplicacion, saltar al estado de pausa y para mover al jugador. Recorre
|
|
el vector de globos y de balas y si tienen algun tipo asignado las gestiona.
|
|
Comprueba las colisiones entre los globos y el jugador y entre las balas y los
|
|
globos. Tiene ademas un nivel de amenaza que calcula en funcion del numero de globos
|
|
en pantalla y que se va incrementando conforme aumenta la puntuación del jugador.
|
|
|
|
Los objetos globo tienen varios contadores para alternar de un estado a otro.
|
|
|
|
En los vectores que contienen objetos, se considera activos los objetos que tienen
|
|
un tipo asociado diferente a NO_KIND
|
|
*/
|
|
|
|
#include "ifdefs.h"
|
|
#include "const.h"
|
|
#include "gamedirector.h"
|
|
#include <time.h>
|
|
#include <stdio.h>
|
|
#include <string>
|
|
|
|
int main(int argc, char *args[])
|
|
{
|
|
// Inicia el generador de numeros aleatorios
|
|
srand(time(nullptr));
|
|
|
|
// Crea el objeto gameDirector
|
|
GameDirector *gameDirector = new GameDirector(args[0]);
|
|
printf("Starting the game...\n\n");
|
|
|
|
// Mientras no se quiera salir del juego
|
|
while (!(gameDirector->exit()))
|
|
{
|
|
switch (gameDirector->getProgSection())
|
|
{
|
|
case PROG_SECTION_LOGO:
|
|
gameDirector->runLogo();
|
|
break;
|
|
case PROG_SECTION_INTRO:
|
|
gameDirector->runIntro();
|
|
break;
|
|
case PROG_SECTION_TITLE:
|
|
gameDirector->runTitle(gameDirector->getSubsection());
|
|
break;
|
|
case PROG_SECTION_GAME:
|
|
gameDirector->runGame();
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Libera todos los recursos y cierra SDL
|
|
delete gameDirector;
|
|
gameDirector = nullptr;
|
|
printf("Shutting down the game...\n");
|
|
|
|
return 0;
|
|
}
|