Sokoban
1.1.3
Le fameux jeu Sokoban, poussez les boîtes !
|
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"
Aller au code source de ce fichier.
Fonctions | |
grid * | creer_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... | |
grid * | init_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... | |
Fichier source contenant les fonctions pour traiter les niveaux du jeu sokoban.
Définition dans le fichier grid.c.
grid* creer_level | ( | int | row, |
int | column, | ||
int | goals | ||
) |
Fonction qui alloue la grille du jeu.
[in] | row | Le nombre de lignes du niveau de jeu |
[in] | column | Le nombre de colonnes du niveau de jeu |
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.
void display | ( | grid * | G | ) |
Fonction qui affiche le niveau chargé dans le terminal.
[in] | G | Pointeur sur la structure qui stocke le niveau |
NULL
et pointer sur la structure allouée 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>
void display_ncurses_draw | ( | grid * | G | ) |
Fonction qui affiche le niveau en paramètre dans le terminal avec ncurses
.
[in] | G | Pointeur sur la structure qui stocke le niveau |
NULL
et pointer sur la structure allouée 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.
void display_ncurses_end | ( | ) |
Fonction qui termine l'affichage ncurses
.
Cette fonction referme ncurses
pour libérer la mémoire utilisée par celle-ci.
void display_ncurses_init | ( | ) |
Fonction qui initialise la bibliothèque d'affichage ncurses
.
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
char display_ncurses_input | ( | ) |
Fonction lit une touche au clavier avec ncurses
et la renvoie.
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.
void display_ncurses_input_error | ( | ) |
Fonction qui affiche un message d'erreur.
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é.
void display_sdl2 | ( | grid * | G | ) |
Fonction qui affiche le niveau en paramètre dans une fenêtre avec SDL2
.
[in] | G | Pointeur sur la structure qui stocke le niveau |
NULL
et pointer sur la structure allouée 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.
enum Event event | ( | ) |
Fonction qui renvoie un événement en fonction du 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.
enum Event event_ncurses | ( | ) |
Fonction qui renvoie un événement en fonction du clavier en utilisant <ncurses.h>
display_ncurses_init()
auparavant display_ncurses_end()
à la fin d'utilisationCette 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.
enum Event event_sdl2 | ( | ) |
Fonction qui renvoie un événement en fonction du clavier en utilisant SDL2
.
sdl_init()
auparavant sdl_quit()
à la fin d'utilisationCette 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.
void exit_routine | ( | grid * | G | ) |
Fonction qui s'occupe des routines de fermeture du programme.
[in,out] | G | Pointeur sur une structure grid qui est le niveau de jeu |
handle_init()
auparavant exit()
ou ne rien avoir comme instruction aprèsCette 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.
void free_level | ( | grid * | G | ) |
Fonction pour désallouer la structure du jeu.
[in,out] | G | Pointeur sur une structure grid |
NULL
et pointer sur la structure allouée 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.
grid* init_level | ( | const char * | file_path | ) |
Fonction qui charge le niveau de jeu depuis un fichier dans la structure grid
.
[in] | file_path | La localisation du fichier à lire |
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.