move tile in line
authorLaurent Mazet <mazet@softndesign.org>
Sat, 1 Jun 2024 15:14:46 +0000 (17:14 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Sat, 1 Jun 2024 15:14:46 +0000 (17:14 +0200)
display.c
display.h
function.c
function.h
scrabble.c

index ac2b682ae5604a8906cfb8da5f13c452404024cb..dee09c8cc81c9b813a0e26de631ca3b1c9d5406a 100644 (file)
--- a/display.c
+++ b/display.c
@@ -177,10 +177,10 @@ void valuewindow (bag_t *bag, int xoffset, int yoffset, int length)
     }
 }
 
-void drawwindow (draw_t *game, int xoffset, int yoffset, int length)
+void drawwindow (draw_t *game, int xoffset, int yoffset)
 {
     int i;
-    for (i = 0; i < 2 * length - 1; i++) {
+    for (i = 0; i < 2 * game->nbtiles - 1; i++) {
         mvaddch (yoffset - 1, xoffset + i, ACS_HLINE);
         mvaddch (yoffset, xoffset + i, ' ');
         mvaddch (yoffset + 1, xoffset + i, ACS_HLINE);
@@ -188,9 +188,9 @@ void drawwindow (draw_t *game, int xoffset, int yoffset, int length)
     mvaddch (yoffset - 1, xoffset - 1, ACS_ULCORNER);
     mvaddch (yoffset, xoffset - 1, ACS_VLINE);
     mvaddch (yoffset + 1, xoffset - 1, ACS_LLCORNER);
-    mvaddch (yoffset - 1, xoffset + 2 * length - 1, ACS_URCORNER);
-    mvaddch (yoffset, xoffset + 2 * length - 1, ACS_VLINE);
-    mvaddch (yoffset + 1, xoffset + 2 * length - 1, ACS_LRCORNER);
+    mvaddch (yoffset - 1, xoffset + 2 * game->nbtiles - 1, ACS_URCORNER);
+    mvaddch (yoffset, xoffset + 2 * game->nbtiles - 1, ACS_VLINE);
+    mvaddch (yoffset + 1, xoffset + 2 * game->nbtiles - 1, ACS_LRCORNER);
 
     mvaddch (yoffset - 1, xoffset + 2 * game->index , ACS_TTEE);
     mvaddch (yoffset + 1, xoffset + 2 * game->index , ACS_BTEE);
index 66d8189f7fb8ad17af653a6947e5d0093c80b3bd..01be18bb74984da87b2971a7014c9bea4f486459 100644 (file)
--- a/display.h
+++ b/display.h
@@ -13,7 +13,7 @@ void helpwindow (char *msg, char *msg2, int xoffset, int yoffset, int length);
 
 void valuewindow (bag_t *bag, int xoffset, int yoffset, int length);
 
-void drawwindow (draw_t *game, int xoffset, int yoffset, int length);
+void drawwindow (draw_t *game, int xoffset, int yoffset);
 
 #endif /* __DISPLAY_H__ */
 
index 866a3a8975a9e652c59f5e869943f8c83b6a68b1..0a963097ef4c703a694c539432628ce6fec3f073 100644 (file)
@@ -129,4 +129,22 @@ int returnletter (draw_t *game, char letter)
     return ret;
 }
 
+void moveletter (draw_t *game, int move)
+{
+    int index = game->index + move;
+    if (index < 0) {
+        index = 0;
+    }
+    if (index >= game->nbtiles) {
+        index = game->nbtiles - 1;
+    }
+
+    char tile = game->tiles[game->index];
+    game->tiles[game->index] = game->tiles[index];
+    game->tiles[index] = tile;
+
+    game->index = index;
+}
+
+
 /* vim: set ts=4 sw=4 et: */
index 736c84a5536603bf88bf8d9a13e3ad65a8cf8188..2fc1f70807a634e2cf2b307b65e1a02e43e9c145 100644 (file)
@@ -27,6 +27,8 @@ char getnewletter (draw_t *game);
 
 int returnletter (draw_t *game, char letter);
 
+void moveletter (draw_t *game, int move);
+
 #endif /* __FUNCTION_H__ */
 
 /* vim: set ts=4 sw=4 et: */
index 474311ccb58ad9b11d4baa7efb624cc4f8f6e6a0..022d9bc36115e938bb10ade6988cf2abdceb4553 100644 (file)
@@ -30,16 +30,19 @@ int xoffset = 4;
 int yoffset = 3;
 
 char *help =
-    "<c> Move tile\n"
-    "<d> Draw tile\n"
-    "<i> Move up tile\n"
+    "<c> Change tile in line\n"
+    "<d> Draw new tiles\n"
+    "<i> Move up til\n"
     "<j> Move left tile\n"
     "<k> Move down tile\n"
     "<l> Move right tile\n"
     "<q> Quit\n"
     "<t> Toggle case legend\n"
     "<v> Put tile\n"
-    "<x> Retrieve tile\n";
+    "<x> Retrieve tile\n"
+    "<J> Move left in line\n"
+    "<K> Move rift in line\n"
+    ;
 
 int usage (int ret)
 {
@@ -154,7 +157,7 @@ int main (int argc, char *argv[])
     int y = (play->ysize + 1)/ 2 - 1;
 
     char current, letter = getnextletter (game);
-    drawwindow (game, xdrawwin, ydrawwin, board->length);
+    drawwindow (game, xdrawwin, ydrawwin);
     int stop = 0;
     while (!stop) {
         current = gessletter (play, x, y);
@@ -168,7 +171,7 @@ int main (int argc, char *argv[])
         case '\t':
         case 'c':
             letter = getnextletter (game);
-            drawwindow (game, xdrawwin, ydrawwin, board->length);
+            drawwindow (game, xdrawwin, ydrawwin);
             break;
         case KEY_ENTER:
         case '\n':
@@ -176,7 +179,7 @@ int main (int argc, char *argv[])
         case 'd':
             game = retrievetiles (draw, board->length, game);
             letter = getnextletter (game);
-            drawwindow (game, xdrawwin, ydrawwin, board->length);
+            drawwindow (game, xdrawwin, ydrawwin);
             break;
         case KEY_UP:
         case 'i':
@@ -213,7 +216,7 @@ int main (int argc, char *argv[])
         case 'v':
             if (putletter (play, letter, x, y)) {
                 letter = getnewletter (game);
-                drawwindow (game, xdrawwin, ydrawwin, board->length);
+                drawwindow (game, xdrawwin, ydrawwin);
             }
             break;
         case KEY_BACKSPACE:
@@ -226,10 +229,20 @@ int main (int argc, char *argv[])
                 if (returnletter (game, current)) {
                     removeletter (play, x, y);
                     letter = getnextletter (game);
-                    drawwindow (game, xdrawwin, ydrawwin, board->length);
+                    drawwindow (game, xdrawwin, ydrawwin);
                 }
             }
             break;
+        case KEY_HOME:
+        case 'J':
+            moveletter (game, -1);
+            drawwindow (game, xdrawwin, ydrawwin);
+            break;
+        case KEY_END:
+        case 'L':
+            moveletter (game, +1);
+            drawwindow (game, xdrawwin, ydrawwin);
+            break;
         case ERR:
         default:
         }