Sokoban  1.1.3
Le fameux jeu Sokoban, poussez les boîtes !
Fonctions
Référence du fichier grid.c

Fichier source contenant les fonctions pour traiter les niveaux du jeu sokoban. Plus de détails...

#include <stdio.h>
#include <stdlib.h>
#include <ncurses.h>
#include "grid.h"
#include "player.h"
#include "sdl2.h"
Graphe des dépendances par inclusion de grid.c:

Aller au code source de ce fichier.

Fonctions

gridcreer_level (int row, int column, int goals)
 Fonction qui alloue la grille du jeu. Plus de détails...
 
void free_level (grid *G)
 Fonction pour désallouer la structure du jeu. Plus de détails...
 
gridinit_level (const char *file_path)
 Fonction qui charge le niveau de jeu depuis un fichier dans la structure grid. Plus de détails...
 
void display (grid *G)
 Fonction qui affiche le niveau chargé dans le terminal. Plus de détails...
 
void display_ncurses_init ()
 Fonction qui initialise la bibliothèque d'affichage ncurses. Plus de détails...
 
void display_ncurses_draw (grid *G)
 Fonction qui affiche le niveau en paramètre dans le terminal avec ncurses. Plus de détails...
 
char display_ncurses_input ()
 Fonction lit une touche au clavier avec ncurses et la renvoie. Plus de détails...
 
void display_ncurses_input_error ()
 Fonction qui affiche un message d'erreur. Plus de détails...
 
void display_ncurses_end ()
 Fonction qui termine l'affichage ncurses. Plus de détails...
 
void display_sdl2 (grid *G)
 Fonction qui affiche le niveau en paramètre dans une fenêtre avec SDL2. Plus de détails...
 
enum Event event ()
 Fonction qui renvoie un événement en fonction du clavier. Plus de détails...
 
enum Event event_ncurses ()
 Fonction qui renvoie un événement en fonction du clavier en utilisant <ncurses.h> Plus de détails...
 
enum Event event_sdl2 ()
 Fonction qui renvoie un événement en fonction du clavier en utilisant SDL2. Plus de détails...
 
void exit_routine (grid *G)
 Fonction qui s'occupe des routines de fermeture du programme. Plus de détails...
 

Description détaillée

Fichier source contenant les fonctions pour traiter les niveaux du jeu sokoban.

Auteur
Efe ERKEN (efe.e.nosp@m.rken.nosp@m.@etu..nosp@m.unis.nosp@m.tra.f.nosp@m.r)
Version
0.9
Date
2023-01-24

Définition dans le fichier grid.c.

Documentation des fonctions

◆ creer_level()

grid* creer_level ( int  row,
int  column,
int  goals 
)

Fonction qui alloue la grille du jeu.

Paramètres
[in]rowLe nombre de lignes du niveau de jeu
[in]columnLe nombre de colonnes du niveau de jeu
Renvoie
grid*
Précondition
-
Postcondition
-

Cette fonction prend en paramètre trois arguments tels que le nombre de lignes, le nombre de colonnes et le nombre d'objectifs du niveau de jeu. Elle alloue dynamiquement la structure grid en fonction de cette taille et renvoie un pointeur sur cette structure.

Définition à la ligne 56 du fichier grid.c.

◆ display()

void display ( grid G)

Fonction qui affiche le niveau chargé dans le terminal.

Paramètres
[in]GPointeur sur la structure qui stocke le niveau
Précondition
G doit être non NULL et pointer sur la structure allouée
Postcondition
Affichage des caractères

Cette fonction parcourt le tableau dans la structure qui stocke les cases du niveau et les affiche chacun. Elle utilise la fonction printf() de <stdio.h>

Définition à la ligne 201 du fichier grid.c.

◆ display_ncurses_draw()

void display_ncurses_draw ( grid G)

Fonction qui affiche le niveau en paramètre dans le terminal avec ncurses.

Paramètres
[in]GPointeur sur la structure qui stocke le niveau
Précondition
G doit être non NULL et pointer sur la structure allouée
display_ncurses_init() a été appellé auparavant
Postcondition
Affichage à l'écran

Cette fonction affiche le niveau du jeu comme la fonction display() mais au contraire elle utilise la bibliothèque ncurses pour ne pas polluer le terminal avec beaucoup d'affichages inutiles et aussi pour présenter une interface plus agréable et professionnel pour le jeu.

Définition à la ligne 249 du fichier grid.c.

◆ display_ncurses_end()

void display_ncurses_end ( )

Fonction qui termine l'affichage ncurses.

Précondition
Il faut avoir appellé la fonction display_ncurses_init() auparavant
Postcondition
Il faut appeler cette fonction une fois en fin du programme

Cette fonction referme ncurses pour libérer la mémoire utilisée par celle-ci.

Définition à la ligne 343 du fichier grid.c.

◆ display_ncurses_init()

void display_ncurses_init ( )

Fonction qui initialise la bibliothèque d'affichage ncurses.

Précondition
Il faut appeler cette fonction une fois au début du programme
Postcondition
Il faut appeler la fonction display_ncurses_end() à la fin d'utilisation

Cette fonction est un wrapper de la fonction d'initialisation ncurses ainsi que d'autres options de celle-ci pour préparer l'affichage du niveau de jeu avec ncurses

Définition à la ligne 224 du fichier grid.c.

◆ display_ncurses_input()

char display_ncurses_input ( )

Fonction lit une touche au clavier avec ncurses et la renvoie.

Renvoie
char
Précondition
display_ncurses_init() a été appellé auparavant
Postcondition
Lecture des entrées au clavier

Cette fonction vide complétement le buffer d'entrée du terminal avant de lire une touche au clavier et la renvoyer. L'utilisation de la fonction getch() de ncurses est pour des raisons de cohérence mais le plus important, c'est pour lire une touche sans que l'utilisateur doive appuyer sur la touche Entrée ou sans qu'il voie la touche appuyée sur l'écran. Cette méthode nous permet de lire les entrées directement et présenter une intéraction professionnelle. La raison pour laquelle on vide le buffer avant est que pendant l'affichage d'un message d'erreur ou pendant qu'on ne traite pas les entrées, l'utilisateur peut continuer à appuyer sur des touches. Cela pose problème la prochaine fois on lit les entrées au clavier car on veut traiter la touche la plus récente, non pas les touches qui sont restées dans le buffer pendant qu'on les traitait pas. D'abord vider le buffer nous permet d'accéder à l'entrée la plus récente au lieu d'attendre pour que le programme traite toutes celles qui venait avant la touche la plus récente qui ne sont pas forcément utiles.

Définition à la ligne 300 du fichier grid.c.

◆ display_ncurses_input_error()

void display_ncurses_input_error ( )

Fonction qui affiche un message d'erreur.

Précondition
display_ncurses_init() a été appellé auparavant
Postcondition
Affichage à l'écran

Cette fonction efface l'écran pour après afficher un message d'erreur au coin à gauche en haut du terminal. Elle laisse 3 secondes à l'utilisateur pour lire le message affiché.

Définition à la ligne 320 du fichier grid.c.

◆ display_sdl2()

void display_sdl2 ( grid G)

Fonction qui affiche le niveau en paramètre dans une fenêtre avec SDL2.

Paramètres
[in]GPointeur sur la structure qui stocke le niveau
Précondition
G doit être non NULL et pointer sur la structure allouée
sdl_init() a été appellé auparavant
Postcondition
Affichage à l'écran

Cette fonction affiche le niveau du jeu comme la fonction display() mais au contraire elle utilise la bibliothèque SDL2 pour des graphismes 2D comme un vrai jeu et aussi pour présenter une interface plus agréable et professionnel pour le jeu. Tout l'arrière plan est déssiné une fois dans la couleur des murs, puis, chaque est déssiné avec des couleurs adaptés choisies en fonction de la case à déssiner. Cela est fait en parcourant toutes les cases de la structure de jeu.

Définition à la ligne 365 du fichier grid.c.

◆ event()

enum Event event ( )

Fonction qui renvoie un événement en fonction du clavier.

Renvoie
enum Event
Précondition
-
Postcondition
Affichage à l'écran et lecture des entrées au clavier

Cette fonction lit une touche au clavier en utilisant fgetc() et renvoie l'événement du jeu correspondant tels que quitter le jeu, aller à gauche, aller en bas, aller en haut, aller à droite ou rien faire. Cette fonction est conçue pour être utilisé avec la fonction d'affichage display() qui utilise <stdio.h> . Vous pouvez changer les touches de controle de jeu ici.

Définition à la ligne 365 du fichier grid.c.

◆ event_ncurses()

enum Event event_ncurses ( )

Fonction qui renvoie un événement en fonction du clavier en utilisant <ncurses.h>

Renvoie
enum Event
Précondition
Avoir appelé display_ncurses_init() auparavant
Postcondition
Affichage à l'écran et lecture des entrées au clavier
Appeler display_ncurses_end() à la fin d'utilisation

Cette fonction lit une touche au clavier en utilisant getch() et renvoie l'événement du jeu correspondant tels que quitter le jeu, aller à gauche, aller en bas, aller en haut, aller à droite ou rien faire. Cette fonction est conçue pour être utilisé avec les fonctions d'affichage display_ncurses() qui utilise <ncurses.h> . Vous pouvez changer les touches de controle de jeu ici.

Définition à la ligne 365 du fichier grid.c.

◆ event_sdl2()

enum Event event_sdl2 ( )

Fonction qui renvoie un événement en fonction du clavier en utilisant SDL2.

Renvoie
enum Event
Précondition
Avoir appelé la fonction sdl_init() auparavant
Postcondition
Lecture des entrées au clavier
Appeler la fonction sdl_quit() à la fin d'utilisation

Cette fonction lit un événement clavier en utilisant SDL2 et renvoie l'événement du jeu correspondant tels que quitter le jeu, aller à gauche, aller en bas, aller en haut, aller à droite ou rien faire. Cette fonction est conçue pour être utilisé avec les fonctions d'affichage display_sdl2() qui utilise SDL2 . Vous pouvez changer les touches de controle de jeu ici.

Définition à la ligne 365 du fichier grid.c.

◆ exit_routine()

void exit_routine ( grid G)

Fonction qui s'occupe des routines de fermeture du programme.

Paramètres
[in,out]GPointeur sur une structure grid qui est le niveau de jeu
Précondition
Avoir initialisé la structure de jeu G
Avoir appelé handle_init() auparavant
Postcondition
Quitter le programme à l'aide de exit() ou ne rien avoir comme instruction après

Cette fonction est faite pour être appelé avant de quitter le programme. Elle referme la bibliothèque d'affichage utilisé ainsi que de désallouer la structure de jeu. Elle est à appeler à la fin du programme ou dans le cas d'une erreur ou il faut quitter le programme immédiatement tout en respectant le système.

Définition à la ligne 598 du fichier grid.c.

Voici le graphe d'appel pour cette fonction :

◆ free_level()

void free_level ( grid G)

Fonction pour désallouer la structure du jeu.

Paramètres
[in,out]GPointeur sur une structure grid
Précondition
G doit être non NULL et pointer sur la structure allouée
Postcondition
G contient toujours l'adresse qu'il avait

Cette fonction prend en paramètre un pointeur sur une structure grid et désalloue cette structure. Pour cela dans un premier temps, elle désalloue le tableau dynamique à deux dimensions game_grid et finalement elle désalloue la structure elle-même.

Définition à la ligne 105 du fichier grid.c.

◆ init_level()

grid* init_level ( const char *  file_path)

Fonction qui charge le niveau de jeu depuis un fichier dans la structure grid.

Paramètres
[in]file_pathLa localisation du fichier à lire
Renvoie
grid*
Précondition
-
Postcondition
-

Cette fonction lit ligne par ligne le fichier donné en paramètre pour charger les informations sur le niveau dans la structure grid qu'elle alloue elle-même. À part les informations sur par exemple la taille du niveau, elle charge chaque case du niveau dans le tableau dynamique à deux dimension de la structure. Elle recopie le niveau dans une structure et renvoi un pointeur dessus.

Définition à la ligne 133 du fichier grid.c.

Voici le graphe d'appel pour cette fonction :