63 fprintf(stderr,
"Error game structure alloc failed\n");
71 fprintf(stderr,
"Error game_grid row alloc failed\n");
75 for (
int i = 0; i < row; i++)
81 fprintf(stderr,
"Error game_grid column alloc failed\n");
136 FILE *file = fopen(file_path,
"r");
140 fprintf(stderr,
"Error %s not found\n", file_path);
143 char line[100] = {0};
144 int number_column = 0;
146 int number_goals = 0;
148 fgets(line, 100, file);
150 sscanf(line,
"%d %d %d", &number_column, &number_row, &number_goals);
156 int current_goal = 0;
158 while (fgets(line, 100, file) != NULL)
161 int current_column = 0;
163 while (*buffer && *buffer !=
'\n')
166 level->
game_grid[current_row][current_column] = *buffer;
170 level->
player.
x = current_column;
254 mvprintw(0, 0,
"Appuyez sur \"q\" pour quitter");
255 mvprintw(1, 0,
"Appuyez sur \"h, j, k, l\" pour vous déplacer");
258 getmaxyx(stdscr, maxY, maxX);
264 for (
int row = 0, cursorY = centerY; row < G->
row_number; row++, cursorY++)
266 for (
int column = 0, cursorX = centerX; column < G->
column_number; column++, cursorX++)
268 mvprintw(cursorY, cursorX,
"%c", G->
game_grid[row][column]);
303 nodelay(stdscr, TRUE);
304 while ((getch()) != ERR);
305 nodelay(stdscr, FALSE);
307 return (
char)getch();
325 mvprintw(0, 0,
"---> Cette touche n'a pas de fonctionnalité");
368 SDL_SetRenderDrawColor(context.
renderer, 130, 125, 85, 255);
382 switch (current_case)
386 SDL_SetRenderDrawColor(context.
renderer, 130, 125, 85, 255);
390 SDL_SetRenderDrawColor(context.
renderer, 180, 135, 85, 255);
394 SDL_SetRenderDrawColor(context.
renderer, 100, 115, 130, 255);
398 SDL_SetRenderDrawColor(context.
renderer, 155, 150, 120, 255);
402 SDL_SetRenderDrawColor(context.
renderer, 220, 215, 180, 255);
406 SDL_SetRenderDrawColor(context.
renderer, 95, 60, 25, 255);
410 SDL_SetRenderDrawColor(context.
renderer, 50, 65, 80, 255);
414 SDL_SetRenderDrawColor(context.
renderer, 255, 0, 0, 255);
417 SDL_Rect rect = {.x = column * squareWidth, .y = row * squareHeight, .w = squareWidth, .h = squareHeight};
419 SDL_RenderFillRect(context.
renderer, &rect);
423 SDL_RenderPresent(context.
renderer);
444 printf(
"Entrez la direction voulu : ");
446 char entry = (char)fgetc(stdin);
448 while ((fgetc(stdin)) !=
'\n');
543 SDL_Event scan_event;
545 SDL_WaitEvent(&scan_event);
547 if (scan_event.type == SDL_QUIT)
551 else if (scan_event.type == SDL_KEYDOWN)
553 switch (scan_event.key.keysym.sym)
void free_level(grid *G)
Fonction pour désallouer la structure du jeu.
void exit_routine(grid *G)
Fonction qui s'occupe des routines de fermeture du programme.
enum Event event()
Fonction qui renvoie un événement en fonction du clavier.
void display_sdl2(grid *G)
Fonction qui affiche le niveau en paramètre dans une fenêtre avec SDL2.
grid * creer_level(int row, int column, int goals)
Fonction qui alloue la grille du jeu.
enum Event event_sdl2()
Fonction qui renvoie un événement en fonction du clavier en utilisant SDL2.
void display(grid *G)
Fonction qui affiche le niveau chargé dans le terminal.
char display_ncurses_input()
Fonction lit une touche au clavier avec ncurses et la renvoie.
void display_ncurses_init()
Fonction qui initialise la bibliothèque d'affichage ncurses.
void display_ncurses_end()
Fonction qui termine l'affichage ncurses.
void display_ncurses_input_error()
Fonction qui affiche un message d'erreur.
void display_ncurses_draw(grid *G)
Fonction qui affiche le niveau en paramètre dans le terminal avec ncurses.
grid * init_level(const char *file_path)
Fonction qui charge le niveau de jeu depuis un fichier dans la structure grid.
enum Event event_ncurses()
Fonction qui renvoie un événement en fonction du clavier en utilisant <ncurses.h>
Fichier header contenant les structures de données pour traiter les niveaux du jeu sokoban.
CaseType
Structure indiquant quel caractère correspond à quel élément du niveau.
@ PLAYER_GOAL
Superposition d'un joueur et d'un objectif.
@ BOX_GOAL
Superposition d'une boîte et d'un objectif.
Event
Structure indiquant les différents événements dans le jeu.
@ EVENT_RIGHT
Bouger le jouer vers la droite.
@ EVENT_DOWN
Bouger le joueur vers le bas.
@ EVENT_LEFT
Bouger le joueur vers la gauche.
@ EVENT_NONE
Tout autre événement qui n'est pas géré dans le jeu.
@ EVENT_QUIT
Quitter le jeu.
@ EVENT_UP
Bouger le joueur vers le haut.
void(* handle_quit)()
Fonction de fermeture de <ncurses.h> ou SDL2.
Fichier header contenant les structures pour traiter le joueur et son mouvement.
Fichier header contenant la structure pour gérer SDL2 pour le jeu.
Cette structure contient les informations concernant le niveau du jeu et son contenu.
enum CaseType ** game_grid
Tableau contenant les entités présents dans le jeu.
player player
Structure pour stocker la position du joueur.
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.
int y
Coordonnée y du joueur.
int x
Coordonnée x du joueur.
SDL_Renderer * renderer
Pointeur sur le renderer.
int width
Largeur de la fenêtre.
int height
Hauteur de la fenêtre.