void game2String(Game game, char* gameString){ gameString[0] = '\0'; //null terminate it sprintf(gameString, "%d %d %d %d\n", game->round, game->turn, game->score, game->missionID); //string is 'round turn score misID ' sprintf(gameString, "%s %d %d %d\n", gameString, game->vampireReadyCount, game->vampireMatureCount, game->vampireVanquishedCount); //string is 'round turn score misID ' // 'vampReady vampMature vampVanquished' int i = 0; for(i = 0; i < NUM_CHARACTERS; i++){ char tempString[MESSAGE_LENGTH * 2]; sprintf(tempString, "%d %s\n", game->character[i].life, game->character[i].lastMessage); sprintf(gameString, "%s %s", gameString, tempString); } //string has 'gameinfo\nvampireinfo\ncharacter*5\n for(i = 0; i < TRAIL_SIZE; i++){ sprintf(gameString, "%s %d", gameString, game->encounters[i]); } //every move we've made time. Moves curMove = game->moves; while(curMove != NULL){ sprintf(gameString, "%s\n%d %d %d %d", gameString, curMove->move, curMove->who, curMove->round, curMove->isDracMoveKnown); curMove = curMove->more; } sprintf(gameString, "%s\n", gameString); } void string2Game(char* gameString, Game game){ sscanf(gameString, "%d %d %d %d\n", &game->round, &game->turn, &game->score, &game->missionID); strsep(&gameString, "\n"); sscanf(gameString, "%d %d %d\n", &game->vampireReadyCount, &game->vampireMatureCount, &game->vampireVanquishedCount); //string is 'round turn score misID ' // 'vampReady vampMature vampVanquished' int i = 0; for(i = 0; i < NUM_CHARACTERS; i++){ strsep(&gameString, "\n"); sscanf(gameString, "%d %s", &game->character[i].life, game->character[i].lastMessage); } strsep(&gameString, "\n"); //string has 'gameinfo\nvampireinfo\ncharacter*5\n for(i = 0; i < TRAIL_SIZE; i++){ strsep(&gameString, " "); sscanf(gameString, "%d", &game->encounters[i]); } int newWho; int newRound = 0; int newIsDracKnown = 0; int newMoveM = 0; strsep(&gameString, "\n"); while(gameString[0] != '\0' ){ strsep(&gameString, "\n"); sscanf(gameString, "%d %d %d %d", &newMoveM, &newWho, &newRound, &newIsDracKnown) > 0; Moves newMove; newMove = malloc(sizeof(struct moveList)); assert(newMove != NULL); //get space for it //add the new move to the front newMove->more = game->moves; newMove->who = newWho; newMove->round = newRound; newMove->isDracMoveKnown = newIsDracKnown; newMove->move = newMoveM; game->moves = newMove; } }