-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsave.c
More file actions
88 lines (81 loc) · 3.37 KB
/
save.c
File metadata and controls
88 lines (81 loc) · 3.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "save.h"
/*
These functions are very clear.
I just need to comment 4 things:
echo() is a function that enables echoing of the characters typed by the user, noecho() disables it.
scanw() acts like scanf() in the use cases of this code.
move() moves the cursor to a position passed through arguments.
clrtoeol() clears all characters from the cursor to the end of the line where the cursor is positioned.
*/
void pauseGame(gameState save) {
FILE *stream = fopen("pause.bin", "w+b");
if (stream == NULL) {
mvprintw(23, 3, "ERROR OPENING PAUSE.BIN");
refresh();
}
fwrite(&save, sizeof(gameState), 1, stream);
fclose(stream);
}
gameState unpauseGame() {
gameState save;
FILE *stream = fopen("pause.bin", "rb");
if (stream == NULL) {
mvprintw(23, 3, "ERROR OPENING PAUSE.BIN");
refresh();
}
fread(&save, sizeof(gameState), 1, stream);
fclose(stream);
return save;
}
void putTxt(char *fileName, int i) {
fileName[i] = '.';
fileName[i + 1] = 't';
fileName[i + 2] = 'x';
fileName[i + 3] = 't';
}
void saveGame(gameState save) {
FILE *stream;
char fileName[100], jChar;
int i, j = 1;
mvprintw(23, 3, "Player name: ");
refresh();
echo();
scanw("%s", fileName);
noecho();
move(23, 0);
clrtoeol();
i = strlen(fileName);
putTxt(fileName, i);
while (access(fileName, F_OK) != -1) {
jChar = j + '0';
fileName[i] = jChar;
j++;
putTxt(fileName, i + 1);
}
stream = fopen(fileName, "w+");
if (stream == NULL) {
mvprintw(23, 3, "ERROR OPENING TEXT FILE");
} else {
fprintf(stream, "%s,%s,%f,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i", save.scenario, save.score.name, save.score.score, save.positions[0].y, save.positions[0].found, save.positions[0].x, save.positions[1].y, save.positions[1].x, save.positions[1].found, save.positions[2].y, save.positions[2].x, save.positions[2].found, save.positions[3].y, save.positions[3].x, save.positions[3].found, save.positions[4].y, save.positions[4].x, save.positions[4].found, save.level, save.found, save.timeSpent[0], save.timeSpent[1], save.timeSpent[2], save.movement[0], save.movement[1], save.movement[2], save.blocked);
}
fclose(stream);
}
void loadGame(gameState *save) {
FILE *stream;
char fileName[100];
mvprintw(23, 3, "File name: ");
refresh();
echo();
scanw("%s", fileName);
noecho();
move(23, 0);
clrtoeol();
stream = fopen(fileName, "r");
if (stream == NULL) {
mvprintw(23, 3, "ERROR OPENING TEXT FILE");
} else {
fscanf(stream, "%260[^,],%21[^,],%f,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i", save->scenario, save->score.name, &save->score.score, &save->positions[0].y, &save->positions[0].found, &save->positions[0].x, &save->positions[1].y, &save->positions[1].x, &save->positions[1].found, &save->positions[2].y, &save->positions[2].x, &save->positions[2].found, &save->positions[3].y, &save->positions[3].x, &save->positions[3].found, &save->positions[4].y, &save->positions[4].x, &save->positions[4].found, &save->level, &save->found, &save->timeSpent[0], &save->timeSpent[1], &save->timeSpent[2], &save->movement[0], &save->movement[1], &save->movement[2], &save->blocked);
fclose(stream);
refresh();
}
}