我正在开发一款自定义尺寸的Tic Tac Toe游戏。 我想制作一个保存文件,所以如果用户在游戏结束前离开游戏,他可以再次加载上一个游戏继续。
我将enum用于一个单元格,也用于结构。
typedef enum Cell {
c_empty, c_circle, c_cross
} Cell;
typedef struct Game {
Cell** board;
int SIZE;
} Game;
Game gboard;
static void file_write(Game* pgboard);
static void file_read(Game* pgboard);
阅读SIZE已经适用于此:
fscanf(fp, "%d", &pgboard->SIZE);
并将其写入档案:
fprintf(fp, "%d\n", pgboard->SIZE);
将电路板写入文件也可以使用开关:
for (j = 0; j < pgboard->SIZE; ++j){
for (i = 0; i < pgboard->SIZE; ++i){
switch (pgboard->board[j][i]) {
case c_empty: fprintf(fp, " "); break;
case c_circle: fprintf(fp, "o"); break;
case c_cross: fprintf(fp, "x"); break;
}
所以我的文件现在是这样的:
13
x o x
您有什么提示我如何回读电路板?
答案 0 :(得分:0)
虽然更好的方法是以数字格式而不是字符串读取/写入数据,但无论如何,这里的代码都是您想要的。
char cell;
fscanf(fp, "%d", &pgboard->SIZE);
fscanf(fp, "%c", &cell); /* to get rid of new line */
for (j = 0; j < pgboard->SIZE; ++j){
for (i = 0; i < pgboard->SIZE; ++i){
fscanf(fp, "%c", &cell)
switch (cell) {
case ' ': pgboard->board[j][i] = c_empty; break;
case 'o': pgboard->board[j][i] = c_circle; break;
case 'x': pgboard->board[j][i] = c_cross; break;
}
}
}
我没有测试代码,但它会显示出这个想法的要点。