diff options
Diffstat (limited to 'gamestate.cpp')
| -rw-r--r-- | gamestate.cpp | 45 |
1 files changed, 44 insertions, 1 deletions
| diff --git a/gamestate.cpp b/gamestate.cpp index 323cac5..812f26c 100644 --- a/gamestate.cpp +++ b/gamestate.cpp | |||
| @@ -4,6 +4,8 @@ | |||
| 4 | #include "mazeoflife.h" | 4 | #include "mazeoflife.h" |
| 5 | #include "highscore.h" | 5 | #include "highscore.h" |
| 6 | #include "titlestate.h" | 6 | #include "titlestate.h" |
| 7 | #include <fstream> | ||
| 8 | #include "hslist.h" | ||
| 7 | 9 | ||
| 8 | class GameBoard { | 10 | class GameBoard { |
| 9 | public: | 11 | public: |
| @@ -214,7 +216,48 @@ State* PlayGameState::operator() (SDL_Renderer* renderer) | |||
| 214 | } | 216 | } |
| 215 | 217 | ||
| 216 | case SDLK_ESCAPE: | 218 | case SDLK_ESCAPE: |
| 217 | return new TitleState(); | 219 | std::ifstream exists(getDataFile()); |
| 220 | if (exists) | ||
| 221 | { | ||
| 222 | FILE* hslist = fopen(getDataFile(), "r"); | ||
| 223 | int scores; | ||
| 224 | Highscore* h; | ||
| 225 | |||
| 226 | fscanf(hslist, "%d%*c", &scores); | ||
| 227 | |||
| 228 | if (scores < 10) | ||
| 229 | { | ||
| 230 | fclose(hslist); | ||
| 231 | |||
| 232 | return new EnterHighscoreState(level); | ||
| 233 | } else { | ||
| 234 | for (int i=0; i<scores; i++) | ||
| 235 | { | ||
| 236 | int namelen; | ||
| 237 | char namelens[4]; | ||
| 238 | char* name = (char*) calloc(25, sizeof(char)); | ||
| 239 | int score; | ||
| 240 | |||
| 241 | fscanf(hslist, "%d", &namelen); | ||
| 242 | sprintf(namelens, "%%%dc", namelen); | ||
| 243 | fscanf(hslist, namelens, name); | ||
| 244 | fscanf(hslist, "%d%*c", &score); | ||
| 245 | |||
| 246 | h = new Highscore(name, score); | ||
| 247 | } | ||
| 248 | |||
| 249 | fclose(hslist); | ||
| 250 | |||
| 251 | if (h->getLevel() < level) | ||
| 252 | { | ||
| 253 | return new EnterHighscoreState(level); | ||
| 254 | } else { | ||
| 255 | return new DisplayAndReturnLocalHighscoreListState(); | ||
| 256 | } | ||
| 257 | } | ||
| 258 | } else { | ||
| 259 | return new EnterHighscoreState(level); | ||
| 260 | } | ||
| 218 | } | 261 | } |
| 219 | } | 262 | } |
| 220 | } | 263 | } |
