{
draw_t *ret = (game == NULL) ? newdraw (nbtiles) : game;
int i;
- for (i = 0; (game != NULL) && (i < game->nbtiles); i++) {
- draw->tiles[draw->nbtiles++] = game->tiles[i];
+ for (i = 0; i < ret->nbtiles; i++) {
+ if (ret->tiles[i] != '\0') {
+ draw->tiles[draw->nbtiles++] = ret->tiles[i];
+ ret->tiles[i] = '\0';
+ }
}
- for (i = 0; (i < nbtiles) && (draw->nbtiles > 0); i++) {
+ for (i = 0; (i < ret->nbtiles) && (i < draw->nbtiles); i++) {
int j = rand () % draw->nbtiles;
ret->tiles[i] = draw->tiles[j];
if (j < draw->nbtiles - 1) {
memmove(pt + j, pt + j + 1, draw->nbtiles - j - 1);
}
draw->nbtiles--;
- draw->tiles[draw->nbtiles] = 0;
+ draw->tiles[draw->nbtiles] = '\0';
}
ret->nbtiles = i;
+ ret->index = -1;
return ret;
}
free (draw);
}
-char getletter (draw_t *game)
+char getnextletter (draw_t *game)
{
char letter = 0;
- if (game->nbtiles > 0) {
- letter = game->tiles[game->nbtiles - 1];
- game->nbtiles--;
+ int i;
+ for (i = 0; i < game->nbtiles; i++) {
+ game->index = (game->index + 1) % game->nbtiles;
+ if (game->tiles[game->index] != '\0') {
+ letter = game->tiles[game->index];
+ break;
+ }
}
return letter;
}
+char getnewletter (draw_t *game)
+{
+ if (game->index != -1) {
+ game->tiles[game->index] = '\0';
+ }
+ return getnextletter (game);
+}
+
/* vim: set ts=4 sw=4 et: */
void freedraw (draw_t *draw);
-char getletter (draw_t *game);
+char getnextletter (draw_t *game);
+
+char getnewletter (draw_t *game);
#endif /* __BOARD_H__ */
}
}
-void drawwindow (draw_t *bag, int xoffset, int yoffset, int length)
+void drawwindow (draw_t *game, int xoffset, int yoffset, int length)
{
int i;
for (i = 0; i < 2 * length - 1; i++) {
mvaddch (yoffset, xoffset + 2 * length - 1, ACS_VLINE);
mvaddch (yoffset + 1, xoffset + 2 * length - 1, ACS_LRCORNER);
+ mvaddch (yoffset - 1, xoffset + 2 * game->index , ACS_TTEE);
+ mvaddch (yoffset + 1, xoffset + 2 * game->index , ACS_BTEE);
+
set_color (black);
- for (i = 0; i < bag->nbtiles; i++) {
- mvaddch (yoffset, xoffset + 2 * i, bag->tiles[i]);
+ for (i = 0; i < game->nbtiles; i++) {
+ if (game->tiles[i] != '\0') {
+ mvaddch (yoffset, xoffset + 2 * i, game->tiles[i]);
+ }
}
set_color (white);
}
void valuewindow (bag_t *bag, int xoffset, int yoffset, int length);
-void drawwindow (draw_t *bag, int xoffset, int yoffset, int length);
+void drawwindow (draw_t *game, int xoffset, int yoffset, int length);
#endif /* __DISPLAY_H__ */
#include <curses.h>
#include <stdio.h>
#include <stdlib.h>
+#include <time.h>
#include "board.h"
#include "constant.h"
return 1;
}
+ srand (time (NULL));
+
play_t *play = initplay (board->xsize, board->ysize);
VERBOSE (DEBUG, printf ("play: 0x%p\nboard: 0x%p\n", play, board));
draw_t *game = retrievetiles (draw, board->length, NULL);
VERBOSE (DEBUG, printf ("bag: 0x%p\ndraw: 0x%p\ngame: 0x%p\n", bag, draw, game));
- initscr();
- //seed = time((time_t *)0);
- //srand(seed);
-
- noecho();
- cbreak();
- nonl();
+ initscr ();
+ noecho ();
+ cbreak ();
+ nonl ();
+ keypad (stdscr, TRUE);
curs_set (0);
start_color ();
int x = (play->xsize + 1)/ 2 - 1;
int y = (play->ysize + 1)/ 2 - 1;
+ char letter = getnextletter (game);
drawwindow (game, xoffset, 2 * yoffset + board->ysize, board->length);
- char letter = getletter (game);
int stop = 0;
while (!stop) {
showletter (letter, x + xoffset, y + yoffset);
break;
case 'd':
game = retrievetiles (draw, board->length, game);
+ letter = getnextletter (game);
drawwindow (game, xoffset, 2 * yoffset + board->ysize, board->length);
- letter = getletter (game);
break;
case KEY_UP:
case 'i':
x++;
}
break;
+ case 'm':
+ letter = getnextletter (game);
+ drawwindow (game, xoffset, 2 * yoffset + board->ysize, board->length);
+ break;
case 'p':
if (putletter (play, letter, x, y)) {
+ letter = getnewletter (game);
drawwindow (game, xoffset, 2 * yoffset + board->ysize, board->length);
- letter = getletter (game);
}
break;
case 'q':
typedef struct {
int nbtiles;
char *tiles;
+ int index;
} draw_t;
#endif /* __TYPE_H__ */