From 8312bd7c614b0c66bcc44b513b5d9677bf0deb78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Mogu=C3=A9rou?= Date: Tue, 5 Oct 2021 11:06:05 +0000 Subject: [PATCH] =?UTF-8?q?Ajout=20des=20en-t=C3=AAtes=20de=20C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/directions.h | 42 ++++++++++++++++++++++++++ include/grid.h | 42 ++++++++++++++++++++++++++ include/indicators.h | 32 ++++++++++++++++++++ include/route.h | 70 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 186 insertions(+) create mode 100644 include/directions.h create mode 100644 include/grid.h create mode 100644 include/indicators.h create mode 100644 include/route.h diff --git a/include/directions.h b/include/directions.h new file mode 100644 index 0000000..2e6c405 --- /dev/null +++ b/include/directions.h @@ -0,0 +1,42 @@ +/* CATWALK - Test your logic + Copyright (C) 2021 Valentin Moguerou + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULIAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see */ + +#ifndef DIRECTIONS_H_INCLUDED +#define DIRECTIONS_H_INCLUDED + +#include "route.h" + +typedef struct +{ + route *rt; // a directions object is linked to a route + int count; // number of possible moves + int cells[4][2]; // four directions : left, right, up, down +} directions; + + /* Inits the directions object. */ +directions *init_directions(route *rt); + + /* Evaluates which cells are free. + Returns the number of moves */ +int evaluate_directions(directions *dirs); + + /* Moves randomly in rt */ +void push_choose(route *rt, directions *dirs); + + /* Destroys the directions object by freeing the memory. */ +void delete_directions(directions *dirs); + +#endif /* DIRECTIONS_H_INCLUDED */ \ No newline at end of file diff --git a/include/grid.h b/include/grid.h new file mode 100644 index 0000000..6b6e821 --- /dev/null +++ b/include/grid.h @@ -0,0 +1,42 @@ +/* CATWALK - Test your logic + Copyright (C) 2021 Valentin Moguerou + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULIAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see */ + +#ifndef GRID_H_INCLUDED +#define GRID_H_INCLUDED + +#include "indicators.h" +#include "route.h" + +typedef struct grid grid; +struct grid +{ + int width; + int start[2], end[2]; + indicators *hints; + route *player_route; +}; + +grid *init_grid(int width); +void random_grid(grid *gd, int seed); +void random_start(grid *gd); +void refresh_grid(grid *gd); +void init_player_route(grid *gd); +void reset_player_route(grid *gd); +void delete_grid(grid *gd); + +int verify(grid *gd); + +#endif /* GRID_H_INCLUDED */ \ No newline at end of file diff --git a/include/indicators.h b/include/indicators.h new file mode 100644 index 0000000..9e1dbc2 --- /dev/null +++ b/include/indicators.h @@ -0,0 +1,32 @@ +/* CATWALK - Test your logic + Copyright (C) 2021 Valentin Moguerou + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULIAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see */ + +#ifndef INDICATORS_H_INCLUDED +#define INDICATORS_H_INCLUDED + +#include "route.h" + +typedef struct +{ + int *x; + int *y; +} indicators; + +indicators *init_indicators(int width); +void setup_indicators(indicators *in, route *rt); +void delete_indicators(indicators *hints); + +#endif /* INDICATORS_H_INCLUDED */ \ No newline at end of file diff --git a/include/route.h b/include/route.h new file mode 100644 index 0000000..66be479 --- /dev/null +++ b/include/route.h @@ -0,0 +1,70 @@ +/* CATWALK - Test your logic + Copyright (C) 2021 Valentin Moguerou + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULIAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see */ + +#ifndef ROUTE_H_INCLUDED +#define ROUTE_H_INCLUDED + +typedef struct element element; +struct element +{ + int x, y; + element *previous, *next; +}; + +typedef struct +{ + int width; + element *first, *last; +} route; + +/* + + -- second -- +-- second -- first -- second + -- second -- + +*/ + +int is_left(element *first, element *second); +int is_right(element *first, element *second); +int is_up(element *first, element *second); +int is_down(element *first, element *second); + + +/* + Return type: int + * 0: success + * 1: cannot move because of the grid border + * 2: cannot move: already went here +*/ +int move_left(route *rt); +int move_right(route *rt); +int move_up(route *rt); +int move_down(route *rt); + +route *init_route(int width, int startx, int starty); +void delete_element(element *el); +void delete_route(route *rt); + +void push_back(route *rt, int x, int y); +void pop_back(route *rt); + +element *find_coordinates(route *rt, int x, int y); + +int is_free(route *rt, int x, int y); +void generate(route *rt); + +#endif /* ROUTE_H_INCLUDED */ \ No newline at end of file