correct save file format
authorLaurent Mazet <mazet@softndesign.org>
Mon, 23 Sep 2024 20:53:07 +0000 (22:53 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Mon, 23 Sep 2024 20:53:07 +0000 (22:53 +0200)
function.c
reversi.c
type.h

index aca5cd24d8b487ae25d1e6ecd9f12b17197ea27c..ac4260932eb489b483956c834a58cc1122580276 100644 (file)
@@ -101,7 +101,8 @@ char *saveboard (board_t *board)
     char *buffer = (char *) calloc (size, 1);
     CHECKALLOC (buffer);
 
-    int l = sprintf (buffer, "id: %d\n", board->id);
+    int l = sprintf (buffer, "ai: %d\n", board->ai);
+    l += sprintf (buffer + l, "id: %d\n", board->id);
     l += sprintf (buffer + l, "height: %d\n", board->height);
     l += sprintf (buffer + l, "scale: %d\n", board->scale);
     l += sprintf (buffer + l, "tab: \"%s\"\n", board->tab);
@@ -169,6 +170,7 @@ char *atos (char *str)
 
 board_t *loadboard (char *str)
 {
+    int ai = -1;
     int id = 0;
     int height = 0;
     int scale = 1;
@@ -187,7 +189,9 @@ board_t *loadboard (char *str)
             value++;
         }
 
-        if (strcmp (keyword,  "id") == 0) {
+        if (strcmp (keyword,  "ai") == 0) {
+            ai = atoi (value);
+        } else if (strcmp (keyword,  "id") == 0) {
             id = atoi (value);
         } else if (strcmp (keyword,  "height") == 0) {
             height = atoi (value);
@@ -210,6 +214,7 @@ board_t *loadboard (char *str)
     if ((tab) && (strlen (tab) == (size_t)(width * height))) {
         board = initboard (width, height);
         memcpy (board->tab, tab, width * height);
+        board->ai = ai;
         board->id = id;
         board->scale = scale;
     }
index 6a12da79fb2049654ebdd83f09d7a8bf1ec78463..80c40693c01a37ab266f769c39fe5dfad67d59be 100644 (file)
--- a/reversi.c
+++ b/reversi.c
@@ -146,6 +146,7 @@ int main (int argc, char *argv[])
             VERBOSE (ERROR, fprintf (stderr, "incorrect file (%s)\n", filename));
             return 1;
         }
+        ai = board->ai;
         id = board->id;
         scale = board->scale;
     } else if (boardname) {
@@ -232,7 +233,7 @@ int main (int argc, char *argv[])
                     } else {
                         break;
                     }
-                } else { // id == ai
+                } else { /* id == ai */
                     if (!play (board, id)) {
                         sprintf (msg, "Skip %s", id ? "Two" : "One");
                         id = id ? 0 : 1;
@@ -252,7 +253,7 @@ int main (int argc, char *argv[])
                 mode = 1;
             }
         }
-        if (*msg) {
+        if (*msg == 0) {
             sprintf (msg, "Player %s", id ? "Two" : "One");
         }
         
@@ -294,6 +295,7 @@ int main (int argc, char *argv[])
         case 's':
             savename = savewindow (savelen, xsave, ysave);
             if (savename != NULL) {
+                board->ai = ai;
                 board->id = id;
                 board->scale = scale;
                 char *ptr = saveboard (board);
@@ -395,7 +397,7 @@ int main (int argc, char *argv[])
 /* test: { for s in kkkkllo mkklo u q; do sleep 1; echo -n $s; done; } | reversi.exe -r 8 | grep omkklouq */
 /* test: { sleep 1; echo -n kko; sleep 1; echo q; } | reversi.exe -s 3 -b 4x4 */
 /* test: { sleep 1; echo -n kkklo; sleep 1; echo q; } | reversi.exe -s 2 -b 6x6 */
-/* test: { sleep 1; echo -n kkkkllo; sleep 1; echo q; } | reversi.exe -s 1 -b 8x8 */
+/* test: { sleep 1; echo -n kkkkllo; sleep 1; echo -ne 'sfoo.rev\e'; sleep 1; echo q; } | reversi.exe -s 1 -b 8x8 && test \! -f foo.rev */
 /* test: { sleep 1; echo -n kkkkklllo; sleep 1; echo q; } | reversi.exe -s 0 -b 10x10 */
 /* test: { sleep 1; echo -n kkkkkkllllo; sleep 1; echo q; } | reversi.exe -b 12x12 */
 /* test: { sleep 1; echo -n kkkkkkklllllo; sleep 1; echo q; } | reversi.exe -b 14x14 */
@@ -403,5 +405,6 @@ int main (int argc, char *argv[])
 /* test: { for s in kko ko ml mo lljjlljo mlmo iijjjo io llo jllko q; do echo -n $s; sleep .3; done; } | reversi.exe -b 4x4 */
 /* test: { sleep 1; echo -n kkkkllo; sleep 1; echo -e 'sgb\bame.rev'; sleep 1; echo q; } | reversi.exe -v 2 */
 /* test: { sleep 1; echo -n kkkkllklo; sleep 1; echo q; } | reversi.exe -f game.rev && rm game.rev */
+/* test: { for s in kko iio lllko jkjko lo iiio kkklppo q; do echo -n $s; sleep .3; done; } | reversi.exe -a -b 4x4 */
 
 /* vim: set ts=4 sw=4 et: */
diff --git a/type.h b/type.h
index ce000635a9aa0a1994fd9de80b46b5e0e2ce1313..baed90fd174f9b7b4746c9d9b069b697b63b30d0 100644 (file)
--- a/type.h
+++ b/type.h
@@ -10,6 +10,7 @@ typedef struct {
     int ysize;
     int xoffset;
     int yoffset;
+    int ai;
     int id;
 } board_t;