return 0;
}
-int strcount (char *str, char ch)
-{
- int n = 0;
- while ((str = strchr (str, ch)) != NULL) {
- str++;
- n++;
- }
- return n;
-}
-
int strmaxlen (char *str, char ch)
{
int len = 0;
}
char gessletter (play_t *play, int x, int y)
+
{
return play->tab[x + play->xsize * y];
}
free (draw);
}
-draw_t *retrievetiles (draw_t *draw, int nbtiles, draw_t *game)
+draw_t *retrievetiles (draw_t *draw, int nbtiles, draw_t *game, int mode)
{
draw_t *ret = (game == NULL) ? newdraw (nbtiles) : game;
int i;
- for (i = 0; i < ret->nbtiles; i++) {
- if (ret->tiles[i] != '\0') {
- draw->tiles[draw->nbtiles++] = ret->tiles[i];
- ret->tiles[i] = '\0';
+ if (mode) {
+ 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 < ret->nbtiles) && (i < draw->nbtiles); i++) {
+ for (i = 0; (i < ret->nbtiles) && (draw->nbtiles > 0); i++) {
+ if (ret->tiles[i] != '\0') {
+ continue;
+ }
int j = rand () % draw->nbtiles;
ret->tiles[i] = draw->tiles[j];
if (j < draw->nbtiles - 1) {
draw->nbtiles--;
draw->tiles[draw->nbtiles] = '\0';
}
- ret->nbtiles = i;
ret->index = -1;
return ret;
}
return (score > 0) ? score : intern;
}
+int isturnempty (play_t *turn)
+{
+ int ret = 1;
+ int i;
+ for (i = 0; i < turn->xsize * turn->ysize; i++) {
+ if (turn->tab[i] != ' ') {
+ ret = 0;
+ break;
+ }
+ }
+ return ret;
+}
+
/* vim: set ts=4 sw=4 et: */
int contains (char *list, char *str);
-int strcount (char *str, char ch);
-
int strmaxlen (char *str, char ch);
play_t *initplay (int xsize, int ysize);
void cleanplay (play_t *play);
-draw_t *retrievetiles (draw_t *draw, int nbtiles, draw_t *game);
+draw_t *retrievetiles (draw_t *draw, int nbtiles, draw_t *game, int mode);
void freedraw (draw_t *draw);
int evalscore (play_t *play, play_t *turn, board_t *board, bag_t *bag);
+int isturnempty (play_t *turn);
+
#endif /* __FUNCTION_H__ */
/* vim: set ts=4 sw=4 et: */
draw_t *draw = initdraw (bag);
draw_t **game = (draw_t **) calloc (nbplayers, sizeof (draw_t *));
for (n = 0; n < nbplayers; n++) {
- game[n] = retrievetiles (draw, board->length, NULL);
+ game[n] = retrievetiles (draw, board->length, NULL, 0);
}
VERBOSE (DEBUG, printf ("bag: 0x%p\ndraw: 0x%p\ngame: 0x%p\ngame[0]: 0x%p", bag, draw, game, game[0]));
int stop = 0;
while (!stop) {
char highlight = current = gessletter (play, x, y);
- if (current == ' ') {
+ if ((current == ' ') && (letter != '\0')) {
highlight = letter;
}
showletter (highlight, x + xoffset, y + yoffset, 1);
case '\n':
case '\r':
case 'd':
- game[n] = retrievetiles (draw, board->length, game[n]);
+ game[n] = retrievetiles (draw, board->length, game[n], isturnempty (turn[n]));
score[n] += nbpoints;
drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 0);
cleanplay (turn[n]);