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