return ret;
}
+void removeletter (play_t *play, int x, int y)
+{
+ play->tab[x + play->xsize * y] = ' ';
+}
+
+char gessletter (play_t *play, int x, int y)
+{
+ return play->tab[x + play->xsize * y];
+}
+
draw_t *newdraw (int nbtiles)
{
draw_t *draw = (draw_t *) malloc (sizeof (draw_t));
return getnextletter (game);
}
+int returnletter (draw_t *game, char letter)
+{
+ int i, ret = 0;
+ for (i = 0; i < game->nbtiles; i++) {
+ if (game->tiles[i] == '\0') {
+ game->tiles[i] = letter;
+ game->index = i - 1;
+ ret = 1;
+ break;
+ }
+ }
+ return ret;
+}
+
/* vim: set ts=4 sw=4 et: */
int putletter (play_t *play, char letter, int x, int y);
+void removeletter (play_t *play, int x, int y);
+
+char gessletter (play_t *play, int x, int y);
+
draw_t *newdraw (int nbtiles);
draw_t *initdraw (bag_t *bag);
char getnewletter (draw_t *game);
+int returnletter (draw_t *game, char letter);
+
#endif /* __BOARD_H__ */
/* vim: set ts=4 sw=4 et: */
magenta,
yellow,
black,
+ wred,
+ wgreen,
+ wblue,
+ wcyan,
+ wmagenta,
+ wyellow,
} color_t;
void set_color (color_t color)
init_pair (yellow, COLOR_BLACK, COLOR_YELLOW);
init_pair (cyan, COLOR_BLACK, COLOR_CYAN);
init_pair (black, COLOR_BLACK, COLOR_WHITE);
+ init_pair (wred, COLOR_WHITE, COLOR_RED);
+ init_pair (wgreen, COLOR_WHITE, COLOR_GREEN);
+ init_pair (wblue, COLOR_WHITE, COLOR_BLUE);
+ init_pair (wcyan, COLOR_WHITE, COLOR_CYAN);
+ init_pair (wmagenta, COLOR_WHITE, COLOR_MAGENTA);
+ init_pair (wyellow, COLOR_WHITE, COLOR_YELLOW);
init = 0;
}
attrset (COLOR_PAIR(color));
}
-void showletter (char letter, int x, int y)
+void showletter (char letter, int x, int y, int mode)
{
if (letter != '\0') {
+ set_color (mode ? yellow: wyellow);
mvaddch(y, x, letter);
+ set_color (white);
}
}
int putletter (play_t *play, char letter, int x, int y);
-void showletter (char letter, int x, int y);
+void showletter (char letter, int x, int y, int mode);
void showboard (play_t *play, board_t *board, int xoffset, int yoffset, int full);
#include "debug.h"
#define KEY_ESC 0x1b
+#define KEY_DELETE 0x014a
/* static variables */
char *progname = NULL;
int xoffset = 4;
int yoffset = 3;
-char *help = "<d> Draw tile\n<i>, <j>, <k>, <l> Move tile\n<m> Move tile\n<p> Put tile\n<q> Quit\n<t> Toggle case legend\n";
+char *help =
+ "<c> Move tile\n"
+ "<d> Draw tile\n"
+ "<i> Move up tile\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";
int usage (int ret)
{
int x = (play->xsize + 1)/ 2 - 1;
int y = (play->ysize + 1)/ 2 - 1;
- char letter = getnextletter (game);
+ char current, letter = getnextletter (game);
drawwindow (game, xoffset, 2 * yoffset + board->ysize, board->length);
int stop = 0;
while (!stop) {
- showletter (letter, x + xoffset, y + yoffset);
+ current = gessletter (play, x, y);
+ if (current == ' ') {
+ showletter (letter, x + xoffset, y + yoffset, 1);
+ } else {
+ showletter (current, x + xoffset, y + yoffset, 0);
+ }
switch (getch ()) {
- case KEY_ESC:
- case ':':
+ case '\t':
+ case 'c':
+ letter = getnextletter (game);
+ drawwindow (game, xoffset, 2 * yoffset + board->ysize, board->length);
break;
+ case KEY_ENTER:
case 'd':
game = retrievetiles (draw, board->length, game);
letter = getnextletter (game);
x++;
}
break;
- case 'm':
- letter = getnextletter (game);
- drawwindow (game, xoffset, 2 * yoffset + board->ysize, board->length);
+ case KEY_ESC:
+ case 'q':
+ stop = 1;
break;
- case 'p':
+ case 't':
+ mode ^= 1;
+ break;
+ case ' ':
+ case 'v':
if (putletter (play, letter, x, y)) {
letter = getnewletter (game);
drawwindow (game, xoffset, 2 * yoffset + board->ysize, board->length);
}
break;
- case 'q':
- stop = 1;
- break;
- case 't':
- mode ^= 1;
+ case KEY_BACKSPACE:
+ case KEY_DELETE:
+ case 127:
+ case '\b':
+ case 'x':
+ current = gessletter (play, x, y);
+ if (current != ' ') {
+ if (returnletter (game, current)) {
+ removeletter (play, x, y);
+ letter = getnextletter (game);
+ drawwindow (game, xoffset, 2 * yoffset + board->ysize, board->length);
+ }
+ }
break;
case ERR:
default: