/* 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 #include #include 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; }