Add the basic code structure and build system
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 24 Apr 2017 19:31:51 +0000 (21:31 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 24 Apr 2017 19:31:51 +0000 (21:31 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
.gitignore [new file with mode: 0644]
analyse_descendante
lib/constants.h [new file with mode: 0644]
lib/macros.h [new file with mode: 0644]
lib/ui.c [new file with mode: 0644]
lib/ui.h [new file with mode: 0644]
lib/utils.c [new file with mode: 0644]
lib/utils.h [new file with mode: 0644]
src/othello.c [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..4327027
--- /dev/null
@@ -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
index 513d5a5bee2e5c5ddbfa10526cc44868a110b478..4f00777cb415f137b81944ff72017099e78ee1a8 100644 (file)
 1) Affichage de l'othellier
 2) Saisie d'un coup
 3) Détection othellier plein
 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
 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
 * 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 (file)
index 0000000..431b796
--- /dev/null
@@ -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 (file)
index 0000000..f485a9a
--- /dev/null
@@ -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 <stdlib.h>
+
+/* 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 (file)
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 <ncurses.h>
+
+#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 (file)
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 (file)
index 0000000..04a20e4
--- /dev/null
@@ -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 (file)
index 0000000..03f1226
--- /dev/null
@@ -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 (file)
index 0000000..650efa9
--- /dev/null
@@ -0,0 +1,17 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ncurses.h>
+
+int main() {
+    int row = 0, col = 0;
+
+    initscr();
+    getmaxyx(stdscr, row, col);
+    noecho();
+    curs_set(0);
+
+    endwin();
+
+    exit(EXIT_SUCCESS);
+}