From: Laurent Mazet Date: Mon, 17 Jun 2024 22:09:01 +0000 (+0200) Subject: not working code X-Git-Tag: v1.0~7 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=8af2a8a41b19e684316b1a22d9c6e3ed1f9b1e70;p=scrabble.git not working code --- diff --git a/function.c b/function.c index 6f18edf..13e398d 100644 --- a/function.c +++ b/function.c @@ -555,16 +555,17 @@ char *savedata (int nbplayers, char *lang, char *board, play_t *play, draw_t *dr CHECKALLOC (buffer); int l = sprintf (buffer, "nbplayers: %d\n", nbplayers); - l += sprintf (buffer + l, "lang: \"%s\"\n", lang); l += sprintf (buffer + l, "board: \"%s\"\n", board); - l += sprintf (buffer + l, "play: \"%s\"\n", play->tab); - l += sprintf (buffer + l, "nbtiles: %d\n", draw->nbtiles); - l += sprintf (buffer + l, "tiles: \"%s\"\n", draw->tiles); + l += sprintf (buffer + l, "lang: \"%s\"\n", lang); + l += sprintf (buffer + l, "play->tab: \"%s\"\n", play->tab); + l += sprintf (buffer + l, "draw->nbtiles: %d\n", draw->nbtiles); + l += sprintf (buffer + l, "draw->tiles: \"%s\"\n", draw->tiles); for (i = 0; i < nbplayers; i++) { - l += sprintf (buffer + l, "game[%d]: \"%s\"\n", i, game[i]->tiles); + l += sprintf (buffer + l, "game[%d]->nbtiles: %d\n", i, game[i]->nbtiles); + l += sprintf (buffer + l, "game[%d]->tiles: \"%s\"\n", i, game[i]->tiles); } l += sprintf (buffer + l, "current: %d\n", n); - l += sprintf (buffer + l, "turn[%d]: \"%s\"\n", n, turn[n]->tab); + l += sprintf (buffer + l, "turn[%d]->tab: \"%s\"\n", n, turn[n]->tab); for (i = 0; i < nbplayers; i++) { l += sprintf (buffer + l, "score[%d]: %d\n", i, score[i]); } @@ -584,6 +585,23 @@ int writedata (char *filename, char *data) return ret; } +char *loaddata (char *filename) +{ + char *buffer = NULL; + FILE *fd = fopen (filename, "r"); + if (fd) { + int size = fseek (fd, 0, SEEK_END); + buffer = (char *) calloc (size, 1); + CHECKALLOC (buffer); + + fseek (fd, 0, SEEK_BEGIN); + fread (buffer, 1, size, fd); + fclose (fd); + } + + return buffer; +} + char *atos (char *str) { char *ret = NULL; @@ -602,7 +620,7 @@ char *atos (char *str) return ret; } -int loaddata (char *str, int *nbplayers, char *lang, char *board, play_t *play, draw_t *draw, draw_t **game, int *n, play_t **turn, int *score) +int loaddata (char *str, int *nbplayers, board_t **board, bag_t **bag, play_t *play, draw_t *draw, draw_t **game, int *n, play_t **turn, int *score) { int ret = 1; @@ -620,33 +638,41 @@ int loaddata (char *str, int *nbplayers, char *lang, char *board, play_t *play, if (strcmp (name, "nbplayers") == 0) { *nbplayers = atoi (value); - } else if (strcmp (name, "lang") == 0) { - strcpy (lang, atos (value)); } else if (strcmp (name, "board") == 0) { - strcpy (board, atos (value)); - } else if (strcmp (name, "play") == 0) { + *board = getboard (atos (value)); + } else if (strcmp (name, "lang") == 0) { + *bag = getbag (atos (value)); + } else if (strcmp (name, "play->tab") == 0) { strcpy (play->tab, atos (value)); - } else if (strcmp (name, "ntiles") == 0) { + } else if (strcmp (name, "draw->ntiles") == 0) { draw->nbtiles = atoi (value); - } else if (strcmp (name, "tiles") == 0) { + } else if (strcmp (name, "draw->tiles") == 0) { strcpy (draw->tiles, atos (value)); - } else if (strcmp (name, "game[0]") == 0) { + } else if (strcmp (name, "game[0]->nbtiles") == 0) { + game[0]->nbtiles = atoi (value); + } else if (strcmp (name, "game[0]->tiles") == 0) { strcpy (game[0]->tiles, atos (value)); - } else if (strcmp (name, "game[1]") == 0) { + } else if (strcmp (name, "game[1]->nbtiles") == 0) { + game[1]->nbtiles = atoi (value); + } else if (strcmp (name, "game[1]->tiles") == 0) { strcpy (game[1]->tiles, atos (value)); - } else if (strcmp (name, "game[2]") == 0) { + } else if (strcmp (name, "game[2]->nbtiles") == 0) { + game[2]->nbtiles = atoi (value); + } else if (strcmp (name, "game[2]->tiles") == 0) { strcpy (game[2]->tiles, atos (value)); - } else if (strcmp (name, "game[3]") == 0) { + } else if (strcmp (name, "game[3]->nbtiles") == 0) { + game[3]->nbtiles = atoi (value); + } else if (strcmp (name, "game[3]->tiles") == 0) { strcpy (game[3]->tiles, atos (value)); } else if (strcmp (name, "current") == 0) { *n = atoi (value); - } else if (strcmp (name, "turn[0]") == 0) { + } else if (strcmp (name, "turn[0]->tab") == 0) { strcpy (turn[0]->tab, atos (value)); - } else if (strcmp (name, "turn[1]") == 0) { + } else if (strcmp (name, "turn[1]->tab") == 0) { strcpy (turn[1]->tab, atos (value)); - } else if (strcmp (name, "turn[2]") == 0) { + } else if (strcmp (name, "turn[2]->tab") == 0) { strcpy (turn[2]->tab, atos (value)); - } else if (strcmp (name, "turn[3]") == 0) { + } else if (strcmp (name, "turn[3]->tab") == 0) { strcpy (turn[3]->tab, atos (value)); } else if (strcmp (name, "score[0]") == 0) { score[0] = atoi (value); @@ -657,12 +683,23 @@ int loaddata (char *str, int *nbplayers, char *lang, char *board, play_t *play, } else if (strcmp (name, "score[3]") == 0) { score[3] = atoi (value); } else { - VERBOSE (WARNING, printf ("unknown key word: %s\n", name)); + VERBOSE (WARNING, printf ("unknown keyword: %s\n", name)); } line = strtok_r (NULL, "\n", &saveptr1); } + if (board) { + play->xsize = board->xsize; + play->ysize = board->ysize; + for (i = 0; i < MAXNBPLAYERS; i++) { + turn[i]->xsize = board->xsize; + turn[i]->ysize = board->ysize; + } + } else { + ret = 0; + } + return ret; } diff --git a/function.h b/function.h index af612d3..0347e18 100644 --- a/function.h +++ b/function.h @@ -67,6 +67,10 @@ char *savedata (int nbplayers, char *lang, char *board, play_t *play, draw_t *dr int writedata (char *filename, char *data); +char *loaddata (char *filename); + +int restoredata (char *str, int *nbplayers, board_t **board, bag_t **bag, play_t *play, draw_t *draw, draw_t **game, int *n, play_t **turn, int *score); + #endif /* __FUNCTION_H__ */ /* vim: set ts=4 sw=4 et: */ diff --git a/scrabble.c b/scrabble.c index 56f051d..58199e0 100644 --- a/scrabble.c +++ b/scrabble.c @@ -28,6 +28,7 @@ char *boardname = "15x15-7"; char *language = "fr"; int nbplayers = 2; char *dict = NULL; +char *file = NULL; int cache = 0; int xoffset = 4; @@ -42,6 +43,7 @@ char *help = " Move right tile\n" " Quit\n" " Toggle case legend\n" + " Save game\n" " Put tile\n" " Retrieve tile\n" " Move left in line\n" @@ -58,6 +60,7 @@ int usage (int ret) fprintf (fd, " -h: help message\n"); fprintf (fd, " -l: language (%s)\n", language); fprintf (fd, " -n: number of players (%d)\n", nbplayers); + fprintf (fd, " -r: restore game (%s)\n", (file) ? file : "none"); fprintf (fd, " -v: verbose level (%d)\n", verbose); fprintf (fd, "%s version %s\n", progname, version); @@ -217,24 +220,40 @@ int main (int argc, char *argv[]) int xspellwin = xscorewin; int yspellwin = yscorewin + 3 + 1; - int mode = 0; - showboard (play, board, xoffset, yoffset, mode); - - int x = (play->xsize + 1)/ 2 - 1; - int y = (play->ysize + 1)/ 2 - 1; - int *score = (int *) calloc (MAXNBPLAYERS, sizeof (int)); CHECKALLOC (score); for (n = 0; n < nbplayers; n++) { drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 0); } n = 0; + + if (file) { + char *buffer = loaddata (file); + if (buffer) { + if (!restoredata (buffer, &nbplayers, &board, &bag, play, draw, game, &n, turn, score)) { + VERBOSE (ERROR, fprintf (stderr, "incorrect file (%s)\n", file)); + return 1; + } + } else { + VERBOSE (ERROR, fprintf (stderr, "can't read file (%s)\n", file)); + return 1; + } + } + + int mode = 0; + showboard (play, board, xoffset, yoffset, mode); + + int x = (play->xsize + 1)/ 2 - 1; + int y = (play->ysize + 1)/ 2 - 1; + char current, letter = getnextletter (game[n]); drawwindow (game[n], score[n], xdrawwin[n], ydrawwin[n], 1); int nbpoints = 0; int stop = 0; char *data = NULL; while (!stop) { + showboard (play, board, xoffset, yoffset, mode); + nbpoints = evalscore (play, turn[n], board, bag); char highlight = current = gessletter (play, x, y); if ((current == ' ') && (letter != '\0')) { highlight = letter; @@ -349,8 +368,6 @@ int main (int argc, char *argv[]) //case ERR: //default: } - showboard (play, board, xoffset, yoffset, mode); - nbpoints = evalscore (play, turn[n], board, bag); } endwin ();