diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2009-10-18 15:24:07 -0400 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2009-10-18 15:24:07 -0400 |
commit | c027f1b9cd6c9deb60931a7f9f75bb4ee130291b (patch) | |
tree | 49426a9cf3ee24434141c903b01481110b2808b6 /gamestate.cpp | |
parent | a157cd82a86390f1fcb1a2086f86af5187e85a69 (diff) | |
download | mazeoflife-c027f1b9cd6c9deb60931a7f9f75bb4ee130291b.tar.gz mazeoflife-c027f1b9cd6c9deb60931a7f9f75bb4ee130291b.tar.bz2 mazeoflife-c027f1b9cd6c9deb60931a7f9f75bb4ee130291b.zip |
Added local highscore list
You can now view and add to a local highscore list. A change to State was necessary due to how the user's name would be entered into the highscore list and thus all states have been modified. Refs #104
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 | } |