Sokoban  1.1.3
Le fameux jeu Sokoban, poussez les boîtes !
test.c
Aller à la documentation de ce fichier.
1 /*
2 Function tests for Sokoban
3 Copyright (C) 2022, 2023 Efe ERKEN
4 
5 This file is part of Sokoban
6 
7 Sokoban is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11 
12 Sokoban is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Sokoban. If not, see <https://www.gnu.org/licenses/>.
19 
20 SPDX-License-Identifier: GPL-3.0-or-later
21 */
22 
34 #include <stdio.h>
35 #include <stdlib.h>
36 #include <stdbool.h>
37 #include <string.h>
38 #include <ncurses.h>
39 #include "grid.h"
40 #include "player.h"
41 #include "sdl2.h"
42 
43 int main01()
44 {
46  int row = 11;
47  int column = 26;
48  int goal = 2;
49 
50  grid *level = creer_level(row, column, goal);
51  level->game_grid[0][0] = '#';
52  level->game_grid[3][1] = '@';
53 
54  printf("Size of structure is %d\n", (int)sizeof(*level));
55  printf("Number of lines is %d\n", level->row_number);
56  printf("Number of columns is %d\n", level->column_number);
57  printf("Grid block at coordinates (0,0) %c\n", level->game_grid[0][0]);
58  printf("Grid block at coordinates (1,3) %c\n", level->game_grid[3][1]);
59 
60  free_level(level);
61  return 0;
62 }
63 
64 int main02()
65 {
67  grid *level = init_level("levels/level1.txt");
68 
69  printf("Number of lines is: %d\n", level->row_number);
70  printf("Number of columns is: %d\n", level->column_number);
71  printf("Grid block at coordinates (9,5): %c\n", level->game_grid[5][9]);
72  printf("Grid block at coordinates (7,2): %c\n", level->game_grid[2][7]);
73  printf("Player coordinates at start: (%d, %d)\n", level->player.x, level->player.y);
74 
75  free_level(level);
76  return 0;
77 }
78 
79 int main03()
80 {
82  grid *level = init_level("levels/level1.txt");
83  display(level);
84  free_level(level);
85  return 0;
86 }
87 
88 int main04()
89 {
91  grid *level = init_level("levels/level1.txt");
92  char quitCar = '\0';
93  while (quitCar != 'q')
94  {
95  printf("Appuyez sur \"q\" pour quitter\n");
96  printf("Appuyez sur \"h, j, k, l\" pour vous déplacer\n\n");
97  display(level);
98  printf("Votre choix : ");
99  scanf(" %c", &quitCar);
100  if (quitCar == 'h' || quitCar == 'j' || quitCar == 'k' || quitCar == 'l')
101  {
102  move_player(level, quitCar);
103  }
104  }
105  free_level(level);
106  return 0;
107 }
108 
109 int main05()
110 {
112  grid *level = init_level("levels/level1.txt");
114  char entry = '\0';
115  bool run = true;
116  while (run)
117  {
118  display_ncurses_draw(level);
119  entry = display_ncurses_input();
120  switch (entry)
121  {
122  case 'q':
123  run = false;
124  break;
125  case 'h':
126  case 'j':
127  case 'k':
128  case 'l':
129  move_player(level, entry);
130  break;
131  default:
133  }
134  }
136  free_level(level);
137  return 0;
138 }
139 
140 int main06()
141 {
143  sdl_init();
144  SDL_SetRenderDrawColor(context.renderer, 126, 126, 126, 255);
145  SDL_RenderClear(context.renderer);
146  for (int i = 0; i < 25; i++)
147  {
148  SDL_SetRenderDrawColor(context.renderer, i * 10, 0, 0, 255);
149  SDL_Rect rect = {.x = i * 50, .y = i * 50, .w = 50, .h = 50};
150  SDL_RenderFillRect(context.renderer, &rect);
151  }
152  SDL_RenderPresent(context.renderer);
153  int quit = 0;
154  SDL_Event event;
155  while (!quit)
156  {
157  while (SDL_PollEvent(&event))
158  {
159  if (event.type == SDL_QUIT)
160  {
161  quit = 1;
162  }
163  }
164  }
165  sdl_quit();
166  return 0;
167 }
168 
169 int main07()
170 {
172  sdl_init();
173  grid *level = init_level("levels/level1.txt");
174  display_sdl2(level);
175  SDL_Event ev;
176  int quit = 0;
177  while (!quit)
178  {
179  SDL_WaitEvent(&ev);
180  if (ev.type == SDL_QUIT)
181  {
182  quit = 1;
183  }
184  }
185  sdl_quit();
186  return 0;
187 }
188 
189 int main08()
190 {
192  sdl_init();
193  int quit = 0;
194  while (!quit)
195  {
196  enum Event ev = event_sdl2();
197  printf("L'évenement déclanché : %d\n", ev);
198  if (ev == EVENT_QUIT)
199  {
200  quit = 1;
201  }
202  }
203  sdl_quit();
204  return 0;
205 }
206 
207 int main09()
208 {
211  int quit = 0;
212  while (!quit)
213  {
214  enum Event ev = event_ncurses();
215  printw("L'évenement déclanché : %d\n", ev);
216  refresh();
217  if (ev == EVENT_QUIT)
218  {
219  quit = 1;
220  }
221  }
223  return 0;
224 }
225 
226 int main10()
227 {
229  int quit = 0;
230  while (!quit)
231  {
232  enum Event ev = event();
233  printf("L'évenement déclanché : %d\n", ev);
234  if (ev == EVENT_QUIT)
235  {
236  quit = 1;
237  }
238  }
239  return 0;
240 }
241 
242 int main(int argc, char *argv[])
243 {
245  if (argc < 2)
246  {
247  printf("Trop peu d'arguments\n");
248  }
249  else if (argc == 2)
250  {
251  if (strcmp(argv[1], "--sdl2") == 0)
252  {
253  printf("SDL2\n");
254  }
255  else if (strcmp(argv[1], "--console") == 0)
256  {
257  printf("Console\n");
258  }
259  else
260  {
261  printf("Option inconnue\n");
262  }
263  }
264  else
265  {
266  printf("Trop d'arguments\n");
267  }
268 }
void free_level(grid *G)
Fonction pour désallouer la structure du jeu.
Definition: grid.c:105
enum Event event()
Fonction qui renvoie un événement en fonction du clavier.
Definition: grid.c:440
void display_sdl2(grid *G)
Fonction qui affiche le niveau en paramètre dans une fenêtre avec SDL2.
Definition: grid.c:365
grid * creer_level(int row, int column, int goals)
Fonction qui alloue la grille du jeu.
Definition: grid.c:56
enum Event event_sdl2()
Fonction qui renvoie un événement en fonction du clavier en utilisant SDL2.
Definition: grid.c:540
void display(grid *G)
Fonction qui affiche le niveau chargé dans le terminal.
Definition: grid.c:201
char display_ncurses_input()
Fonction lit une touche au clavier avec ncurses et la renvoie.
Definition: grid.c:300
void display_ncurses_init()
Fonction qui initialise la bibliothèque d'affichage ncurses.
Definition: grid.c:224
void display_ncurses_end()
Fonction qui termine l'affichage ncurses.
Definition: grid.c:343
void display_ncurses_input_error()
Fonction qui affiche un message d'erreur.
Definition: grid.c:320
void display_ncurses_draw(grid *G)
Fonction qui affiche le niveau en paramètre dans le terminal avec ncurses.
Definition: grid.c:249
grid * init_level(const char *file_path)
Fonction qui charge le niveau de jeu depuis un fichier dans la structure grid.
Definition: grid.c:133
enum Event event_ncurses()
Fonction qui renvoie un événement en fonction du clavier en utilisant <ncurses.h>
Definition: grid.c:490
Fichier header contenant les structures de données pour traiter les niveaux du jeu sokoban.
Event
Structure indiquant les différents événements dans le jeu.
Definition: grid.h:66
@ EVENT_QUIT
Quitter le jeu.
Definition: grid.h:67
void move_player(grid *G, enum Direction D)
Fonction qui bouge le joueur dans la direction voulue dans le niveau.
Definition: player.c:65
Fichier header contenant les structures pour traiter le joueur et son mouvement.
void sdl_quit()
Fonction qui referme la bibliothèque SDL2.
Definition: sdl2.c:82
void sdl_init()
Fonction qui lance SDL2 et crée une fenêtre.
Definition: sdl2.c:48
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.
Definition: grid.h:84
enum CaseType ** game_grid
Tableau contenant les entités présents dans le jeu.
Definition: grid.h:85
player player
Structure pour stocker la position du joueur.
Definition: grid.h:90
int column_number
Nombre de colonnes de game_grid.
Definition: grid.h:86
int row_number
Nombre de lignes de game_grid.
Definition: grid.h:87
int y
Coordonnée y du joueur.
Definition: player.h:48
int x
Coordonnée x du joueur.
Definition: player.h:47
SDL_Renderer * renderer
Pointeur sur le renderer.
Definition: sdl2.h:49
int main(int argc, char *argv[])
Definition: test.c:242
int main07()
Definition: test.c:169
int main02()
Definition: test.c:64
int main05()
Definition: test.c:109
int main04()
Definition: test.c:88
int main01()
Definition: test.c:43
int main10()
Definition: test.c:226
int main08()
Definition: test.c:189
int main09()
Definition: test.c:207
int main06()
Definition: test.c:140
int main03()
Definition: test.c:79