--- /dev/null
+othello
+*.static
+*.dynamic
+# for cygwin
+*.exe
+
+*.o
+
+*.so
+*.a
+# for cygwin
+*.dll
+*.dll.a
+
+# editor trash
+*.swp
+*~
+
+.build
+
+thumbs.db
+*.DS_Store
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)
--- /dev/null
+/*
+ * =====================================================================================
+ *
+ * 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 */
+
--- /dev/null
+/*
+ * =====================================================================================
+ *
+ * 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 */
--- /dev/null
+/*
+ * =====================================================================================
+ *
+ * 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;
+ }
+}
--- /dev/null
+/*
+ * =====================================================================================
+ *
+ * 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 */
--- /dev/null
+#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;
+}
--- /dev/null
+#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 */
--- /dev/null
+#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);
+}