Code cleanup and fix the logic behind the player constants number
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 28 Apr 2017 13:27:23 +0000 (15:27 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 28 Apr 2017 13:27:23 +0000 (15:27 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
lib/constants.c
lib/constants.h
lib/othello.c
lib/othello.h
lib/ui.c
src/main.c

index 66728da6e88b7dbabf2416cb8f34df16c4c402ad..289bf044d315109ecaedd536e444c2b3651d61a0 100644 (file)
 //const unsigned int board_size = 8;
 
 const unsigned int empty = 0;
-const unsigned int white = 1;
-const unsigned int black = 2;
+const unsigned int black = 1;
+const unsigned int white = 2;
 
 /* FIXME: reuse the two above variables would be better */
-const unsigned int player_one = 2; /* first player is black */
-const unsigned int player_two = 1;
+const unsigned int player_one = 1; /* first player is black */
+const unsigned int player_two = 2;
 
 const unsigned int hint_allowed = 3;
 const unsigned int hint_forbidden = 4;
index bc15fd15e9de1a3e891d38713f3e124636a34f5c..186e5dba3485420051252baa43116bacb05cae9f 100644 (file)
@@ -23,8 +23,8 @@
 //extern const unsigned int board_size; /* 8 */
 
 extern const unsigned int empty; /* 0 */
-extern const unsigned int white; /* 1 */
-extern const unsigned int black; /* 2 */
+extern const unsigned int black; /* 1 */
+extern const unsigned int white; /* 2 */
 
 extern const unsigned int player_one; /* black */
 extern const unsigned int player_two; /* white */
index b57689483770d73f30c1203e40b77f79c8588eb9..4bbf120d6ed2da3dc6dc43e7dc720b14f9356b9a 100644 (file)
@@ -127,6 +127,17 @@ bool is_board_full(unsigned int pawn_array[board_size][board_size]) {
     return true;
 }
 
+unsigned int eval_winner(unsigned int nb_white, unsigned int nb_black) {
+
+    if (nb_white > nb_black) {
+        return player_two;
+    } else if (nb_white < nb_black) {
+        return player_one;
+    } else {
+        return 0;
+    }
+}
+
 void status_pawn(int y, int x, unsigned int pawn_array[board_size][board_size]) {
 
 }
index 62fb04a1a8aac5a2fe37ccc7fb00d3ae36495813..24bf9fb30750f47dedb4b170ef58f5a2e7e57df4 100644 (file)
@@ -28,14 +28,15 @@ struct shots_list {
 };
 
 unsigned int current_player(unsigned int round_count);
+unsigned int eval_winner(unsigned int nb_white, unsigned int nb_black);
 
 int** init_pawns(unsigned int pawn_array[board_size][board_size]);
+unsigned int get_box_value(int y, int x, unsigned int pawn_array[board_size][board_size]);
+int** set_pawn(int y, int x, unsigned int type, unsigned int pawn_array[board_size][board_size]);
 
 bool is_valid_input(int y, int x, unsigned int pawn_array[board_size][board_size]);
 bool is_box_type(int y, int x, unsigned int pawn_array[board_size][board_size], unsigned int type);
 bool is_board_full(unsigned int pawn_array[board_size][board_size]);
-unsigned int get_box_value(int y, int x, unsigned int pawn_array[board_size][board_size]);
-int** set_pawn(int y, int x, unsigned int type, unsigned int pawn_array[board_size][board_size]);
 
 unsigned int count_pawn_type(unsigned int pawn_array[board_size][board_size], unsigned int type);
 
index c75e3b01ca69f981a1544455fc6aaf51494968b3..ae14d1df861be54fe1d6160ecef48c86d660d3f2 100644 (file)
--- a/lib/ui.c
+++ b/lib/ui.c
@@ -56,6 +56,12 @@ void print_board(int y, int x) {
     mvprintw(y+25, x, " -----+----+----+----+----+----+----+-----");
 }
 
+static void set_default_colors() {
+
+    init_pair(1, COLOR_WHITE, COLOR_BLACK);
+    attron(COLOR_PAIR(1));
+}
+
 static void print_o(int y, int x, unsigned int type) {
 
     if (type == black) {
@@ -69,8 +75,7 @@ static void print_o(int y, int x, unsigned int type) {
     mvprintw(y, x, "/\\");
     mvprintw(y+1, x, "\\/");
     /* reset to default */
-    init_pair(1, COLOR_WHITE, COLOR_BLACK);
-    attron(COLOR_PAIR(1));
+    set_default_colors();
 }
 
 /* will be used for pawn placement hints */
@@ -86,8 +91,7 @@ static void print_x(int y, int x, unsigned int type) {
     mvprintw(y, x, "\\/");
     mvprintw(y+1, x,"/\\");
     /* reset to default */
-    init_pair(1, COLOR_WHITE, COLOR_BLACK);
-    attron(COLOR_PAIR(1));
+    set_default_colors();
 }
 
 /* y = 1: y -> 0      x = 1: 1 -> 1
index 4f5e61da73ac243a7b194b937f9ccb08ec3d4e5d..b8c0c5e4c9bd1b05ac2ab4d83e5ab63f85f1def5 100644 (file)
@@ -8,6 +8,7 @@
 #include "debug.h"
 
 int main() {
+    int min_y = 26, min_x = 42;
     int row = 0, col = 0;
     unsigned int round = 0;
     unsigned int player = player_one; /* first player is black */
@@ -16,7 +17,12 @@ int main() {
 
     LIST_HEAD(shots_list);
 
-    char* player_msg;
+    char* title_msg = "Jeu Othello";
+    char* score_white_msg = "Pions blancs: %d";
+    char* score_black_msg = "Pions noirs: %d";
+    char* player_msg = "Joueur %d joue !";
+    char* winner_msg = "Joueur %d gagne !";
+    char* draw_msg = "Egalite !";
 
     unsigned int pawns[board_size][board_size] = {{}};
     pawns[board_size][board_size] = init_pawns(pawns);
@@ -30,7 +36,6 @@ int main() {
     start_color();
     getmaxyx(stdscr, row, col);
     /* FIXME: fail if the screen size is too small */
-    //noecho();
     echo();
     curs_set(0);
 
@@ -45,26 +50,18 @@ int main() {
         print_board(board_center_y, board_center_x);
         print_pawns(board_center_y, board_center_x, pawns);
 
-        char* title_msg = "Jeu Othello";
         mvprintw(center_y - 26/2 - 4, (center_x - strlen(title_msg)/2), title_msg);
 
+        player = current_player(round);
+
+        mvprintw(center_y - 26/2 - 2, (center_x - strlen(player_msg)/2), player_msg, player);
+
         nb_white = count_pawn_type(pawns, white);
         nb_black = count_pawn_type(pawns, black);
         
-        char* score_white_msg = "Pions blancs: %d";
         mvprintw(center_y, center_x - 42/2 - strlen(score_white_msg) - 2, score_white_msg, nb_white);
-        char* score_black_msg = "Pions noirs: %d";
         mvprintw(center_y, center_x + 42/2 + 2, score_black_msg, nb_black);
 
-        player = current_player(round);
-        
-        if (player == player_one) {
-            player_msg = "Joueur un (noir) joue !";
-        } else {
-            player_msg = "Joueur deux (blanc) joue !";
-        }
-        mvprintw(center_y - 26/2 - 2, (center_x - strlen(player_msg)/2), player_msg);
-
         int y;
         char x;
         bool input_ok = false;
@@ -86,8 +83,16 @@ int main() {
 
         refresh();
 
-        if (is_board_full(pawns) || round == 60) {
-            /* print the winnner and the restart possibility */
+        /* here are all the end of the game conditions */
+        //if (is_board_full(pawns) || round == 60) {
+        if (is_board_full(pawns)) {
+            int winner = eval_winner(nb_white, nb_black);
+            if (winner != 0) {
+                mvprintw(center_y - 26/2 - 2, (center_x - strlen(winner_msg)/2), winner_msg, winner);
+            } else {
+                mvprintw(center_y - 26/2 - 2, (center_x - strlen(draw_msg)/2), draw_msg);
+            }
+            /* print and implement restart possibility */
             exit_condition = true;
         }