}
}
-void drawwindow (draw_t *game, int xoffset, int yoffset)
+void drawwindow (draw_t *game, int score, int xoffset, int yoffset, int mode)
{
int i;
+
for (i = 0; i < 2 * game->nbtiles - 1; i++) {
mvaddch (yoffset - 1, xoffset + i, ACS_HLINE);
mvaddch (yoffset, xoffset + i, ' ');
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);
+ if (mode) {
+ 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 < game->nbtiles; i++) {
}
}
set_color (white);
+
+ char str[11] = {0};
+ sprintf (str, "%3d", score);
+ mvaddstr (yoffset + 2, xoffset + (game->nbtiles * 2 - 1) / 2 - 2, str);
}
void scorewindow (int score, int xoffset, int yoffset)
/* main function */
int main (int argc, char *argv[])
{
+ int n;
/* get basename */
char *pt = progname = argv[0];
VERBOSE (DEBUG, printf ("play: 0x%p\nboard: 0x%p\n", play, board));
draw_t *draw = initdraw (bag);
- draw_t *game = retrievetiles (draw, board->length, NULL);
- VERBOSE (DEBUG, printf ("bag: 0x%p\ndraw: 0x%p\ngame: 0x%p\n", bag, draw, game));
+ draw_t **game = (draw_t **) calloc (nbplayers, sizeof (draw_t *));
+ for (n = 0; n < nbplayers; n++) {
+ game[n] = retrievetiles (draw, board->length, NULL);
+ }
+ VERBOSE (DEBUG, printf ("bag: 0x%p\ndraw: 0x%p\ngame: 0x%p\ngame[0]: 0x%p", bag, draw, game, game[0]));
- play_t *turn = initplay (board->xsize, board->ysize);
+ play_t **turn = (play_t **) calloc (nbplayers, sizeof (play_t *));
+ for (n = 0; n < nbplayers; n++) {
+ turn[n] = initplay (board->xsize, board->ysize);
+ }
initscr ();
noecho ();
int yvaluewin = yoffset - 1;
int xhelpwin = xvaluewin + xoffset + 10;
int yhelpwin = yoffset - 1;
- int xdrawwin = xoffset;
- int ydrawwin = 2 * yoffset + max (board->ysize, 1 + (bag->nbletters + 1) /2);
+ int *xdrawwin = (int *) calloc (nbplayers, sizeof (int));
+ int *ydrawwin = (int *) calloc (nbplayers, sizeof (int));
+ for (n = 0; n < nbplayers; n++) {
+ xdrawwin[n] = (n + 1) * xoffset + n * (board->length * 2 - 1);
+ ydrawwin[n] = 2 * yoffset + max (board->ysize, 1 + (bag->nbletters + 1) /2);
+ }
int helplen = helpwindow (help, getextrahelp (language), xhelpwin, yhelpwin);
int x = (play->xsize + 1)/ 2 - 1;
int y = (play->ysize + 1)/ 2 - 1;
- char current, letter = getnextletter (game);
- drawwindow (game, xdrawwin, ydrawwin);
- int score = 0;
+ int *score = (int *) calloc (nbplayers, sizeof (int));
+ for (n = 0; n < nbplayers; n++) {
+ drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 0);
+ }
+ n = 0;
+ char current, letter = getnextletter (game[n]);
+ drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 1);
+ int nbpoints = 0;
int stop = 0;
while (!stop) {
char highlight = current = gessletter (play, x, y);
}
showletter (highlight, x + xoffset, y + yoffset, 1);
valuewindow (bag, xvaluewin, yvaluewin, 10, highlight);
- scorewindow (score, xscorewin, yscorewin);
+ scorewindow (nbpoints, xscorewin, yscorewin);
switch (getch ()) {
case '\t':
case 'c':
- letter = getnextletter (game);
- drawwindow (game, xdrawwin, ydrawwin);
+ letter = getnextletter (game[n]);
+ drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 1);
break;
case KEY_ENTER:
case '\n':
case '\r':
case 'd':
- game = retrievetiles (draw, board->length, game);
- cleanplay (turn);
- letter = getnextletter (game);
- drawwindow (game, xdrawwin, ydrawwin);
+ game[n] = retrievetiles (draw, board->length, game[n]);
+ score[n] += nbpoints;
+ drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 0);
+ cleanplay (turn[n]);
+ n = (n + 1) % nbplayers;
+ letter = getnextletter (game[n]);
+ drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 1);
break;
case KEY_UP:
case 'i':
case ' ':
case 'v':
if (putletter (play, letter, x, y)) {
- putletter (turn, letter, x, y);
- letter = getnewletter (game);
- drawwindow (game, xdrawwin, ydrawwin);
+ putletter (turn[n], letter, x, y);
+ letter = getnewletter (game[n]);
+ drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 1);
}
break;
case KEY_BACKSPACE:
case 'x':
current = gessletter (play, x, y);
if (current != ' ') {
- if (returnletter (game, current)) {
+ if (returnletter (game[n], current)) {
removeletter (play, x, y);
- removeletter (turn, x, y);
- letter = getnextletter (game);
- drawwindow (game, xdrawwin, ydrawwin);
+ removeletter (turn[n], x, y);
+ letter = getnextletter (game[n]);
+ drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 1);
}
}
break;
case KEY_HOME:
case 'J':
- moveletter (game, -1);
- drawwindow (game, xdrawwin, ydrawwin);
+ moveletter (game[n], -1);
+ drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 1);
break;
case KEY_END:
case 'L':
- moveletter (game, +1);
- drawwindow (game, xdrawwin, ydrawwin);
+ moveletter (game[n], +1);
+ drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 1);
break;
case ERR:
default:
}
showboard (play, board, xoffset, yoffset, mode);
- score = evalscore (play, turn, board, bag);
+ nbpoints = evalscore (play, turn[n], board, bag);
}
endwin ();
freeplay (play);
- freeplay (turn);
- freedraw (game);
+ for (n = 0; n < nbplayers; n++) {
+ freeplay (turn[n]);
+ freedraw (game[n]);
+ }
+ free (turn);
+ free (game);
+ free (xdrawwin);
+ free (ydrawwin);
+ free (score);
freedraw (draw);
return 0;