test end of game
authorLaurent Mazet <mazet@softndesign.org>
Fri, 28 Jun 2024 21:24:13 +0000 (23:24 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Fri, 28 Jun 2024 21:24:13 +0000 (23:24 +0200)
function.c
function.h
solitaire.c

index d64ff5e5b4f0870d87bb0b5cc0b491fb86148dac..6dc23f5bbd152e83002be49036743b75239fd047 100644 (file)
@@ -194,19 +194,19 @@ char getvalue (board_t *board, int x, int y)
 
 int testjump (board_t *board, int x, int y, int mode)
 {
-    int ret = 0;
+    int ret = (getvalue (board, x, y) == 'X');
     switch (mode) {
     case 0:
-        ret = (getvalue (board, x, y - 1) == 'X') && (getvalue (board, x, y - 2) == 'O');
+        ret &= (getvalue (board, x, y - 1) == 'X') && (getvalue (board, x, y - 2) == 'O');
         break;
     case 1:
-        ret = (getvalue (board, x - 1, y) == 'X') && (getvalue (board, x - 2, y) == 'O');
+        ret &= (getvalue (board, x - 1, y) == 'X') && (getvalue (board, x - 2, y) == 'O');
         break;
     case 2:
-        ret = (getvalue (board, x, y + 1) == 'X') && (getvalue (board, x, y + 2) == 'O');
+        ret &= (getvalue (board, x, y + 1) == 'X') && (getvalue (board, x, y + 2) == 'O');
         break;
     case 3:
-        ret = (getvalue (board, x + 1, y) == 'X') && (getvalue (board, x + 2, y) == 'O');
+        ret &= (getvalue (board, x + 1, y) == 'X') && (getvalue (board, x + 2, y) == 'O');
         break;
     }
     return ret;
@@ -235,4 +235,18 @@ void dojump (board_t *board, int x, int y, int mode)
     }
 }
 
+int endofgame (board_t *board)
+{
+    int i, j, m;
+    for (i = 0; i < board->width; i++) {
+        for (j = 0; j < board->height; j++) {
+            for (m = 0; m < 4; m++)
+                if (testjump (board, i, j, m)) {
+                    return 0;
+                }
+        }
+    }
+    return 1;
+}
+
 /* vim: set ts=4 sw=4 et: */
index 32878a88f57663417ac395386ad6172a4c3171ef..927fb4d721f070508dd9fc4812a3f746089127af 100644 (file)
@@ -39,6 +39,8 @@ int testjump (board_t *board, int x, int y, int mode);
 
 void dojump (board_t *board, int x, int y, int mode);
 
+int endofgame (board_t *board);
+
 #endif /* __FUNCTION_H__ */
 
 /* vim: set ts=4 sw=4 et: */
index f6f99da7744ecad3c1ddc6e7411014d153c09e93..b774e7b0d8b3113f4457dd1e9271dcf6da2ac4de 100644 (file)
@@ -147,7 +147,9 @@ int main (int argc, char *argv[])
         char *ptr = NULL;
 
         boardwindow (board);
-        cursorwindow (board, xcursor, ycursor, mode);
+        if (!endofgame (board)) {
+            cursorwindow (board, xcursor, ycursor, mode);
+        }
 
         int ch = getch ();
         switch (ch) {