diff options
Diffstat (limited to 'gamestate.cpp')
-rw-r--r-- | gamestate.cpp | 47 |
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 | ||
19 | void GameState::input(SDLKey key) | 19 | void 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 | } |