From 480acfeb0ef3b0c4e9ec23ec145c9860ba64095e Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Mon, 24 Apr 2017 21:31:51 +0200 Subject: [PATCH] Add the basic code structure and build system MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .gitignore | 22 ++++++++++++++ analyse_descendante | 32 ++++++++++++++++---- lib/constants.h | 23 ++++++++++++++ lib/macros.h | 32 ++++++++++++++++++++ lib/ui.c | 74 +++++++++++++++++++++++++++++++++++++++++++++ lib/ui.h | 27 +++++++++++++++++ lib/utils.c | 13 ++++++++ lib/utils.h | 9 ++++++ src/othello.c | 17 +++++++++++ 9 files changed, 243 insertions(+), 6 deletions(-) create mode 100644 .gitignore create mode 100644 lib/constants.h create mode 100644 lib/macros.h create mode 100644 lib/ui.c create mode 100644 lib/ui.h create mode 100644 lib/utils.c create mode 100644 lib/utils.h create mode 100644 src/othello.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4327027 --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +othello +*.static +*.dynamic +# for cygwin +*.exe + +*.o + +*.so +*.a +# for cygwin +*.dll +*.dll.a + +# editor trash +*.swp +*~ + +.build + +thumbs.db +*.DS_Store diff --git a/analyse_descendante b/analyse_descendante index 513d5a5..4f00777 100644 --- a/analyse_descendante +++ b/analyse_descendante @@ -13,15 +13,35 @@ 1) Affichage de l'othellier 2) Saisie d'un coup 3) Détection othellier plein -4) Boucle de jeu -5) Mettre à jour l'othellier -6) Coups jouables +4) Boucle de jeu (+ affichage scores, le vainqueur, etc) +5) Mettre à jour l'othellier (retournement pions de l'adversaire suite à un coup joué) +6) Coups jouables (calcul liste, affichage des coups jouables, test si coup saisi est dans la liste) 7) Jeu 2 joueurs humains -8) IA: min-max -9) IHM +8) IA: MinMax + stratégies +9) IHM graphique -->Stratégie de jeu (fonction d'évalution de l'algo min-max): +->Stratégie de jeu (fonction d'évalution de l'algo MinMax): * Nombre de pions de la même couleur * Position/valeur des cases * Diminuer les coups possibles de l'adversaire * "S'augmenter" les possibilités de jeu + +->Initialisation: toutes les cases sont initialisées à VIDE + +->Structures de données: + - Othellier: tableau à deux dimensions + - Coups jouables: liste chainée de coup + - Constantes: NOIR 1 |N (nord) + BLANC 2 |S (sud) + VIDE 0 |E (est) + ... |O (ouest) + JOUEUR_NOIR ? + JOUEUR_BLANC ? + +-> Modules: + main: othello.{c,h} + ia: ia.{c,h} (MinMax, fcts d'évaluation, ...) + IHM: ihm.{c,h} (affichage de l'othellier, saisie d'un coup, entrée au clavier, ...) + coups: coups.{c.h} (coups jouables) + regle: regle.{c,h} (implantation des règles du jeu) + constantes: constantes.h (les constantes) diff --git a/lib/constants.h b/lib/constants.h new file mode 100644 index 0000000..431b796 --- /dev/null +++ b/lib/constants.h @@ -0,0 +1,23 @@ +/* + * ===================================================================================== + * + * Filename: constants.h + * + * Description: Header for constant values + * + * Version: 1.0 + * Created: 24/04/2017 21:06:32 + * Revision: none + * Compiler: gcc + * + * Author: Jerome Benoit (fraggle), jerome.benoit@piment-noir.org + * Organization: Piment Noir + * + * ===================================================================================== + */ + +#ifndef CONSTANTS_H +#define CONSTANTS_H + +#endif /* CONSTANTS_H */ + diff --git a/lib/macros.h b/lib/macros.h new file mode 100644 index 0000000..f485a9a --- /dev/null +++ b/lib/macros.h @@ -0,0 +1,32 @@ +/* + * ===================================================================================== + * + * Filename: macros.h + * + * Description: Some useful macros + * + * Version: 1.0 + * Created: 09/03/2017 15:28:46 + * Revision: none + * Compiler: gcc + * + * Author: Jerome Benoit (fraggle), jerome.benoit@piment-noir.org + * Organization: Piment Noir + * + * ===================================================================================== + */ + +#ifndef MACROS_H +#define MACROS_H + +#include + +/* definition to expand macro then apply to pragma message */ +#define VALUE_TO_STRING(x) #x +#define VALUE(x) VALUE_TO_STRING(x) +#define VAR_NAME_VALUE(var) #var "=" VALUE(var) + +/* FIXME: ensure we manipulate real array */ +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0])) + +#endif /* MACROS_H */ diff --git a/lib/ui.c b/lib/ui.c new file mode 100644 index 0000000..cee08f1 --- /dev/null +++ b/lib/ui.c @@ -0,0 +1,74 @@ +/* + * ===================================================================================== + * + * Filename: ui.c + * + * Description: Routines to handle the user interface + * + * Version: 1.0 + * Created: 24/04/2017 16:41:15 + * Revision: none + * Compiler: gcc + * + * Author: Jerome Benoit (fraggle), jerome.benoit@piment-noir.org + * Organization: Piment Noir + * + * ===================================================================================== + */ + +#include + +#include "ui.h" + +/* in all print routine, y and x are the coordinates of the first character of the shape + * which can be a space ' ' */ + +/* FIXME: one can split this shape in building blocks and build it using them */ +void print_board(int y, int x) { + + mvprintw(y, x, " | |"); + mvprintw(y+1, x, " | |"); + mvprintw(y+2, x, "----+----+----"); + mvprintw(y+3, x, " | |"); + mvprintw(y+4, x, " | |"); + mvprintw(y+5, x, "----+----+----"); + mvprintw(y+6, x, " | |"); + mvprintw(y+7, x, " | |"); +} + +static void print_x(int y, int x) { + + mvprintw(y, x, "\\/"); + mvprintw(y+1, x,"/\\"); +} + +static void print_o(int y, int x) { + + mvprintw(y, x, "/\\"); + mvprintw(y+1, x, "\\/"); +} + +/* y: 1 -> +0 x: 1 -> +1 + * 2 -> +3 2 -> +6 + * 3 -> +6 3 -> +11 */ +static int remap_y(int y) { + + if (y == 1) { + return 0; + } else if (y == 2) { + return 3; + } else { + return 6; + } +} + +static int remap_x(int x) { + + if (x == 1) { + return 1; + } else if (x == 2) { + return 6; + } else { + return 11; + } +} diff --git a/lib/ui.h b/lib/ui.h new file mode 100644 index 0000000..2915078 --- /dev/null +++ b/lib/ui.h @@ -0,0 +1,27 @@ +/* + * ===================================================================================== + * + * Filename: ui.h + * + * Description: Header for user interface routines + * + * Version: 1.0 + * Created: 15/03/2017 20:07:12 + * Revision: none + * Compiler: gcc + * + * Author: Jerome Benoit (fraggle), jerome.benoit@piment-noir.org + * Organization: Piment Noir + * + * ===================================================================================== + */ + +#ifndef UI_H +#define UI_H + +/* ncurses printing */ +void print_board(int y, int x); + +/* non ncurses printing */ + +#endif /* UI_H */ diff --git a/lib/utils.c b/lib/utils.c new file mode 100644 index 0000000..04a20e4 --- /dev/null +++ b/lib/utils.c @@ -0,0 +1,13 @@ +#include "utils.h" + +void swap_int(int* v1, int* v2) { + int tmp = *v1; + *v1 = *v2; + *v2 = tmp; +} + +void swap_ptr(void* v1, void* v2) { + void* tmp = v1; + v1 = v2; + v2 = tmp; +} diff --git a/lib/utils.h b/lib/utils.h new file mode 100644 index 0000000..03f1226 --- /dev/null +++ b/lib/utils.h @@ -0,0 +1,9 @@ +#ifndef UTILS_H +#define UTILS_H + +#include "macros.h" + +void swap_int(int* v1, int* v2); +void swap_ptr(void* v1, void* v2); + +#endif /* UTILS_H */ diff --git a/src/othello.c b/src/othello.c new file mode 100644 index 0000000..650efa9 --- /dev/null +++ b/src/othello.c @@ -0,0 +1,17 @@ +#include +#include +#include +#include + +int main() { + int row = 0, col = 0; + + initscr(); + getmaxyx(stdscr, row, col); + noecho(); + curs_set(0); + + endwin(); + + exit(EXIT_SUCCESS); +} -- 2.34.1