A complex 2D-dungeon game on LPC1768 in SWJTU-Leeds Joint School XJEL2645 project. Referenced from the framework contributed by https://os.mbed.com/users/Siriagus/code/SimplePlatformGame/

Dependencies:   mbed N5110 ShiftReg PinDetect

Committer:
hugohu
Date:
Thu Mar 25 03:56:22 2021 +0000
Branch:
BRAVEHEART
Revision:
21:e19709a07756
Parent:
19:89c3eeb3761b
Combined some files, removed codes for my personal needs, created new maps, new ways to play.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hugohu 19:89c3eeb3761b 1 /// @file Achievement.cpp
hugohu 19:89c3eeb3761b 2
hugohu 19:89c3eeb3761b 3 #include "Achievement.h"
hugohu 19:89c3eeb3761b 4
hugohu 19:89c3eeb3761b 5 int Achievement::letters[3] = {0, 0, 0};
hugohu 19:89c3eeb3761b 6 int Achievement::currentState = LETTER1;
hugohu 19:89c3eeb3761b 7
hugohu 19:89c3eeb3761b 8 void Achievement::init()
hugohu 19:89c3eeb3761b 9 {
hugohu 19:89c3eeb3761b 10 input->addBtnPressInterrupt(Input::ButtonA, &btnAPress);
hugohu 19:89c3eeb3761b 11 input->addBtnPressInterrupt(Input::ButtonB, &btnBPress);
hugohu 19:89c3eeb3761b 12 input->addBtnPressInterrupt(Input::ButtonC, &btnCPress);
hugohu 19:89c3eeb3761b 13 input->addBtnPressInterrupt(Input::ButtonD, &btnDPress);
hugohu 19:89c3eeb3761b 14
hugohu 19:89c3eeb3761b 15 Achievement::currentState = LETTER1;
hugohu 19:89c3eeb3761b 16 }
hugohu 19:89c3eeb3761b 17
hugohu 19:89c3eeb3761b 18 void Achievement::changeLetter(int index, bool next)
hugohu 19:89c3eeb3761b 19 {
hugohu 19:89c3eeb3761b 20 int letter = (Achievement::letters[index] + ((next) ? 1 : - 1) + 26) % 26; // + 26 in case it is negative, % => wrap around from Z->A
hugohu 19:89c3eeb3761b 21 Achievement::letters[index] = letter;
hugohu 19:89c3eeb3761b 22 }
hugohu 19:89c3eeb3761b 23
hugohu 19:89c3eeb3761b 24 void Achievement::btnAPress()
hugohu 19:89c3eeb3761b 25 {
hugohu 19:89c3eeb3761b 26 switch (currentState)
hugohu 19:89c3eeb3761b 27 {
hugohu 19:89c3eeb3761b 28 case LETTER1:
hugohu 19:89c3eeb3761b 29 changeLetter(0, true);
hugohu 19:89c3eeb3761b 30 break;
hugohu 19:89c3eeb3761b 31
hugohu 19:89c3eeb3761b 32 case LETTER2:
hugohu 19:89c3eeb3761b 33 changeLetter(1, true);
hugohu 19:89c3eeb3761b 34 break;
hugohu 19:89c3eeb3761b 35
hugohu 19:89c3eeb3761b 36 case LETTER3:
hugohu 19:89c3eeb3761b 37 changeLetter(2, true);
hugohu 19:89c3eeb3761b 38 break;
hugohu 19:89c3eeb3761b 39
hugohu 19:89c3eeb3761b 40 case SEL_SUBMIT:
hugohu 19:89c3eeb3761b 41 currentState = WRITE_TO_FILE;
hugohu 19:89c3eeb3761b 42 break;
hugohu 19:89c3eeb3761b 43 }
hugohu 19:89c3eeb3761b 44 }
hugohu 19:89c3eeb3761b 45
hugohu 19:89c3eeb3761b 46 void Achievement::btnBPress()
hugohu 19:89c3eeb3761b 47 {
hugohu 19:89c3eeb3761b 48 // Change to previous letter
hugohu 19:89c3eeb3761b 49 switch (currentState)
hugohu 19:89c3eeb3761b 50 {
hugohu 19:89c3eeb3761b 51 case LETTER1:
hugohu 19:89c3eeb3761b 52 changeLetter(0, false);
hugohu 19:89c3eeb3761b 53 break;
hugohu 19:89c3eeb3761b 54
hugohu 19:89c3eeb3761b 55 case LETTER2:
hugohu 19:89c3eeb3761b 56 changeLetter(1, false);
hugohu 19:89c3eeb3761b 57 break;
hugohu 19:89c3eeb3761b 58
hugohu 19:89c3eeb3761b 59 case LETTER3:
hugohu 19:89c3eeb3761b 60 changeLetter(2, false);
hugohu 19:89c3eeb3761b 61 break;
hugohu 19:89c3eeb3761b 62 }
hugohu 19:89c3eeb3761b 63 }
hugohu 19:89c3eeb3761b 64
hugohu 19:89c3eeb3761b 65 void Achievement::btnCPress()
hugohu 19:89c3eeb3761b 66 {
hugohu 19:89c3eeb3761b 67 switch (currentState)
hugohu 19:89c3eeb3761b 68 {
hugohu 19:89c3eeb3761b 69 case LETTER1:
hugohu 19:89c3eeb3761b 70 currentState = LETTER2;
hugohu 19:89c3eeb3761b 71 break;
hugohu 19:89c3eeb3761b 72
hugohu 19:89c3eeb3761b 73 case LETTER2:
hugohu 19:89c3eeb3761b 74 currentState = LETTER3;
hugohu 19:89c3eeb3761b 75 break;
hugohu 19:89c3eeb3761b 76
hugohu 19:89c3eeb3761b 77 case LETTER3:
hugohu 19:89c3eeb3761b 78 currentState = SEL_SUBMIT;
hugohu 19:89c3eeb3761b 79 break;
hugohu 19:89c3eeb3761b 80
hugohu 19:89c3eeb3761b 81 case SEL_SUBMIT:
hugohu 19:89c3eeb3761b 82 currentState = LETTER1;
hugohu 19:89c3eeb3761b 83 break;
hugohu 19:89c3eeb3761b 84 }
hugohu 19:89c3eeb3761b 85 }
hugohu 19:89c3eeb3761b 86
hugohu 19:89c3eeb3761b 87 void Achievement::btnDPress()
hugohu 19:89c3eeb3761b 88 {
hugohu 19:89c3eeb3761b 89 Achievement::currentState = LETTER1;
hugohu 19:89c3eeb3761b 90 changeLetter(0, false);
hugohu 19:89c3eeb3761b 91 }
hugohu 19:89c3eeb3761b 92
hugohu 19:89c3eeb3761b 93
hugohu 19:89c3eeb3761b 94 void Achievement::update(float dt)
hugohu 19:89c3eeb3761b 95 {
hugohu 19:89c3eeb3761b 96 if (currentState == WRITE_TO_FILE)
hugohu 19:89c3eeb3761b 97 {
hugohu 19:89c3eeb3761b 98 char s0 = 'A' + static_cast<char>(letters[0]);
hugohu 19:89c3eeb3761b 99 char s1 = 'A' + static_cast<char>(letters[1]);
hugohu 19:89c3eeb3761b 100 char s2 = 'A' + static_cast<char>(letters[2]);
hugohu 19:89c3eeb3761b 101
hugohu 19:89c3eeb3761b 102 std::stringstream ss;
hugohu 19:89c3eeb3761b 103 ss << s0 << s1 << s2;
hugohu 19:89c3eeb3761b 104
hugohu 19:89c3eeb3761b 105 std::string initials = ss.str();
hugohu 19:89c3eeb3761b 106
hugohu 19:89c3eeb3761b 107 // update high score list
hugohu 19:89c3eeb3761b 108 FILE *fp = fopen("/local/highscores.txt", "w");
hugohu 19:89c3eeb3761b 109
hugohu 19:89c3eeb3761b 110 if (Global::score > Global::highscores[0].score)
hugohu 19:89c3eeb3761b 111 {
hugohu 19:89c3eeb3761b 112 Global::highscores[2] = Global::highscores[1];
hugohu 19:89c3eeb3761b 113 Global::highscores[1] = Global::highscores[0];
hugohu 19:89c3eeb3761b 114 Global::highscores[0].initials = initials;
hugohu 19:89c3eeb3761b 115 Global::highscores[0].score = Global::score;
hugohu 19:89c3eeb3761b 116 }
hugohu 19:89c3eeb3761b 117 else if (Global::score > Global::highscores[1].score)
hugohu 19:89c3eeb3761b 118 {
hugohu 19:89c3eeb3761b 119 Global::highscores[2] = Global::highscores[1];
hugohu 19:89c3eeb3761b 120 Global::highscores[1].initials = initials;
hugohu 19:89c3eeb3761b 121 Global::highscores[1].score = Global::score;
hugohu 19:89c3eeb3761b 122 }
hugohu 19:89c3eeb3761b 123 else if (Global::score > Global::highscores[2].score)
hugohu 19:89c3eeb3761b 124 {
hugohu 19:89c3eeb3761b 125 Global::highscores[2].initials = initials;
hugohu 19:89c3eeb3761b 126 Global::highscores[2].score = Global::score;
hugohu 19:89c3eeb3761b 127 }
hugohu 19:89c3eeb3761b 128
hugohu 19:89c3eeb3761b 129 for (int i = 0; i < 3; ++i)
hugohu 19:89c3eeb3761b 130 fprintf(fp, "%s %d ", Global::highscores[i].initials, Global::highscores[i].score);
hugohu 19:89c3eeb3761b 131
hugohu 19:89c3eeb3761b 132 fclose(fp);
hugohu 19:89c3eeb3761b 133
hugohu 19:89c3eeb3761b 134 currentState = LOAD_GAME_OVER;
hugohu 19:89c3eeb3761b 135 }
hugohu 19:89c3eeb3761b 136
hugohu 19:89c3eeb3761b 137 if (currentState == LOAD_GAME_OVER)
hugohu 19:89c3eeb3761b 138 requestStateChange(GAME_OVER);
hugohu 19:89c3eeb3761b 139 }
hugohu 19:89c3eeb3761b 140
hugohu 19:89c3eeb3761b 141 void Achievement::render()
hugohu 19:89c3eeb3761b 142 {
hugohu 19:89c3eeb3761b 143 if (currentState == WRITE_TO_FILE)
hugohu 19:89c3eeb3761b 144 {
hugohu 19:89c3eeb3761b 145 lcd->printString("Writing...", 12, 2);
hugohu 19:89c3eeb3761b 146 }
hugohu 19:89c3eeb3761b 147 else // Entering initials
hugohu 19:89c3eeb3761b 148 {
hugohu 19:89c3eeb3761b 149 lcd->printString("New high score!", 0, 0);
hugohu 19:89c3eeb3761b 150
hugohu 19:89c3eeb3761b 151 const char charLetters[6] = {'A' + letters[0], '\0', 'A' + letters[1], '\0', 'A' + letters[2], '\0'};
hugohu 19:89c3eeb3761b 152
hugohu 19:89c3eeb3761b 153 lcd->printString(&charLetters[0], 25, 2);
hugohu 19:89c3eeb3761b 154 lcd->printString(&charLetters[2], 40, 2);
hugohu 19:89c3eeb3761b 155 lcd->printString(&charLetters[4], 55, 2);
hugohu 19:89c3eeb3761b 156 lcd->printString("Submit", 25, 4);
hugohu 19:89c3eeb3761b 157
hugohu 19:89c3eeb3761b 158 switch(currentState)
hugohu 19:89c3eeb3761b 159 {
hugohu 19:89c3eeb3761b 160 case LETTER1:
hugohu 19:89c3eeb3761b 161 lcd->printString("^", 25, 3);
hugohu 19:89c3eeb3761b 162 break;
hugohu 19:89c3eeb3761b 163
hugohu 19:89c3eeb3761b 164 case LETTER2:
hugohu 19:89c3eeb3761b 165 lcd->printString("^", 40, 3);
hugohu 19:89c3eeb3761b 166 break;
hugohu 19:89c3eeb3761b 167
hugohu 19:89c3eeb3761b 168 case LETTER3:
hugohu 19:89c3eeb3761b 169 lcd->printString("^", 55, 3);
hugohu 19:89c3eeb3761b 170 break;
hugohu 19:89c3eeb3761b 171
hugohu 19:89c3eeb3761b 172 case SEL_SUBMIT:
hugohu 19:89c3eeb3761b 173 lcd->printString(">",25-6 , 4);
hugohu 19:89c3eeb3761b 174 break;
hugohu 19:89c3eeb3761b 175 }
hugohu 19:89c3eeb3761b 176 }
hugohu 19:89c3eeb3761b 177 }