From 3439232730b35ce392e163f8bf0bc925a0579512 Mon Sep 17 00:00:00 2001
From: Joseph Redmon <pjreddie@gmail.com>
Date: Mon, 14 Mar 2016 08:46:42 +0000
Subject: [PATCH] color stable

---
 src/go.c |   44 +++++++++++++++++++++++++++++---------------
 1 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/src/go.c b/src/go.c
index 5f8a418..f826d1e 100644
--- a/src/go.c
+++ b/src/go.c
@@ -117,12 +117,12 @@
     int i;
     int *l = calculate_liberties(board);
     for(i = 0; i < 19*19; ++i){
-        if (board[i] && !l[i]) board[i] = 0;
+        if (board[i] < 0 && !l[i]) board[i] = 0;
     }
     free(l);
 }
 
-void print_board(float *board)
+void print_board(float *board, int swap)
 {
     int i,j;
     printf("\n\n");
@@ -135,8 +135,8 @@
         printf("%2d ", 19-j);
         for(i = 0; i < 19; ++i){
             int index = j*19 + i;
-            if(board[index] > 0) printf("\u25C9 ");
-            else if(board[index] < 0) printf("\u25EF ");
+            if(board[index]*-swap > 0) printf("\u25C9 ");
+            else if(board[index]*-swap < 0) printf("\u25EF ");
             else printf("  ");
         }
         printf("\n");
@@ -161,11 +161,13 @@
     set_batch_network(&net, 1);
     float *board = calloc(19*19, sizeof(float));
     float *move = calloc(19*19, sizeof(float));
-    image bim = float_to_image(19, 19, 1, board);
+    int color = 1;
     while(1){
         float *output = network_predict(net, board);
         copy_cpu(19*19, output, 1, move, 1);
         int i;
+        #ifdef GPU
+        image bim = float_to_image(19, 19, 1, board);
         for(i = 1; i < 8; ++i){
             rotate_image_cw(bim, i);
             if(i >= 4) flip_image(bim);
@@ -182,6 +184,7 @@
             rotate_image_cw(bim, -i);
         }
         scal_cpu(19*19, 1./8., move, 1);
+        #endif
         for(i = 0; i < 19*19; ++i){
             if(board[i]) move[i] = 0;
         }
@@ -189,40 +192,51 @@
         int indexes[3];
         int row, col;
         top_k(move, 19*19, 3, indexes);
-        print_board(board);
+        print_board(board, color);
         for(i = 0; i < 3; ++i){
             int index = indexes[i];
             row = index / 19;
             col = index % 19;
             printf("Suggested: %c %d, %.2f%%\n", col + 'A' + 1*(col > 7), 19 - row, move[index]*100);
         }
-            int index = indexes[0];
-            row = index / 19;
-            col = index % 19;
+        int index = indexes[0];
+        int rec_row = index / 19;
+        int rec_col = index % 19;
 
-        printf("\u25C9 Enter move: ");
+        if(color == 1) printf("\u25EF Enter move: ");
+        else printf("\u25C9 Enter move: ");
+
         char c;
         char *line = fgetl(stdin);
         int num = sscanf(line, "%c %d", &c, &row);
-        if (c < 'A' || c > 'T'){
+        if (strlen(line) == 0){
+            row = rec_row;
+            col = rec_col;
+            board[row*19 + col] = 1;
+        }else if (c < 'A' || c > 'T'){
             if (c == 'p'){
-                board[row*19 + col] = 1;
+                flip_board(board);
+                color = -color;
+                continue;
             }else{
                 char g;
                 num = sscanf(line, "%c %c %d", &g, &c, &row);
                 row = 19 - row;
                 col = c - 'A';
                 if (col > 7) col -= 1;
-                board[row*19 + col] = 0;
+                if (num == 2) board[row*19 + col] = 0;
             }
-        } else {
+        } else if(num == 2){
             row = 19 - row;
             col = c - 'A';
             if (col > 7) col -= 1;
-            if(num == 2) board[row*19 + col] = 1;
+            board[row*19 + col] = 1;
+        }else{
+            continue;
         }
         update_board(board);
         flip_board(board);
+        color = -color;
     }
 
 }

--
Gitblit v1.10.0