find possible positions
authorLaurent Mazet <mazet@softndesign.org>
Thu, 19 Sep 2024 18:03:35 +0000 (20:03 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Thu, 19 Sep 2024 18:03:35 +0000 (20:03 +0200)
display.c
function.c
function.h
reversi.c

index 40888167ae5c93a150d509bb81b2ab08d2174d04..98021de5d9ecc87d2dc018e8e136b6cbf39fcdff 100644 (file)
--- a/display.c
+++ b/display.c
@@ -84,6 +84,9 @@ void _put_color_block (int y, int x, char symb)
     case '3':
         mvaddcb (y, x, lighterred);
         break;
+    case '4':
+        mvaddcb (y, x, lightergreen);
+        break;
     }
 }
 
index ca43ba22f789e524b14e09fa12b8d2309f1f28ca..d4a7b74814c18fae348096857fc85fba58ad1366 100644 (file)
@@ -37,6 +37,17 @@ board_t *initboard (int width, int height)
     return board;
 }
 
+board_t *copyboard (board_t *board)
+{
+    board_t *newboard = (board_t *) malloc (sizeof (board_t));
+    CHECKALLOC (board);
+    memcpy (newboard, board, sizeof (board_t));
+    newboard->tab = (char *) calloc (1, board->width * board->height + 1);
+    CHECKALLOC (newboard->tab);
+    memcpy (newboard->tab, board->tab, board->width * board->height + 1);
+    return newboard;
+}
+
 board_t *setscale (board_t *board, int scale)
 {
     board->scale = scale;
@@ -289,4 +300,24 @@ int putdisk (board_t *board, int x, int y, int id)
     return ret;
 }
 
+int find (board_t *board, int id)
+{
+    int ret = 0;
+    int x, y;
+    for (x = 0; x < board->width; x++) {
+        for (y = 0; y < board->height; y++) {
+            if (*getcell (board, x, y) == ' ') {
+                int dir;
+                for (dir = 0; dir < 8; dir++) {
+                    if (_checkline (board, x, y, id, dir)) {
+                        *getcell (board, x, y) = '4';
+                        ret = 1;
+                    }
+                }
+            }
+        }
+    }
+    return ret;
+}
+
 /* vim: set ts=4 sw=4 et: */
index 7a94cf76d85dd613ab42d5f72beeed031535d2af..af8eed9b68e7fba41dc1baa1e3c8f0d5b00c2777 100644 (file)
@@ -23,6 +23,8 @@ int strmaxlen (char *str, char ch);
 
 board_t *initboard (int width, int height);
 
+board_t *copyboard (board_t *board);
+
 board_t *setscale (board_t *board, int scale);
 
 void freeboard (board_t *board);
@@ -41,6 +43,8 @@ board_t *loadboard (char *str);
 
 int putdisk (board_t *board, int x, int y, int id);
 
+int find (board_t *board, int id);
+
 #endif /* __FUNCTION_H__ */
 
 /* vim: set ts=4 sw=4 et: */
index a41a5799fc1096a50ecb947db69b46f42cc797ee..67ffb36cda349c6b5cf08af06c11273c664a831b 100644 (file)
--- a/reversi.c
+++ b/reversi.c
@@ -175,7 +175,11 @@ int main (int argc, char *argv[])
     int mode = 0;
     while (!stop) {
 
-        boardwindow (board, 0);
+        board_t *boardturn = copyboard (board);
+        int ret = find (boardturn, id);
+        boardwindow (boardturn, 0);
+        freeboard (boardturn);
+
         displaycursor (board, id, xcursor, ycursor);
 
         int ch = getch ();