summary refs log tree commit diff stats
path: root/gamestate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gamestate.cpp')
-rw-r--r--gamestate.cpp47
1 files changed, 44 insertions, 3 deletions
diff --git a/gamestate.cpp b/gamestate.cpp index c312bfe..9a50b32 100644 --- a/gamestate.cpp +++ b/gamestate.cpp
@@ -16,11 +16,11 @@ GameState::GameState()
16 SDL_WM_SetCaption("Maze Of Life - Level 1", NULL); 16 SDL_WM_SetCaption("Maze Of Life - Level 1", NULL);
17} 17}
18 18
19void GameState::input(SDLKey key) 19void GameState::input(SDL_keysym key)
20{ 20{
21 if (info.doneMaking) 21 if (info.doneMaking)
22 { 22 {
23 switch (key) 23 switch (key.sym)
24 { 24 {
25 case SDLK_LEFT: 25 case SDLK_LEFT:
26 move(info.playerx-1, info.playery); 26 move(info.playerx-1, info.playery);
@@ -39,7 +39,48 @@ void GameState::input(SDLKey key)
39 39
40 break; 40 break;
41 case SDLK_ESCAPE: 41 case SDLK_ESCAPE:
42 changeState(new TitleState()); 42 std::ifstream exists(getDataFile());
43 if (exists)
44 {
45 FILE* hslist = fopen(getDataFile(), "r");
46 int scores;
47 Highscore* h;
48
49 fscanf(hslist, "%d%*c", &scores);
50
51 if (scores < 10)
52 {
53 fclose(hslist);
54
55 changeState(new NewHighscoreState(info.level.getLevel()));
56 } else {
57 for (int i=0; i<scores; i++)
58 {
59 int namelen;
60 char namelens[4];
61 char* name = (char*) calloc(25, sizeof(char));
62 int score;
63
64 fscanf(hslist, "%d", &namelen);
65 sprintf(namelens, "%%%dc", namelen);
66 fscanf(hslist, namelens, name);
67 fscanf(hslist, "%d%*c", &score);
68
69 h = new Highscore(name, score);
70 }
71
72 fclose(hslist);
73
74 if (h->getLevel() < info.level.getLevel())
75 {
76 changeState(new NewHighscoreState(info.level.getLevel()));
77 } else {
78 changeState(new LocalHighscoreListState(true));
79 }
80 }
81 } else {
82 changeState(new NewHighscoreState(info.level.getLevel()));
83 }
43 84
44 break; 85 break;
45 } 86 }