/* * world.h -- Representación del estado del juego y carga del nivel. * Copyright (C) 2018 Juan Marín Noguera * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file world.h Representación del estado del juego y carga del nivel. */ #ifndef __WORLD_H #define __WORLD_H #include #include "screen.h" /** Resultados de la llamada a world_play_frame, que indican el estado del * mundo. */ typedef enum WorldState { /** Indica que la partida continúa normalmente. */ WORLD_ST_KEEP_ON, /** Indica que el personaje ha muerto. */ WORLD_ST_DEAD, /** Indica que el nivel ha sido superado. */ WORLD_ST_WON, /** Indica que el juego ha sido superado por llegar al millón de * monedas. */ WORLD_ST_MANY_COINS } WorldState; /** Representa un mundo en el juego, con bloques, items, etc. */ typedef struct World *World; /** * \brief Crea un mundo del juego. * \param f Flujo del fichero con la información del mundo. * \return El mundo creado. * \remarks El flujo debe haber sido abierto en un modo que permita la lectura. * Una vez ejecutada esta función no es necesario mantener el flujo de * fichero abierto. */ World world_create(FILE *f); /** * \brief Libera un mundo del juego. * \param w El mundo en cuestión. */ void world_free(World w); /** * \brief Libera los recursos globales ocupados por el módulo, como las * imágenes. * \remarks Requiere ser llamada antes que a screen_end. void world_end(); */ void world_end(); /** * \brief Obtiene el personaje que juega en el nivel. * \param w El nivel. * \return El personaje. */ Player world_player(World w); /** * \brief Sustituye el personaje actual en el mundo por el personaje dado, que * establece en la posición ocupada por el anterior. * \param w El mundo. * \param p El nuevo personaje. * \remarks Esta función libera la memoria ocupada por el personaje * anterior del mundo. */ void world_substitute_player(World w, Player p); /** * \brief Ejecuta un frame del mundo, en el que lee los eventos de teclado, * actualiza el estado del mundo y lo dibuja en pantalla. * \param scr La ventana donde dibujar el mundo. * \param w El mundo en cuestión. * \return Devuelve el estado actual de la partida. */ WorldState world_play_frame(Screen scr, World w); #endif // __WORLD_H