first move
authorLaurent Mazet <mazet@softndesign.org>
Sat, 29 Jun 2024 22:05:28 +0000 (00:05 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Sat, 29 Jun 2024 22:05:28 +0000 (00:05 +0200)
checkers.c
constant.c
display.c
function.c
function.h

index 27b8997a8909c555f111145a29e432f5aa372d25..6ab7858142b1d9e0c6395b2add20df35d272e150 100644 (file)
@@ -143,6 +143,7 @@ int main (int argc, char *argv[])
             return 1;
         }
         board = copyboard (temp);
+        initplay (board);
     }
     setscale (board, scale);
 
@@ -159,7 +160,7 @@ int main (int argc, char *argv[])
     int xboard = board->xoffset = xoffset + 1;
     int yboard = board->yoffset = xoffset + 1;
     int xhelp = xboard + xoffset + 1 + board->xsize;
-    int xcursor = 0;
+    int xcursor = 1;
     int ycursor = 0;
     int yhelp = yboard - 1;
     int xsave = max (xboard + (board->xsize - savelen) / 2, 1);
@@ -196,13 +197,14 @@ int main (int argc, char *argv[])
         case 'c':
             if (mode == 1) {
                 mode = 0;
-            } else if (getvalue (board, xcursor, ycursor) == '0' + player) {
+            } else if ((getvalue (board, xcursor, ycursor) != ' ')  && ((getvalue (board, xcursor, ycursor) - '0') % 2 == player)) {
                 mode = 1;
             }
             break;
         case KEY_UP:
         case 'i':
             if (mode == 0) {
+                xcursor = (xcursor + 1) % board->width;
                 ycursor = (ycursor + board->height - 1) % board->height;
             } else {
                 mode = 0;
@@ -212,6 +214,7 @@ int main (int argc, char *argv[])
         case 'j':
             if (mode == 0) {
                 xcursor = (xcursor + board->width - 1) % board->width;
+                ycursor = (ycursor + board->height - 1) % board->height;
             } else {
                 mode = 0;
             }
@@ -219,6 +222,7 @@ int main (int argc, char *argv[])
         case KEY_DOWN:
         case 'k':
             if (mode == 0) {
+                xcursor = (xcursor + board->width - 1) % board->width;
                 ycursor = (ycursor + 1) % board->height;
             } else {
                 mode = 0;
@@ -228,6 +232,7 @@ int main (int argc, char *argv[])
         case 'l':
             if (mode == 0) {
                 xcursor = (xcursor + 1) % board->width;
+                ycursor = (ycursor + 1) % board->height;
             } else {
                 mode = 0;
             }
index f59b4d87465b6742a4129980dec142b768a7daa4..7142cf5bc81f0d9edeb0fd489d86a38b5703a11d 100644 (file)
@@ -7,28 +7,28 @@
 
 board_t _board_8x8 = {
     8, 8,
-    " X X X X"
-    "X X X X "
-    " X X X X"
-    "X X X X "
-    " X X X X"
-    "X X X X "
-    " X X X X"
-    "X X X X ",
+    " . . . ."
+    ". . . . "
+    " . . . ."
+    ". . . . "
+    " . . . ."
+    ". . . . "
+    " . . . ."
+    ". . . . ",
     0, 0, 0, 0, 0};
 
 board_t _board_10x10 = {
     10, 10,
-    " X X X X X"
-    "X X X X X "
-    " X X X X X"
-    "X X X X X "
-    " X X X X X"
-    "X X X X X "
-    " X X X X X"
-    "X X X X X "
-    " X X X X X"
-    "X X X X X ",
+    " . . . . ."
+    ". . . . . "
+    " . . . . ."
+    ". . . . . "
+    " . . . . ."
+    ". . . . . "
+    " . . . . ."
+    ". . . . . "
+    " . . . . ."
+    ". . . . . ",
     0, 0, 0, 0, 0};
 
 board_t *getboard (char *name)
index 93c2ea71461d7726dda287109390feb8ec58936a..a25b644ba31a3091e0ed44b41d5450bcc13dbf58 100644 (file)
--- a/display.c
+++ b/display.c
@@ -210,9 +210,12 @@ void _element2 (board_t *board, int x, int y, int symb)
     int element01 = ' ';
     int element11 = ' ';
     switch (symb) {
-    case 'F':
-    case 'H':
-    case 'X':
+    case '0':
+    case '1':
+    case '2':
+    case '3':
+    case '4':
+    case '5':
         element00 = ACS_ULCORNER;
         element01 = ACS_URCORNER;
         element10 = ACS_LLCORNER;
@@ -221,30 +224,33 @@ void _element2 (board_t *board, int x, int y, int symb)
     }
     set_color (black);
     switch (symb) {
-    case 'C':
-        set_color (bgreen);
+    case ' ':
+        set_color (black);
         break;
-    case 'F':
+    case '.':
+        set_color (white);
+        break;
+    case '0':
         set_color (wgreen);
         break;
-    case 'H':
-        set_color (red);
+    case '1':
+        set_color (wred);
         break;
-    case 'P':
-        set_color (byellow);
+    case '2':
+        set_color (green);
         break;
-    case 'O':
-        set_color (white);
+    case '3':
+        set_color (red);
         break;
-    case 'X':
-        set_color (white);
+    case '4':
+        set_color (bgreen);
+        break;
+    case '5':
+        set_color (bred);
         break;
     case 'Z':
         set_color (bblue);
         break;
-    case ' ':
-        set_color (black);
-        break;
     }
     mvaddch (board->yoffset + 2 * y, board->xoffset + 2 * x, element00);
     mvaddch (board->yoffset + 2 * y, board->xoffset + 2 * x + 1, element01);
@@ -345,13 +351,14 @@ void boardwindow (board_t *board)
 void cursorwindow (board_t *board, int x, int y, int mode)
 {
     switch (getvalue (board, x, y)) {
-    case 'O':
-        _element (board, x, y, 'C');
+    case '0':
+        _element (board, x, y, (mode) ? '2' : '4');
         break;
-    case 'X':
-        _element (board, x, y, (mode) ? 'H' : 'F');
+    case '1':
+        _element (board, x, y, (mode) ? '3' : '5');
         break;
     case ' ':
+    case '.':
         _element (board, x, y, 'Z');
         break;
     }
index 446e0c1ac8c4bdceb6605d2dc3969e7973838a03..28d100382e765d3a1feb5753d2cbe68f2bc114f2 100644 (file)
@@ -36,6 +36,23 @@ board_t *initboard (int width, int height)
     return board;
 }
 
+board_t *initplay (board_t *board)
+{
+    int i, j;
+
+    for (j = 0; j < board->height / 2 - 1; j++) {
+        for (i = (j + 1) % 2; i < board->width; i += 2) {
+            *getcell (board, i, j) = '0';
+        }
+    }
+    for (j = board->height / 2 + 1; j < board->height; j++) {
+        for (i = (j + 1) % 2; i < board->width; i += 2) {
+            *getcell (board, i, j) = '1';
+        }
+    }
+    return board;
+}
+
 board_t *copyboard (board_t *board)
 {
     board_t *newboard = (board_t *) malloc (sizeof (board_t));
index 34f87600ae61c95dce1a67694f71de32e5d63615..3c941ef199a7cbded4a25b3b09ac2cdee98238e8 100644 (file)
@@ -19,6 +19,8 @@ int strmaxlen (char *str, char ch);
 
 board_t *initboard (int xsize, int ysize);
 
+board_t *initplay (board_t *board);
+
 board_t *copyboard (board_t *board);
 
 board_t *setscale (board_t *board, int scale);