Skip to content
Snippets Groups Projects
grid.h 3.22 KiB
Newer Older
#ifndef GRID_HEADER
#define GRID_HEADER
/**
 * @file grid.h
 * @author Efe ERKEN (efe.erken@etu.unistra.fr)
 * @brief Fichier header contenant les structures de données pour traiter les niveaux du jeu sokoban
 * @version 0.6
 * @date 2022-12-29
 *
 * @copyright Copyright (c) 2022
 *
 */

/**
 * @brief Structure indiquant quel caractère correspond à quel élément du niveau
 *
 * Cette énumération indique les caractères symboliques du niveau qui sont
 * gérés par le jeu. Dans ce jeu sokoban, il y a des murs, des boites, un joueur,
 * des objectifs et du vide. Il y a deux caractères symboliques de plus pour indiquer
 * la superposition d'une boite ou d'un joueur avec un objectif.
 */
    WALL = '#',       ///< Un mur
    BOX = '$',        ///< Une boîte
    PLAYER = '@',     ///< Le joueur
    GOAL = '.',       ///< Les objectifs
    NONE = ' ',       ///< Le vide
    BOX_GOAL = '*',   ///< Superposition d'une boîte et d'un objectif
    PLAYER_GOAL = '+' ///< Superposition d'un joueur et d'un objectif
/**
 * @brief Structure indiquant les différents événements dans le jeu
 *
 * Cette énumération indique les 6 interactions possibles dans le jeu :
 * quitter le jeu, aller à gauche, aller en bas, aller en haut, aller
 * à droite et rien faire.
 */
enum Event
{
    EVENT_QUIT,  ///< Quitter le jeu
    EVENT_LEFT,  ///< Bouger le joueur vers la gauche
    EVENT_DOWN,  ///< Bouger le joueur vers le bas
    EVENT_UP,    ///< Bouger le joueur vers le haut
    EVENT_RIGHT, ///< Bouger le jouer vers la droite
    EVENT_NONE   ///< Tout autre événement qui n'est pas géré dans le jeu
 * @brief Cette structure contient les informations concernant le niveau du jeu et son contenu
 *
 * Une fois le jeu est lancé, le fichier contenant le niveau du jeu est chargé dans une instance
 * de cette structure. Les informations stocké sont les suivantes : chaque case du niveau,
 * nombre de lignes et colonnes, nombre d'objectifs du niveau et nombre d'objectifs réussi du niveau
 * ainsi que la position du joueur dans le niveau.
typedef struct Grid
{
    enum CaseType **game_grid; ///< Tableau contenant les entités présents dans le jeu
    int column_number;         ///< Nombre de colonnes de game_grid
    int row_number;            ///< Nombre de lignes de game_grid
    int goal_number;           ///< Nombre d'objectifs de game_grid
    int box_over_goal_number;  ///< Nombre d'objectifs réussi de game_grid
    player player;             ///< Structure pour stocker la position du joueur
// on déclare les pointeurs de fonctions pour pouvoir les utiliser
// dans les fonctions dans grid.c et player.c
extern void (*handle_init)();
extern enum Event (*handle_event)();
extern void (*handle_display)(grid *);
extern void (*handle_quit)();

grid *init_level(const char *file_path);

grid *creer_level(int row, int column, int goals);
void free_level(grid *G);
void display(grid *G);
void display_ncurses_init();

void display_ncurses_draw(grid *G);

char display_ncurses_input();

void display_ncurses_input_error();

void display_ncurses_end();
void display_sdl2(grid *G);
enum Event event();
enum Event event_ncurses();
enum Event event_sdl2();
void exit_routine(grid* G);