From: Laurent Mazet Date: Sat, 1 Jun 2024 15:14:46 +0000 (+0200) Subject: move tile in line X-Git-Tag: v1.0~43 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=8342acee4ea14877ad2329376b6eab74e9091d54;p=scrabble.git move tile in line --- diff --git a/display.c b/display.c index ac2b682..dee09c8 100644 --- 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); diff --git a/display.h b/display.h index 66d8189..01be18b 100644 --- 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__ */ diff --git a/function.c b/function.c index 866a3a8..0a96309 100644 --- a/function.c +++ b/function.c @@ -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: */ diff --git a/function.h b/function.h index 736c84a..2fc1f70 100644 --- a/function.h +++ b/function.h @@ -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: */ diff --git a/scrabble.c b/scrabble.c index 474311c..022d9bc 100644 --- a/scrabble.c +++ b/scrabble.c @@ -30,16 +30,19 @@ int xoffset = 4; int yoffset = 3; char *help = - " Move tile\n" - " Draw tile\n" - " Move up tile\n" + " Change tile in line\n" + " Draw new tiles\n" + " Move up til\n" " Move left tile\n" " Move down tile\n" " Move right tile\n" " Quit\n" " Toggle case legend\n" " Put tile\n" - " Retrieve tile\n"; + " Retrieve tile\n" + " Move left in line\n" + " 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: }