Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed N5110 ShiftReg PinDetect
Diff: SubmitHighscore.cpp
- Revision:
- 17:d6a3b29cab31
- Child:
- 18:709ea375b0df
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SubmitHighscore.cpp Mon May 11 03:52:18 2015 +0000 @@ -0,0 +1,174 @@ +/// @file SubmitHighscore.cpp + +#include "SubmitHighscore.h" + +int SubmitHighscore::letters[3] = {0, 0, 0}; +int SubmitHighscore::currentState = LETTER1; + +void SubmitHighscore::init() +{ + input->addBtnPressInterrupt(Input::ButtonA, &btnAPress); + input->addBtnPressInterrupt(Input::ButtonB, &btnBPress); + input->addBtnPressInterrupt(Input::ButtonC, &btnCPress); + + SubmitHighscore::currentState = LETTER1; +} + +void SubmitHighscore::changeLetter(int index, bool next) +{ + int letter = (SubmitHighscore::letters[index] + ((next) ? 1 : - 1) + 26) % 26; // + 26 in case it is negative, % => wrap around from Z->A + SubmitHighscore::letters[index] = letter; +} + +void SubmitHighscore::btnAPress() +{ + switch (currentState) + { + case LETTER1: + changeLetter(0, true); + break; + + case LETTER2: + changeLetter(1, true); + break; + + case LETTER3: + changeLetter(2, true); + break; + + case SEL_SUBMIT: + currentState = WRITE_TO_FILE; + break; + } +} + +void SubmitHighscore::btnBPress() +{ + // Change to previous letter + switch (currentState) + { + case LETTER1: + changeLetter(0, false); + break; + + case LETTER2: + changeLetter(1, false); + break; + + case LETTER3: + changeLetter(2, false); + break; + } +} + +void SubmitHighscore::btnCPress() +{ + switch (currentState) + { + case LETTER1: + currentState = LETTER2; + break; + + case LETTER2: + currentState = LETTER3; + break; + + case LETTER3: + currentState = SEL_SUBMIT; + break; + + case SEL_SUBMIT: + currentState = LETTER1; + break; + } +} + + +void SubmitHighscore::update(float dt) +{ + if (currentState == WRITE_TO_FILE) + { + char s0 = 'A' + static_cast<char>(letters[0]); + char s1 = 'A' + static_cast<char>(letters[1]); + char s2 = 'A' + static_cast<char>(letters[2]); + + std::stringstream ss; + ss << s0 << s1 << s2; + + std::string initials = ss.str(); + + // update high score list + FILE *fp = fopen("/local/highscores.txt", "w"); + + if (Global::score > Global::highscores[0].score) + { + Global::highscores[2] = Global::highscores[1]; + Global::highscores[1] = Global::highscores[0]; + Global::highscores[0].initials = initials; + Global::highscores[0].score = Global::score; + } + else if (Global::score > Global::highscores[1].score) + { + Global::highscores[2] = Global::highscores[1]; + Global::highscores[1].initials = initials; + Global::highscores[1].score = Global::score; + } + else if (Global::score > Global::highscores[2].score) + { + Global::highscores[2].initials = initials; + Global::highscores[2].score = Global::score; + } + + for (int i = 0; i < 3; ++i) + fprintf(fp, "%s %d ", Global::highscores[i].initials, Global::highscores[i].score); + + fclose(fp); + + currentState = LOAD_GAME_OVER; + } + + if (currentState == LOAD_GAME_OVER) + requestStateChange(GAME_OVER); +} + +void SubmitHighscore::render() +{ + if (currentState == WRITE_TO_FILE) + { + lcd->printString("Writing...", 12, 2); + } + else // Entering initials + { + lcd->printString("New high score!", 0, 0); + + const char charLetters[6] = {'A' + letters[0], '\0', 'A' + letters[1], '\0', 'A' + letters[2], '\0'}; + + lcd->printString(&charLetters[0], 25, 2); + lcd->printString(&charLetters[2], 40, 2); + lcd->printString(&charLetters[4], 55, 2); + lcd->printString("Submit", 25, 4); + + switch(currentState) + { + case LETTER1: + lcd->printString("^", 25, 3); + break; + + case LETTER2: + lcd->printString("^", 40, 3); + break; + + case LETTER3: + lcd->printString("^", 55, 3); + break; + + case SEL_SUBMIT: + lcd->printString(">",25-6 , 4); + break; + + + } + } + + +} \ No newline at end of file