Arcade style game on Nokia 5110 LCD with additional features. Includes game play song, high scores page and various settings.
main.cpp@31:9e843820d76e, 2015-05-11 (annotated)
- Committer:
- jordaahh
- Date:
- Mon May 11 13:24:29 2015 +0000
- Revision:
- 31:9e843820d76e
- Parent:
- 30:e6f59801ea2a
With reference to joystick
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jordaahh | 23:986a6ad0d321 | 1 | /** |
jordaahh | 23:986a6ad0d321 | 2 | @file main.cpp |
jordaahh | 30:e6f59801ea2a | 3 | |
jordaahh | 29:f70d927c3e11 | 4 | @brief Game Algorithm implementation |
jordaahh | 23:986a6ad0d321 | 5 | */ |
jordaahh | 10:ffac6dc620ff | 6 | |
jordaahh | 23:986a6ad0d321 | 7 | #include "main.h" |
jordaahh | 10:ffac6dc620ff | 8 | |
jordaahh | 10:ffac6dc620ff | 9 | int main() |
jordaahh | 0:a28ad0db4228 | 10 | { |
jordaahh | 30:e6f59801ea2a | 11 | //set_time(0); // enter unix time then delete from main function to set time |
jordaahh | 13:677d398423f7 | 12 | power = 1; |
jordaahh | 30:e6f59801ea2a | 13 | lcd.init(); |
jordaahh | 0:a28ad0db4228 | 14 | calibrateJoystick(); // get centred values of joystick |
jordaahh | 26:53ab8f8615dd | 15 | pollJoystick.attach(&updateJoystick,1.0/15.0); // read joystick 15 times per second |
jordaahh | 21:a239f5a92464 | 16 | wallMovement.attach(&flagForWall,0.2); // call function flagForWall to make flag=1, every 0.2 seconds |
jordaahh | 21:a239f5a92464 | 17 | wallMovement2.attach(&flagForWall2,0.2); // call function flagForWall2 to make flag=1, every 0.2 seconds |
jordaahh | 21:a239f5a92464 | 18 | wallMovement3.attach(&flagForWall3,0.2); // call function flagForWall3 to make flag=1, every 0.2 seconds |
jordaahh | 21:a239f5a92464 | 19 | flash.attach(&flagForFlash,1); // call function flagForWall3 to make flag=1, every 1 seconds |
jordaahh | 30:e6f59801ea2a | 20 | button.rise(&buttonFlag); // call flag when ever joystick button is pressed |
jordaahh | 10:ffac6dc620ff | 21 | menu(); |
jordaahh | 13:677d398423f7 | 22 | } |
jordaahh | 13:677d398423f7 | 23 | |
jordaahh | 29:f70d927c3e11 | 24 | void calibrateJoystick() |
jordaahh | 29:f70d927c3e11 | 25 | { |
jordaahh | 30:e6f59801ea2a | 26 | button.mode(PullDown); // must not move while calibrating |
jordaahh | 29:f70d927c3e11 | 27 | joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly) |
jordaahh | 29:f70d927c3e11 | 28 | joystick.y0 = yPot; |
jordaahh | 29:f70d927c3e11 | 29 | } |
jordaahh | 29:f70d927c3e11 | 30 | |
jordaahh | 29:f70d927c3e11 | 31 | void updateJoystick() |
jordaahh | 29:f70d927c3e11 | 32 | { |
jordaahh | 29:f70d927c3e11 | 33 | |
jordaahh | 29:f70d927c3e11 | 34 | joystick.x = xPot - joystick.x0; // reads current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred) |
jordaahh | 29:f70d927c3e11 | 35 | joystick.y = yPot - joystick.y0; |
jordaahh | 29:f70d927c3e11 | 36 | joystick.button = button; |
jordaahh | 29:f70d927c3e11 | 37 | |
jordaahh | 29:f70d927c3e11 | 38 | /* calculate direction depending on x,y values */ |
jordaahh | 29:f70d927c3e11 | 39 | /* tolerance allows a little lee-way in case joystick not exactly in the stated direction */ |
jordaahh | 29:f70d927c3e11 | 40 | if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
jordaahh | 29:f70d927c3e11 | 41 | joystick.direction = CENTRE; |
jordaahh | 29:f70d927c3e11 | 42 | } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
jordaahh | 29:f70d927c3e11 | 43 | joystick.direction = UP; |
jordaahh | 29:f70d927c3e11 | 44 | } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
jordaahh | 29:f70d927c3e11 | 45 | joystick.direction = DOWN; |
jordaahh | 29:f70d927c3e11 | 46 | } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { |
jordaahh | 29:f70d927c3e11 | 47 | joystick.direction = RIGHT; |
jordaahh | 29:f70d927c3e11 | 48 | } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { |
jordaahh | 29:f70d927c3e11 | 49 | joystick.direction = LEFT; |
jordaahh | 29:f70d927c3e11 | 50 | } else if ( joystick.y > DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) { |
jordaahh | 29:f70d927c3e11 | 51 | joystick.direction = upRight; |
jordaahh | 29:f70d927c3e11 | 52 | } else if ( joystick.y < DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) { |
jordaahh | 29:f70d927c3e11 | 53 | joystick.direction = downRight; |
jordaahh | 29:f70d927c3e11 | 54 | } else if ( joystick.y > DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) { |
jordaahh | 29:f70d927c3e11 | 55 | joystick.direction = upLeft; |
jordaahh | 29:f70d927c3e11 | 56 | } else if ( joystick.y < DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) { |
jordaahh | 29:f70d927c3e11 | 57 | joystick.direction = downLeft; |
jordaahh | 29:f70d927c3e11 | 58 | } |
jordaahh | 29:f70d927c3e11 | 59 | |
jordaahh | 30:e6f59801ea2a | 60 | printFlag = 1; // set flag for printing |
jordaahh | 29:f70d927c3e11 | 61 | } |
jordaahh | 29:f70d927c3e11 | 62 | |
jordaahh | 29:f70d927c3e11 | 63 | |
jordaahh | 29:f70d927c3e11 | 64 | |
jordaahh | 29:f70d927c3e11 | 65 | void clearCells() |
jordaahh | 29:f70d927c3e11 | 66 | { |
jordaahh | 30:e6f59801ea2a | 67 | for (int i = 0; i < nx ; i++) { // loops through cells in x direction first |
jordaahh | 30:e6f59801ea2a | 68 | for (int j = 0; j < ny ; j++) { // then moves in y direction |
jordaahh | 30:e6f59801ea2a | 69 | lcd.clearPixel(i,j); // clears each pixel that is checked |
jordaahh | 29:f70d927c3e11 | 70 | } |
jordaahh | 29:f70d927c3e11 | 71 | } |
jordaahh | 30:e6f59801ea2a | 72 | lcd.refresh(); // must refresh to write buffer display |
jordaahh | 29:f70d927c3e11 | 73 | } |
jordaahh | 29:f70d927c3e11 | 74 | |
jordaahh | 29:f70d927c3e11 | 75 | |
jordaahh | 29:f70d927c3e11 | 76 | void flagForWall() |
jordaahh | 29:f70d927c3e11 | 77 | { |
jordaahh | 29:f70d927c3e11 | 78 | FLAG=1; |
jordaahh | 29:f70d927c3e11 | 79 | } |
jordaahh | 29:f70d927c3e11 | 80 | |
jordaahh | 29:f70d927c3e11 | 81 | |
jordaahh | 29:f70d927c3e11 | 82 | void flagForWall2() |
jordaahh | 29:f70d927c3e11 | 83 | { |
jordaahh | 29:f70d927c3e11 | 84 | FLAG2=1; |
jordaahh | 29:f70d927c3e11 | 85 | } |
jordaahh | 29:f70d927c3e11 | 86 | |
jordaahh | 29:f70d927c3e11 | 87 | |
jordaahh | 29:f70d927c3e11 | 88 | void flagForWall3() |
jordaahh | 29:f70d927c3e11 | 89 | { |
jordaahh | 29:f70d927c3e11 | 90 | FLAG3=1; |
jordaahh | 29:f70d927c3e11 | 91 | } |
jordaahh | 29:f70d927c3e11 | 92 | |
jordaahh | 30:e6f59801ea2a | 93 | void buttonFlag() |
jordaahh | 30:e6f59801ea2a | 94 | { |
jordaahh | 30:e6f59801ea2a | 95 | BFlag =1; |
jordaahh | 30:e6f59801ea2a | 96 | } |
jordaahh | 29:f70d927c3e11 | 97 | |
jordaahh | 29:f70d927c3e11 | 98 | void menu() |
jordaahh | 29:f70d927c3e11 | 99 | { |
jordaahh | 29:f70d927c3e11 | 100 | int m = 0; |
jordaahh | 30:e6f59801ea2a | 101 | BFlag = 0; |
jordaahh | 29:f70d927c3e11 | 102 | |
jordaahh | 30:e6f59801ea2a | 103 | char buffer[14]; // buffer used to store time string |
jordaahh | 29:f70d927c3e11 | 104 | |
jordaahh | 29:f70d927c3e11 | 105 | while(1) { |
jordaahh | 30:e6f59801ea2a | 106 | powerSave(); // call sleep function |
jordaahh | 29:f70d927c3e11 | 107 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 108 | time_t seconds = time(NULL); // gets current time |
jordaahh | 30:e6f59801ea2a | 109 | strftime(buffer, 14 , "%H:%M", localtime(&seconds)); // send time string to buffer |
jordaahh | 29:f70d927c3e11 | 110 | |
jordaahh | 30:e6f59801ea2a | 111 | lcd.printString(buffer,26,4); // show time on lcd screen |
jordaahh | 29:f70d927c3e11 | 112 | |
jordaahh | 29:f70d927c3e11 | 113 | |
jordaahh | 29:f70d927c3e11 | 114 | if ((joystick.direction == RIGHT)||(joystick.direction == upRight)||(joystick.direction == downRight)) { |
jordaahh | 29:f70d927c3e11 | 115 | m++; |
jordaahh | 29:f70d927c3e11 | 116 | } |
jordaahh | 29:f70d927c3e11 | 117 | if ((joystick.direction == LEFT)||(joystick.direction == upLeft)||(joystick.direction == downLeft)) { |
jordaahh | 29:f70d927c3e11 | 118 | m--; |
jordaahh | 29:f70d927c3e11 | 119 | } |
jordaahh | 29:f70d927c3e11 | 120 | if(m > 2) { |
jordaahh | 29:f70d927c3e11 | 121 | m = 0; |
jordaahh | 29:f70d927c3e11 | 122 | } |
jordaahh | 29:f70d927c3e11 | 123 | if(m < 0) { |
jordaahh | 29:f70d927c3e11 | 124 | m = 2; |
jordaahh | 29:f70d927c3e11 | 125 | } |
jordaahh | 29:f70d927c3e11 | 126 | switch (m) { |
jordaahh | 29:f70d927c3e11 | 127 | case 0 : |
jordaahh | 29:f70d927c3e11 | 128 | lcd.printString("< Play Game >",0,2); |
jordaahh | 29:f70d927c3e11 | 129 | wait(0.3); |
jordaahh | 30:e6f59801ea2a | 130 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 131 | BFlag=0; |
jordaahh | 30:e6f59801ea2a | 132 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 133 | playGame(); |
jordaahh | 29:f70d927c3e11 | 134 | } |
jordaahh | 29:f70d927c3e11 | 135 | break; |
jordaahh | 29:f70d927c3e11 | 136 | case 1 : |
jordaahh | 29:f70d927c3e11 | 137 | lcd.printString("< Settings >",0,2); |
jordaahh | 29:f70d927c3e11 | 138 | wait(0.3); |
jordaahh | 30:e6f59801ea2a | 139 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 140 | BFlag=0; |
jordaahh | 30:e6f59801ea2a | 141 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 142 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 143 | } |
jordaahh | 29:f70d927c3e11 | 144 | break; |
jordaahh | 29:f70d927c3e11 | 145 | case 2 : |
jordaahh | 29:f70d927c3e11 | 146 | lcd.printString("< HighScore >",0,2); |
jordaahh | 29:f70d927c3e11 | 147 | wait(0.3); |
jordaahh | 30:e6f59801ea2a | 148 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 149 | BFlag=0; |
jordaahh | 30:e6f59801ea2a | 150 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 151 | while(1) { |
jordaahh | 30:e6f59801ea2a | 152 | readDataFromFile(); |
jordaahh | 30:e6f59801ea2a | 153 | lcd.printString("HighScore",16,0); |
jordaahh | 30:e6f59801ea2a | 154 | if(joystick.direction == DOWN) { |
jordaahh | 30:e6f59801ea2a | 155 | menu(); |
jordaahh | 29:f70d927c3e11 | 156 | } |
jordaahh | 29:f70d927c3e11 | 157 | } |
jordaahh | 29:f70d927c3e11 | 158 | } |
jordaahh | 29:f70d927c3e11 | 159 | break; |
jordaahh | 29:f70d927c3e11 | 160 | |
jordaahh | 29:f70d927c3e11 | 161 | } |
jordaahh | 29:f70d927c3e11 | 162 | } |
jordaahh | 29:f70d927c3e11 | 163 | } |
jordaahh | 29:f70d927c3e11 | 164 | |
jordaahh | 29:f70d927c3e11 | 165 | |
jordaahh | 29:f70d927c3e11 | 166 | void playGame() |
jordaahh | 29:f70d927c3e11 | 167 | { |
jordaahh | 29:f70d927c3e11 | 168 | /* reset variables */ |
jordaahh | 29:f70d927c3e11 | 169 | i=24; |
jordaahh | 29:f70d927c3e11 | 170 | j=42; |
jordaahh | 29:f70d927c3e11 | 171 | x = 0; |
jordaahh | 29:f70d927c3e11 | 172 | y = 0; |
jordaahh | 29:f70d927c3e11 | 173 | z = 30; |
jordaahh | 29:f70d927c3e11 | 174 | a = 0; |
jordaahh | 29:f70d927c3e11 | 175 | b = 47; |
jordaahh | 29:f70d927c3e11 | 176 | d = 30; |
jordaahh | 29:f70d927c3e11 | 177 | f = 0; |
jordaahh | 29:f70d927c3e11 | 178 | g = 0; |
jordaahh | 29:f70d927c3e11 | 179 | h = 24; |
jordaahh | 29:f70d927c3e11 | 180 | q = 83; |
jordaahh | 29:f70d927c3e11 | 181 | w = 0; |
jordaahh | 29:f70d927c3e11 | 182 | e = 24; |
jordaahh | 29:f70d927c3e11 | 183 | score = 0; |
jordaahh | 29:f70d927c3e11 | 184 | u = 0; |
jordaahh | 29:f70d927c3e11 | 185 | |
jordaahh | 29:f70d927c3e11 | 186 | lcd.printString("GO!",35,2); |
jordaahh | 29:f70d927c3e11 | 187 | wait(1); |
jordaahh | 29:f70d927c3e11 | 188 | while(1) { |
jordaahh | 30:e6f59801ea2a | 189 | if(soundFlag==1) { // if mute hasn't been toggled in settings then the song will play |
jordaahh | 29:f70d927c3e11 | 190 | tone(); |
jordaahh | 29:f70d927c3e11 | 191 | } |
jordaahh | 30:e6f59801ea2a | 192 | lcd.drawRect(i,j,2,2,0); // draws player object |
jordaahh | 29:f70d927c3e11 | 193 | clearCells(); |
jordaahh | 29:f70d927c3e11 | 194 | fallingWalls(); |
jordaahh | 29:f70d927c3e11 | 195 | boundries(); |
jordaahh | 29:f70d927c3e11 | 196 | playerMovement(); |
jordaahh | 30:e6f59801ea2a | 197 | |
jordaahh | 30:e6f59801ea2a | 198 | if (lcd.getPixel(i,j)) { // if wall meets player object then there is a collision |
jordaahh | 29:f70d927c3e11 | 199 | scoreCheck(); |
jordaahh | 29:f70d927c3e11 | 200 | int m = 1; |
jordaahh | 30:e6f59801ea2a | 201 | GameOverFlash(); // this means that it is game over |
jordaahh | 29:f70d927c3e11 | 202 | if (soundFlag == 1) { |
jordaahh | 29:f70d927c3e11 | 203 | deadTone(); |
jordaahh | 29:f70d927c3e11 | 204 | } |
jordaahh | 29:f70d927c3e11 | 205 | |
jordaahh | 29:f70d927c3e11 | 206 | while(1) { |
jordaahh | 29:f70d927c3e11 | 207 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 208 | if ((joystick.direction == RIGHT)||(joystick.direction == upRight)||(joystick.direction == downRight)) { // reads joystick direction and counts down |
jordaahh | 29:f70d927c3e11 | 209 | m--; |
jordaahh | 29:f70d927c3e11 | 210 | } |
jordaahh | 30:e6f59801ea2a | 211 | if ((joystick.direction == LEFT)||(joystick.direction == upLeft)||(joystick.direction == downLeft)) { // reads joystick direction and counts up |
jordaahh | 29:f70d927c3e11 | 212 | m++; |
jordaahh | 29:f70d927c3e11 | 213 | } |
jordaahh | 29:f70d927c3e11 | 214 | if(m > 2) { // stops counter from going above total number of cases |
jordaahh | 29:f70d927c3e11 | 215 | m = 2; |
jordaahh | 29:f70d927c3e11 | 216 | } |
jordaahh | 29:f70d927c3e11 | 217 | if(m < 0) { // stops counter from going below zero |
jordaahh | 29:f70d927c3e11 | 218 | m = 0; |
jordaahh | 29:f70d927c3e11 | 219 | } |
jordaahh | 30:e6f59801ea2a | 220 | switch (m) { //switches to the case that the counter is on |
jordaahh | 29:f70d927c3e11 | 221 | case 0 : |
jordaahh | 29:f70d927c3e11 | 222 | lcd.printString("YES",0,3); |
jordaahh | 30:e6f59801ea2a | 223 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 224 | BFlag=0; |
jordaahh | 30:e6f59801ea2a | 225 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 226 | playGame(); |
jordaahh | 29:f70d927c3e11 | 227 | } |
jordaahh | 29:f70d927c3e11 | 228 | break; |
jordaahh | 29:f70d927c3e11 | 229 | case 1 : |
jordaahh | 29:f70d927c3e11 | 230 | lcd.printString("Play Again?",9,1); |
jordaahh | 29:f70d927c3e11 | 231 | lcd.printString("Yes No",0,3); |
jordaahh | 29:f70d927c3e11 | 232 | wait(0.3); |
jordaahh | 29:f70d927c3e11 | 233 | |
jordaahh | 29:f70d927c3e11 | 234 | break; |
jordaahh | 29:f70d927c3e11 | 235 | case 2 : |
jordaahh | 29:f70d927c3e11 | 236 | lcd.printString("NO",70,3); |
jordaahh | 30:e6f59801ea2a | 237 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 238 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 239 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 240 | lcd.printString("Leaving Game",0,2); |
jordaahh | 30:e6f59801ea2a | 241 | wait(1.0); |
jordaahh | 30:e6f59801ea2a | 242 | menu(); |
jordaahh | 29:f70d927c3e11 | 243 | } |
jordaahh | 29:f70d927c3e11 | 244 | break; |
jordaahh | 29:f70d927c3e11 | 245 | } |
jordaahh | 29:f70d927c3e11 | 246 | } |
jordaahh | 29:f70d927c3e11 | 247 | } |
jordaahh | 30:e6f59801ea2a | 248 | if (lcd.getPixel(i+2,j)) { // same as above but for different side of player object |
jordaahh | 29:f70d927c3e11 | 249 | |
jordaahh | 29:f70d927c3e11 | 250 | scoreCheck(); |
jordaahh | 29:f70d927c3e11 | 251 | clearCells(); |
jordaahh | 29:f70d927c3e11 | 252 | int m = 1; |
jordaahh | 29:f70d927c3e11 | 253 | GameOverFlash(); |
jordaahh | 29:f70d927c3e11 | 254 | if (soundFlag == 1) { |
jordaahh | 29:f70d927c3e11 | 255 | deadTone(); |
jordaahh | 29:f70d927c3e11 | 256 | } |
jordaahh | 29:f70d927c3e11 | 257 | |
jordaahh | 29:f70d927c3e11 | 258 | while(1) { |
jordaahh | 29:f70d927c3e11 | 259 | clearCells(); |
jordaahh | 29:f70d927c3e11 | 260 | if ((joystick.direction == RIGHT)||(joystick.direction == upRight)||(joystick.direction == downRight)) { |
jordaahh | 29:f70d927c3e11 | 261 | m--; |
jordaahh | 29:f70d927c3e11 | 262 | } |
jordaahh | 29:f70d927c3e11 | 263 | if ((joystick.direction == LEFT)||(joystick.direction == upLeft)||(joystick.direction == downLeft)) { |
jordaahh | 29:f70d927c3e11 | 264 | m++; |
jordaahh | 29:f70d927c3e11 | 265 | } |
jordaahh | 29:f70d927c3e11 | 266 | if(m > 2) { |
jordaahh | 29:f70d927c3e11 | 267 | m = 2; |
jordaahh | 29:f70d927c3e11 | 268 | } |
jordaahh | 29:f70d927c3e11 | 269 | if(m < 0) { |
jordaahh | 29:f70d927c3e11 | 270 | m = 0; |
jordaahh | 29:f70d927c3e11 | 271 | } |
jordaahh | 29:f70d927c3e11 | 272 | switch (m) { |
jordaahh | 29:f70d927c3e11 | 273 | case 0 : |
jordaahh | 29:f70d927c3e11 | 274 | lcd.printString("YES",0,3); |
jordaahh | 30:e6f59801ea2a | 275 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 276 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 277 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 278 | playGame(); |
jordaahh | 29:f70d927c3e11 | 279 | } |
jordaahh | 29:f70d927c3e11 | 280 | break; |
jordaahh | 29:f70d927c3e11 | 281 | case 1 : |
jordaahh | 29:f70d927c3e11 | 282 | lcd.printString("Play Again?",9,1); |
jordaahh | 29:f70d927c3e11 | 283 | lcd.printString("Yes No",0,3); |
jordaahh | 29:f70d927c3e11 | 284 | wait(0.3); |
jordaahh | 29:f70d927c3e11 | 285 | |
jordaahh | 29:f70d927c3e11 | 286 | break; |
jordaahh | 29:f70d927c3e11 | 287 | case 2 : |
jordaahh | 29:f70d927c3e11 | 288 | lcd.printString("NO",70,3); |
jordaahh | 30:e6f59801ea2a | 289 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 290 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 291 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 292 | lcd.printString("Leaving Game",0,2); |
jordaahh | 30:e6f59801ea2a | 293 | wait(1.0); |
jordaahh | 30:e6f59801ea2a | 294 | menu(); |
jordaahh | 29:f70d927c3e11 | 295 | } |
jordaahh | 29:f70d927c3e11 | 296 | break; |
jordaahh | 29:f70d927c3e11 | 297 | } |
jordaahh | 29:f70d927c3e11 | 298 | } |
jordaahh | 29:f70d927c3e11 | 299 | } |
jordaahh | 29:f70d927c3e11 | 300 | if (lcd.getPixel(i+2,j+2)) { |
jordaahh | 30:e6f59801ea2a | 301 | scoreCheck(); |
jordaahh | 29:f70d927c3e11 | 302 | clearCells(); |
jordaahh | 29:f70d927c3e11 | 303 | int m = 1; |
jordaahh | 29:f70d927c3e11 | 304 | GameOverFlash(); |
jordaahh | 29:f70d927c3e11 | 305 | if (soundFlag == 1) { |
jordaahh | 29:f70d927c3e11 | 306 | deadTone(); |
jordaahh | 29:f70d927c3e11 | 307 | } |
jordaahh | 29:f70d927c3e11 | 308 | |
jordaahh | 29:f70d927c3e11 | 309 | while(1) { |
jordaahh | 29:f70d927c3e11 | 310 | clearCells(); |
jordaahh | 29:f70d927c3e11 | 311 | if ((joystick.direction == RIGHT)||(joystick.direction == upRight)||(joystick.direction == downRight)) { |
jordaahh | 29:f70d927c3e11 | 312 | m--; |
jordaahh | 29:f70d927c3e11 | 313 | } |
jordaahh | 29:f70d927c3e11 | 314 | if ((joystick.direction == LEFT)||(joystick.direction == upLeft)||(joystick.direction == downLeft)) { |
jordaahh | 29:f70d927c3e11 | 315 | m++; |
jordaahh | 29:f70d927c3e11 | 316 | } |
jordaahh | 29:f70d927c3e11 | 317 | if(m > 2) { |
jordaahh | 29:f70d927c3e11 | 318 | m = 2; |
jordaahh | 29:f70d927c3e11 | 319 | } |
jordaahh | 29:f70d927c3e11 | 320 | if(m < 0) { |
jordaahh | 29:f70d927c3e11 | 321 | m = 0; |
jordaahh | 29:f70d927c3e11 | 322 | } |
jordaahh | 29:f70d927c3e11 | 323 | switch (m) { |
jordaahh | 29:f70d927c3e11 | 324 | case 0 : |
jordaahh | 29:f70d927c3e11 | 325 | lcd.printString("YES",0,3); |
jordaahh | 30:e6f59801ea2a | 326 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 327 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 328 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 329 | playGame(); |
jordaahh | 29:f70d927c3e11 | 330 | } |
jordaahh | 29:f70d927c3e11 | 331 | break; |
jordaahh | 29:f70d927c3e11 | 332 | case 1 : |
jordaahh | 29:f70d927c3e11 | 333 | lcd.printString("Play Again?",9,1); |
jordaahh | 29:f70d927c3e11 | 334 | lcd.printString("Yes No",0,3); |
jordaahh | 29:f70d927c3e11 | 335 | wait(0.3); |
jordaahh | 29:f70d927c3e11 | 336 | |
jordaahh | 29:f70d927c3e11 | 337 | break; |
jordaahh | 29:f70d927c3e11 | 338 | case 2 : |
jordaahh | 29:f70d927c3e11 | 339 | lcd.printString("NO",70,3); |
jordaahh | 30:e6f59801ea2a | 340 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 341 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 342 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 343 | lcd.printString("Leaving Game",0,2); |
jordaahh | 30:e6f59801ea2a | 344 | wait(1.0); |
jordaahh | 30:e6f59801ea2a | 345 | menu(); |
jordaahh | 29:f70d927c3e11 | 346 | } |
jordaahh | 29:f70d927c3e11 | 347 | break; |
jordaahh | 29:f70d927c3e11 | 348 | |
jordaahh | 29:f70d927c3e11 | 349 | } |
jordaahh | 29:f70d927c3e11 | 350 | } |
jordaahh | 29:f70d927c3e11 | 351 | } |
jordaahh | 29:f70d927c3e11 | 352 | if (lcd.getPixel(i,j+2)) { |
jordaahh | 30:e6f59801ea2a | 353 | scoreCheck(); |
jordaahh | 29:f70d927c3e11 | 354 | clearCells(); |
jordaahh | 29:f70d927c3e11 | 355 | int m = 1; |
jordaahh | 29:f70d927c3e11 | 356 | GameOverFlash(); |
jordaahh | 29:f70d927c3e11 | 357 | if (soundFlag == 1) { |
jordaahh | 29:f70d927c3e11 | 358 | deadTone(); |
jordaahh | 29:f70d927c3e11 | 359 | } |
jordaahh | 29:f70d927c3e11 | 360 | |
jordaahh | 29:f70d927c3e11 | 361 | while(1) { |
jordaahh | 29:f70d927c3e11 | 362 | clearCells(); |
jordaahh | 29:f70d927c3e11 | 363 | if ((joystick.direction == RIGHT)||(joystick.direction == upRight)||(joystick.direction == downRight)) { |
jordaahh | 29:f70d927c3e11 | 364 | m--; |
jordaahh | 29:f70d927c3e11 | 365 | } |
jordaahh | 29:f70d927c3e11 | 366 | if ((joystick.direction == LEFT)||(joystick.direction == upLeft)||(joystick.direction == downLeft)) { |
jordaahh | 29:f70d927c3e11 | 367 | m++; |
jordaahh | 29:f70d927c3e11 | 368 | } |
jordaahh | 29:f70d927c3e11 | 369 | if(m > 2) { |
jordaahh | 29:f70d927c3e11 | 370 | m = 2; |
jordaahh | 29:f70d927c3e11 | 371 | } |
jordaahh | 29:f70d927c3e11 | 372 | if(m < 0) { |
jordaahh | 29:f70d927c3e11 | 373 | m = 0; |
jordaahh | 29:f70d927c3e11 | 374 | } |
jordaahh | 29:f70d927c3e11 | 375 | switch (m) { |
jordaahh | 29:f70d927c3e11 | 376 | case 0 : |
jordaahh | 29:f70d927c3e11 | 377 | lcd.printString("YES",0,3); |
jordaahh | 30:e6f59801ea2a | 378 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 379 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 380 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 381 | playGame(); |
jordaahh | 29:f70d927c3e11 | 382 | } |
jordaahh | 29:f70d927c3e11 | 383 | break; |
jordaahh | 29:f70d927c3e11 | 384 | case 1 : |
jordaahh | 29:f70d927c3e11 | 385 | lcd.printString("Play Again?",9,1); |
jordaahh | 29:f70d927c3e11 | 386 | lcd.printString("Yes No",0,3); |
jordaahh | 29:f70d927c3e11 | 387 | wait(0.3); |
jordaahh | 29:f70d927c3e11 | 388 | |
jordaahh | 29:f70d927c3e11 | 389 | break; |
jordaahh | 29:f70d927c3e11 | 390 | case 2 : |
jordaahh | 29:f70d927c3e11 | 391 | lcd.printString("NO",70,3); |
jordaahh | 30:e6f59801ea2a | 392 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 393 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 394 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 395 | lcd.printString("Leaving Game",0,2); |
jordaahh | 30:e6f59801ea2a | 396 | wait(1.0); |
jordaahh | 30:e6f59801ea2a | 397 | menu(); |
jordaahh | 29:f70d927c3e11 | 398 | } |
jordaahh | 29:f70d927c3e11 | 399 | break; |
jordaahh | 29:f70d927c3e11 | 400 | |
jordaahh | 29:f70d927c3e11 | 401 | } |
jordaahh | 29:f70d927c3e11 | 402 | } |
jordaahh | 29:f70d927c3e11 | 403 | } |
jordaahh | 29:f70d927c3e11 | 404 | } |
jordaahh | 29:f70d927c3e11 | 405 | } |
jordaahh | 29:f70d927c3e11 | 406 | |
jordaahh | 29:f70d927c3e11 | 407 | |
jordaahh | 29:f70d927c3e11 | 408 | void BandVMenu() |
jordaahh | 29:f70d927c3e11 | 409 | { |
jordaahh | 29:f70d927c3e11 | 410 | int t = 0; |
jordaahh | 29:f70d927c3e11 | 411 | while(1) { |
jordaahh | 29:f70d927c3e11 | 412 | wait(0.2); |
jordaahh | 29:f70d927c3e11 | 413 | clearCells(); |
jordaahh | 29:f70d927c3e11 | 414 | if ((joystick.direction == RIGHT)||(joystick.direction == upRight)||(joystick.direction == downRight)) { |
jordaahh | 29:f70d927c3e11 | 415 | t++; |
jordaahh | 29:f70d927c3e11 | 416 | } |
jordaahh | 29:f70d927c3e11 | 417 | if ((joystick.direction == LEFT)||(joystick.direction == upLeft)||(joystick.direction == downLeft)) { |
jordaahh | 29:f70d927c3e11 | 418 | t--; |
jordaahh | 29:f70d927c3e11 | 419 | } |
jordaahh | 29:f70d927c3e11 | 420 | if(t > 2) { |
jordaahh | 29:f70d927c3e11 | 421 | t = 0; |
jordaahh | 29:f70d927c3e11 | 422 | } |
jordaahh | 29:f70d927c3e11 | 423 | if(t < 0) { |
jordaahh | 29:f70d927c3e11 | 424 | t = 2; |
jordaahh | 29:f70d927c3e11 | 425 | } |
jordaahh | 29:f70d927c3e11 | 426 | if(joystick.direction == DOWN) { |
jordaahh | 29:f70d927c3e11 | 427 | clearCells(); |
jordaahh | 29:f70d927c3e11 | 428 | lcd.printString("Returning",18,2); |
jordaahh | 29:f70d927c3e11 | 429 | lcd.printString("to Menu",24,3); |
jordaahh | 29:f70d927c3e11 | 430 | wait(0.5); |
jordaahh | 29:f70d927c3e11 | 431 | menu(); |
jordaahh | 29:f70d927c3e11 | 432 | } |
jordaahh | 29:f70d927c3e11 | 433 | switch (t) { |
jordaahh | 29:f70d927c3e11 | 434 | case 0 : |
jordaahh | 29:f70d927c3e11 | 435 | lcd.printString("< Brightness >",0,2); |
jordaahh | 30:e6f59801ea2a | 436 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 437 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 438 | brightness(); |
jordaahh | 29:f70d927c3e11 | 439 | } |
jordaahh | 29:f70d927c3e11 | 440 | break; |
jordaahh | 29:f70d927c3e11 | 441 | case 1 : |
jordaahh | 29:f70d927c3e11 | 442 | lcd.printString("< Volume >",0,2); |
jordaahh | 30:e6f59801ea2a | 443 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 444 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 445 | volume(); |
jordaahh | 29:f70d927c3e11 | 446 | } |
jordaahh | 29:f70d927c3e11 | 447 | break; |
jordaahh | 29:f70d927c3e11 | 448 | case 2 : |
jordaahh | 29:f70d927c3e11 | 449 | lcd.printString("<Instructions>",0,2); |
jordaahh | 30:e6f59801ea2a | 450 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 451 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 452 | instructions(); |
jordaahh | 29:f70d927c3e11 | 453 | } |
jordaahh | 29:f70d927c3e11 | 454 | break; |
jordaahh | 29:f70d927c3e11 | 455 | } |
jordaahh | 29:f70d927c3e11 | 456 | } |
jordaahh | 29:f70d927c3e11 | 457 | } |
jordaahh | 29:f70d927c3e11 | 458 | |
jordaahh | 29:f70d927c3e11 | 459 | |
jordaahh | 29:f70d927c3e11 | 460 | void brightness() |
jordaahh | 29:f70d927c3e11 | 461 | { |
jordaahh | 29:f70d927c3e11 | 462 | while(1) { |
jordaahh | 29:f70d927c3e11 | 463 | wait(0.2); |
jordaahh | 29:f70d927c3e11 | 464 | clearCells(); |
jordaahh | 29:f70d927c3e11 | 465 | if ((joystick.direction == RIGHT)||(joystick.direction == upRight)||(joystick.direction == downRight)) { |
jordaahh | 29:f70d927c3e11 | 466 | bright--; |
jordaahh | 29:f70d927c3e11 | 467 | } |
jordaahh | 29:f70d927c3e11 | 468 | if ((joystick.direction == LEFT)||(joystick.direction == upLeft)||(joystick.direction == downLeft)) { |
jordaahh | 29:f70d927c3e11 | 469 | bright++; |
jordaahh | 29:f70d927c3e11 | 470 | } |
jordaahh | 29:f70d927c3e11 | 471 | if(bright > 3) { |
jordaahh | 29:f70d927c3e11 | 472 | bright = 3; |
jordaahh | 29:f70d927c3e11 | 473 | } |
jordaahh | 29:f70d927c3e11 | 474 | if(bright < -3) { |
jordaahh | 29:f70d927c3e11 | 475 | bright = -3; |
jordaahh | 29:f70d927c3e11 | 476 | } |
jordaahh | 29:f70d927c3e11 | 477 | switch (bright) { |
jordaahh | 29:f70d927c3e11 | 478 | case 0 : |
jordaahh | 29:f70d927c3e11 | 479 | lcd.printString(" Brightness ",0,2); |
jordaahh | 29:f70d927c3e11 | 480 | lcd.printString(" ||||||",0,4); |
jordaahh | 29:f70d927c3e11 | 481 | lcd.setBrightness(0.6); |
jordaahh | 30:e6f59801ea2a | 482 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 483 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 484 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 485 | } |
jordaahh | 29:f70d927c3e11 | 486 | break; |
jordaahh | 29:f70d927c3e11 | 487 | case 1 : |
jordaahh | 29:f70d927c3e11 | 488 | lcd.printString(" Brightness ",0,2); |
jordaahh | 29:f70d927c3e11 | 489 | lcd.printString(" ||||||||",0,4); |
jordaahh | 29:f70d927c3e11 | 490 | lcd.setBrightness(0.8); |
jordaahh | 30:e6f59801ea2a | 491 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 492 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 493 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 494 | } |
jordaahh | 29:f70d927c3e11 | 495 | break; |
jordaahh | 29:f70d927c3e11 | 496 | case 2 : |
jordaahh | 29:f70d927c3e11 | 497 | lcd.printString(" Brightness ",0,2); |
jordaahh | 29:f70d927c3e11 | 498 | lcd.printString(" ||||||||||",0,4); |
jordaahh | 29:f70d927c3e11 | 499 | lcd.setBrightness(0.9); |
jordaahh | 30:e6f59801ea2a | 500 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 501 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 502 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 503 | } |
jordaahh | 29:f70d927c3e11 | 504 | break; |
jordaahh | 29:f70d927c3e11 | 505 | case 3 : |
jordaahh | 29:f70d927c3e11 | 506 | lcd.printString(" Brightness ",0,2); |
jordaahh | 29:f70d927c3e11 | 507 | lcd.printString(" ||||||||||||",0,4); |
jordaahh | 29:f70d927c3e11 | 508 | lcd.setBrightness(1); |
jordaahh | 30:e6f59801ea2a | 509 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 510 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 511 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 512 | } |
jordaahh | 29:f70d927c3e11 | 513 | break; |
jordaahh | 29:f70d927c3e11 | 514 | case -1 : |
jordaahh | 29:f70d927c3e11 | 515 | lcd.printString(" Brightness ",0,2); |
jordaahh | 29:f70d927c3e11 | 516 | lcd.printString(" ||||",0,4); |
jordaahh | 29:f70d927c3e11 | 517 | lcd.setBrightness(0.4); |
jordaahh | 30:e6f59801ea2a | 518 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 519 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 520 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 521 | } |
jordaahh | 29:f70d927c3e11 | 522 | break; |
jordaahh | 29:f70d927c3e11 | 523 | case -2 : |
jordaahh | 29:f70d927c3e11 | 524 | lcd.printString(" Brightness ",0,2); |
jordaahh | 29:f70d927c3e11 | 525 | lcd.printString(" ||",0,4); |
jordaahh | 29:f70d927c3e11 | 526 | lcd.setBrightness(0.2); |
jordaahh | 30:e6f59801ea2a | 527 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 528 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 529 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 530 | } |
jordaahh | 29:f70d927c3e11 | 531 | break; |
jordaahh | 29:f70d927c3e11 | 532 | case -3 : |
jordaahh | 29:f70d927c3e11 | 533 | lcd.printString(" Brightness ",0,2); |
jordaahh | 29:f70d927c3e11 | 534 | lcd.setBrightness(0); |
jordaahh | 30:e6f59801ea2a | 535 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 536 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 537 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 538 | } |
jordaahh | 29:f70d927c3e11 | 539 | break; |
jordaahh | 29:f70d927c3e11 | 540 | } |
jordaahh | 29:f70d927c3e11 | 541 | } |
jordaahh | 29:f70d927c3e11 | 542 | } |
jordaahh | 29:f70d927c3e11 | 543 | |
jordaahh | 29:f70d927c3e11 | 544 | |
jordaahh | 29:f70d927c3e11 | 545 | void volume() |
jordaahh | 29:f70d927c3e11 | 546 | { |
jordaahh | 29:f70d927c3e11 | 547 | while(1) { |
jordaahh | 29:f70d927c3e11 | 548 | wait(0.2); |
jordaahh | 29:f70d927c3e11 | 549 | clearCells(); |
jordaahh | 29:f70d927c3e11 | 550 | if ((joystick.direction == RIGHT)||(joystick.direction == upRight)||(joystick.direction == downRight)) { |
jordaahh | 29:f70d927c3e11 | 551 | vol--; |
jordaahh | 29:f70d927c3e11 | 552 | } |
jordaahh | 29:f70d927c3e11 | 553 | if ((joystick.direction == LEFT)||(joystick.direction == upLeft)||(joystick.direction == downLeft)) { |
jordaahh | 29:f70d927c3e11 | 554 | vol++; |
jordaahh | 29:f70d927c3e11 | 555 | } |
jordaahh | 29:f70d927c3e11 | 556 | if(vol > 3) { |
jordaahh | 29:f70d927c3e11 | 557 | vol = 3; |
jordaahh | 29:f70d927c3e11 | 558 | } |
jordaahh | 29:f70d927c3e11 | 559 | if(vol < -3) { |
jordaahh | 29:f70d927c3e11 | 560 | vol = -3; |
jordaahh | 29:f70d927c3e11 | 561 | } |
jordaahh | 29:f70d927c3e11 | 562 | switch (vol) { |
jordaahh | 29:f70d927c3e11 | 563 | case 0 : |
jordaahh | 29:f70d927c3e11 | 564 | lcd.printString(" Volume ",0,2); |
jordaahh | 29:f70d927c3e11 | 565 | lcd.printString(" ||||||",0,4); |
jordaahh | 30:e6f59801ea2a | 566 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 567 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 568 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 569 | } |
jordaahh | 29:f70d927c3e11 | 570 | break; |
jordaahh | 29:f70d927c3e11 | 571 | case 1 : |
jordaahh | 29:f70d927c3e11 | 572 | lcd.printString(" Volume ",0,2); |
jordaahh | 29:f70d927c3e11 | 573 | lcd.printString(" ||||||||",0,4); |
jordaahh | 30:e6f59801ea2a | 574 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 575 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 576 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 577 | } |
jordaahh | 29:f70d927c3e11 | 578 | break; |
jordaahh | 29:f70d927c3e11 | 579 | case 2 : |
jordaahh | 29:f70d927c3e11 | 580 | lcd.printString(" Volume ",0,2); |
jordaahh | 29:f70d927c3e11 | 581 | lcd.printString(" ||||||||||",0,4); |
jordaahh | 30:e6f59801ea2a | 582 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 583 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 584 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 585 | } |
jordaahh | 29:f70d927c3e11 | 586 | break; |
jordaahh | 29:f70d927c3e11 | 587 | case 3 : |
jordaahh | 29:f70d927c3e11 | 588 | lcd.printString(" Volume ",0,2); |
jordaahh | 29:f70d927c3e11 | 589 | lcd.printString(" ||||||||||||",0,4); |
jordaahh | 30:e6f59801ea2a | 590 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 591 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 592 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 593 | } |
jordaahh | 29:f70d927c3e11 | 594 | break; |
jordaahh | 29:f70d927c3e11 | 595 | case -1 : |
jordaahh | 29:f70d927c3e11 | 596 | lcd.printString(" Volume ",0,2); |
jordaahh | 29:f70d927c3e11 | 597 | lcd.printString(" ||||",0,4); |
jordaahh | 30:e6f59801ea2a | 598 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 599 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 600 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 601 | } |
jordaahh | 29:f70d927c3e11 | 602 | break; |
jordaahh | 29:f70d927c3e11 | 603 | case -2 : |
jordaahh | 29:f70d927c3e11 | 604 | lcd.printString(" Volume ",0,2); |
jordaahh | 29:f70d927c3e11 | 605 | lcd.printString(" ||",0,4); |
jordaahh | 30:e6f59801ea2a | 606 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 607 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 608 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 609 | } |
jordaahh | 29:f70d927c3e11 | 610 | break; |
jordaahh | 29:f70d927c3e11 | 611 | case -3 : |
jordaahh | 29:f70d927c3e11 | 612 | lcd.printString(" Volume ",0,2); |
jordaahh | 29:f70d927c3e11 | 613 | lcd.printString(" MUTE",0,4); |
jordaahh | 29:f70d927c3e11 | 614 | soundFlag = 0; |
jordaahh | 30:e6f59801ea2a | 615 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 616 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 617 | BandVMenu(); |
jordaahh | 29:f70d927c3e11 | 618 | } |
jordaahh | 29:f70d927c3e11 | 619 | break; |
jordaahh | 29:f70d927c3e11 | 620 | } |
jordaahh | 29:f70d927c3e11 | 621 | } |
jordaahh | 29:f70d927c3e11 | 622 | } |
jordaahh | 29:f70d927c3e11 | 623 | |
jordaahh | 29:f70d927c3e11 | 624 | |
jordaahh | 29:f70d927c3e11 | 625 | void writeDataToFile() |
jordaahh | 29:f70d927c3e11 | 626 | { |
jordaahh | 30:e6f59801ea2a | 627 | time_t seconds = time(NULL); // get current time |
jordaahh | 30:e6f59801ea2a | 628 | char buffer2[14]; // buffer used to store time string |
jordaahh | 30:e6f59801ea2a | 629 | strftime(buffer2, 14, " %d/%m/%y", localtime(&seconds)); // displays unix time in day/ month/ year format and sends it to buffer |
jordaahh | 29:f70d927c3e11 | 630 | |
jordaahh | 30:e6f59801ea2a | 631 | FILE *fp = fopen("/local/score.txt", "w"); // open file called 'score.txt' |
jordaahh | 30:e6f59801ea2a | 632 | /* if the file doesn't exist it is created, if it exists, data is updated */ |
jordaahh | 30:e6f59801ea2a | 633 | fprintf(fp,"%i%s",score,buffer2); // print integer for score and date to file |
jordaahh | 30:e6f59801ea2a | 634 | fclose(fp); // close file |
jordaahh | 29:f70d927c3e11 | 635 | } |
jordaahh | 29:f70d927c3e11 | 636 | |
jordaahh | 29:f70d927c3e11 | 637 | |
jordaahh | 29:f70d927c3e11 | 638 | void readDataFromFile() |
jordaahh | 29:f70d927c3e11 | 639 | { |
jordaahh | 30:e6f59801ea2a | 640 | int score1; // states the score to be read from the file is an integer value |
jordaahh | 29:f70d927c3e11 | 641 | char buffer2recieved[14]; // buffer to recieve the string of data read from the text file |
jordaahh | 29:f70d927c3e11 | 642 | |
jordaahh | 30:e6f59801ea2a | 643 | FILE *fp2 = fopen("/local/score.txt", "r"); // open 'score.txt' |
jordaahh | 30:e6f59801ea2a | 644 | fscanf (fp2,"%i%s",&score1,buffer2recieved); // scans text file for an integer followed by a string |
jordaahh | 30:e6f59801ea2a | 645 | fclose(fp2); // close file |
jordaahh | 29:f70d927c3e11 | 646 | |
jordaahh | 29:f70d927c3e11 | 647 | char Points[14]; // buffer to store score value |
jordaahh | 30:e6f59801ea2a | 648 | sprintf(Points,"%i",score1); // send score to buffer (Points) |
jordaahh | 30:e6f59801ea2a | 649 | lcd.printString(Points,39,2); // print score on LCD |
jordaahh | 30:e6f59801ea2a | 650 | lcd.printString(buffer2recieved,18,4); // print date on LCD |
jordaahh | 29:f70d927c3e11 | 651 | |
jordaahh | 29:f70d927c3e11 | 652 | } |
jordaahh | 29:f70d927c3e11 | 653 | |
jordaahh | 29:f70d927c3e11 | 654 | |
jordaahh | 29:f70d927c3e11 | 655 | |
jordaahh | 29:f70d927c3e11 | 656 | void tone() |
jordaahh | 29:f70d927c3e11 | 657 | { |
jordaahh | 29:f70d927c3e11 | 658 | |
jordaahh | 29:f70d927c3e11 | 659 | if(FLAG3==1) { |
jordaahh | 29:f70d927c3e11 | 660 | FLAG3 = 0; |
jordaahh | 29:f70d927c3e11 | 661 | buz.period(1/(frequency[u])); // set PWM period |
jordaahh | 29:f70d927c3e11 | 662 | buz=0.2; |
jordaahh | 29:f70d927c3e11 | 663 | u++; |
jordaahh | 29:f70d927c3e11 | 664 | } |
jordaahh | 29:f70d927c3e11 | 665 | if( u > 30) { |
jordaahh | 29:f70d927c3e11 | 666 | u = 0; |
jordaahh | 29:f70d927c3e11 | 667 | } |
jordaahh | 29:f70d927c3e11 | 668 | |
jordaahh | 29:f70d927c3e11 | 669 | } |
jordaahh | 29:f70d927c3e11 | 670 | |
jordaahh | 29:f70d927c3e11 | 671 | |
jordaahh | 29:f70d927c3e11 | 672 | void deadTone() |
jordaahh | 29:f70d927c3e11 | 673 | { |
jordaahh | 29:f70d927c3e11 | 674 | int l = 0; |
jordaahh | 29:f70d927c3e11 | 675 | while(1) { |
jordaahh | 29:f70d927c3e11 | 676 | if(FLAG3==1) { |
jordaahh | 29:f70d927c3e11 | 677 | FLAG3 = 0; |
jordaahh | 29:f70d927c3e11 | 678 | buz.period(1/(frequency2[l])); // set PWM period |
jordaahh | 29:f70d927c3e11 | 679 | buz=0.2; |
jordaahh | 29:f70d927c3e11 | 680 | l++; |
jordaahh | 29:f70d927c3e11 | 681 | } |
jordaahh | 29:f70d927c3e11 | 682 | if( l > 6) { |
jordaahh | 29:f70d927c3e11 | 683 | break; |
jordaahh | 29:f70d927c3e11 | 684 | } |
jordaahh | 29:f70d927c3e11 | 685 | } |
jordaahh | 29:f70d927c3e11 | 686 | } |
jordaahh | 29:f70d927c3e11 | 687 | |
jordaahh | 29:f70d927c3e11 | 688 | |
jordaahh | 29:f70d927c3e11 | 689 | void scoreCheck() |
jordaahh | 29:f70d927c3e11 | 690 | { |
jordaahh | 29:f70d927c3e11 | 691 | int score1; |
jordaahh | 29:f70d927c3e11 | 692 | |
jordaahh | 29:f70d927c3e11 | 693 | FILE *fp2 = fopen("/local/score.txt", "r"); |
jordaahh | 29:f70d927c3e11 | 694 | fscanf (fp2,"%i",&score1); |
jordaahh | 30:e6f59801ea2a | 695 | fclose(fp2); |
jordaahh | 29:f70d927c3e11 | 696 | |
jordaahh | 29:f70d927c3e11 | 697 | if(score1 < score) { |
jordaahh | 30:e6f59801ea2a | 698 | writeDataToFile(); // if the score is bigger then the data is written to the file and overwrites the previous data |
jordaahh | 29:f70d927c3e11 | 699 | } |
jordaahh | 29:f70d927c3e11 | 700 | } |
jordaahh | 29:f70d927c3e11 | 701 | |
jordaahh | 29:f70d927c3e11 | 702 | |
jordaahh | 29:f70d927c3e11 | 703 | void flagForFlash() |
jordaahh | 29:f70d927c3e11 | 704 | { |
jordaahh | 29:f70d927c3e11 | 705 | flashFlag = 1; |
jordaahh | 29:f70d927c3e11 | 706 | } |
jordaahh | 29:f70d927c3e11 | 707 | |
jordaahh | 29:f70d927c3e11 | 708 | |
jordaahh | 29:f70d927c3e11 | 709 | void GameOverFlash() |
jordaahh | 29:f70d927c3e11 | 710 | { |
jordaahh | 29:f70d927c3e11 | 711 | int flash = 0; |
jordaahh | 29:f70d927c3e11 | 712 | while(1) { |
jordaahh | 30:e6f59801ea2a | 713 | if (flashFlag==1) { // flag equals one every second |
jordaahh | 30:e6f59801ea2a | 714 | flashFlag = 0; // flag is reset |
jordaahh | 30:e6f59801ea2a | 715 | lcd.printString("Game Over!",12,2); // print phrase |
jordaahh | 30:e6f59801ea2a | 716 | flash++; // adds one to counter |
jordaahh | 29:f70d927c3e11 | 717 | } |
jordaahh | 30:e6f59801ea2a | 718 | if (flash > 3) { // moves onto next function when counter gets to 3 |
jordaahh | 29:f70d927c3e11 | 719 | break; |
jordaahh | 29:f70d927c3e11 | 720 | } |
jordaahh | 29:f70d927c3e11 | 721 | } |
jordaahh | 29:f70d927c3e11 | 722 | } |
jordaahh | 29:f70d927c3e11 | 723 | |
jordaahh | 29:f70d927c3e11 | 724 | |
jordaahh | 29:f70d927c3e11 | 725 | void powerSave() |
jordaahh | 29:f70d927c3e11 | 726 | { |
jordaahh | 29:f70d927c3e11 | 727 | if(joystick.direction == CENTRE) { |
jordaahh | 29:f70d927c3e11 | 728 | if (flashFlag==1) { |
jordaahh | 29:f70d927c3e11 | 729 | flashFlag = 0; |
jordaahh | 29:f70d927c3e11 | 730 | sleepCounter++; |
jordaahh | 29:f70d927c3e11 | 731 | } |
jordaahh | 29:f70d927c3e11 | 732 | if(sleepCounter > 20) { |
jordaahh | 30:e6f59801ea2a | 733 | Sleep(); // put mbed into sleep mode |
jordaahh | 30:e6f59801ea2a | 734 | lcd.turnOff(); // turn LCD off |
jordaahh | 30:e6f59801ea2a | 735 | while(1){ |
jordaahh | 30:e6f59801ea2a | 736 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 737 | BFlag = 0; |
jordaahh | 30:e6f59801ea2a | 738 | lcd.init(); // turn LCD back on |
jordaahh | 29:f70d927c3e11 | 739 | sleepCounter = 0; |
jordaahh | 30:e6f59801ea2a | 740 | wait(0.5); |
jordaahh | 29:f70d927c3e11 | 741 | menu(); |
jordaahh | 30:e6f59801ea2a | 742 | } |
jordaahh | 30:e6f59801ea2a | 743 | } |
jordaahh | 29:f70d927c3e11 | 744 | } |
jordaahh | 29:f70d927c3e11 | 745 | |
jordaahh | 29:f70d927c3e11 | 746 | } else { |
jordaahh | 29:f70d927c3e11 | 747 | sleepCounter = 0; |
jordaahh | 29:f70d927c3e11 | 748 | } |
jordaahh | 29:f70d927c3e11 | 749 | } |
jordaahh | 29:f70d927c3e11 | 750 | |
jordaahh | 29:f70d927c3e11 | 751 | |
jordaahh | 29:f70d927c3e11 | 752 | void boundries() |
jordaahh | 29:f70d927c3e11 | 753 | { |
jordaahh | 30:e6f59801ea2a | 754 | if( j > 45) { |
jordaahh | 29:f70d927c3e11 | 755 | j = 45; |
jordaahh | 29:f70d927c3e11 | 756 | } |
jordaahh | 29:f70d927c3e11 | 757 | if( i > 81) { |
jordaahh | 29:f70d927c3e11 | 758 | i = 81; |
jordaahh | 29:f70d927c3e11 | 759 | } |
jordaahh | 29:f70d927c3e11 | 760 | if( j < 0) { |
jordaahh | 29:f70d927c3e11 | 761 | j = 0; |
jordaahh | 29:f70d927c3e11 | 762 | } |
jordaahh | 29:f70d927c3e11 | 763 | if( i < 0) { |
jordaahh | 29:f70d927c3e11 | 764 | i = 0; |
jordaahh | 29:f70d927c3e11 | 765 | } |
jordaahh | 29:f70d927c3e11 | 766 | } |
jordaahh | 29:f70d927c3e11 | 767 | |
jordaahh | 29:f70d927c3e11 | 768 | |
jordaahh | 29:f70d927c3e11 | 769 | void playerMovement() |
jordaahh | 29:f70d927c3e11 | 770 | { |
jordaahh | 29:f70d927c3e11 | 771 | |
jordaahh | 30:e6f59801ea2a | 772 | if (printFlag) { // if flag set, clear flag and implicate joystick functions |
jordaahh | 29:f70d927c3e11 | 773 | printFlag = 0; |
jordaahh | 29:f70d927c3e11 | 774 | /* check joystick direction */ |
jordaahh | 29:f70d927c3e11 | 775 | if (joystick.direction == UP) { |
jordaahh | 29:f70d927c3e11 | 776 | j--; |
jordaahh | 29:f70d927c3e11 | 777 | } |
jordaahh | 29:f70d927c3e11 | 778 | if (joystick.direction == DOWN) { |
jordaahh | 29:f70d927c3e11 | 779 | j++; |
jordaahh | 29:f70d927c3e11 | 780 | } |
jordaahh | 29:f70d927c3e11 | 781 | if (joystick.direction == LEFT) { |
jordaahh | 29:f70d927c3e11 | 782 | i++; |
jordaahh | 29:f70d927c3e11 | 783 | } |
jordaahh | 29:f70d927c3e11 | 784 | if (joystick.direction == RIGHT) { |
jordaahh | 29:f70d927c3e11 | 785 | i--; |
jordaahh | 29:f70d927c3e11 | 786 | } |
jordaahh | 29:f70d927c3e11 | 787 | if (joystick.direction == upRight) { |
jordaahh | 29:f70d927c3e11 | 788 | j--; |
jordaahh | 29:f70d927c3e11 | 789 | i--; |
jordaahh | 29:f70d927c3e11 | 790 | } |
jordaahh | 29:f70d927c3e11 | 791 | if (joystick.direction == downRight) { |
jordaahh | 29:f70d927c3e11 | 792 | j++; |
jordaahh | 29:f70d927c3e11 | 793 | i--; |
jordaahh | 29:f70d927c3e11 | 794 | } |
jordaahh | 29:f70d927c3e11 | 795 | if (joystick.direction == upLeft) { |
jordaahh | 29:f70d927c3e11 | 796 | j--; |
jordaahh | 29:f70d927c3e11 | 797 | i++; |
jordaahh | 29:f70d927c3e11 | 798 | } |
jordaahh | 29:f70d927c3e11 | 799 | if (joystick.direction == downLeft) { |
jordaahh | 29:f70d927c3e11 | 800 | j++; |
jordaahh | 29:f70d927c3e11 | 801 | i++; |
jordaahh | 29:f70d927c3e11 | 802 | } |
jordaahh | 29:f70d927c3e11 | 803 | if (joystick.direction == CENTRE) { |
jordaahh | 29:f70d927c3e11 | 804 | i=i; |
jordaahh | 29:f70d927c3e11 | 805 | j=j; |
jordaahh | 29:f70d927c3e11 | 806 | } |
jordaahh | 29:f70d927c3e11 | 807 | } |
jordaahh | 29:f70d927c3e11 | 808 | } |
jordaahh | 29:f70d927c3e11 | 809 | |
jordaahh | 29:f70d927c3e11 | 810 | |
jordaahh | 29:f70d927c3e11 | 811 | void fallingWalls() |
jordaahh | 29:f70d927c3e11 | 812 | { |
jordaahh | 30:e6f59801ea2a | 813 | lcd.drawLine(x,y,z,y,1); // draws a line at the top of the screen to symbolise a wall |
jordaahh | 30:e6f59801ea2a | 814 | lcd.drawLine(z+10,y,83,y,1); // there is a gap in the wall which is 10 pixels wide and the objective of the game is to pass through it |
jordaahh | 30:e6f59801ea2a | 815 | if(FLAG==1) { // the flag changes every 0.2 seconds |
jordaahh | 30:e6f59801ea2a | 816 | FLAG=0; |
jordaahh | 30:e6f59801ea2a | 817 | y++; // everytime the flag changes to one it is reset and the wall moves down by one pixel |
jordaahh | 30:e6f59801ea2a | 818 | } |
jordaahh | 30:e6f59801ea2a | 819 | if(y > 47) { // when the wall reaches the bottom a new wall is generated at the top |
jordaahh | 30:e6f59801ea2a | 820 | y = 0; |
jordaahh | 30:e6f59801ea2a | 821 | z = rand()%74; // the gap in the is moved to a random postion in the new wall |
jordaahh | 30:e6f59801ea2a | 822 | score++; // score increases by one everytime a wall falling from the top reaches the bottom of the screen |
jordaahh | 30:e6f59801ea2a | 823 | } |
jordaahh | 30:e6f59801ea2a | 824 | /* there are 6 levels of difficulty */ |
jordaahh | 30:e6f59801ea2a | 825 | if(( score > 1)&&(score < 5)) { |
jordaahh | 30:e6f59801ea2a | 826 | lcd.drawLine(a,b,d,b,1); |
jordaahh | 30:e6f59801ea2a | 827 | lcd.drawLine(d+10,b,83,b,1); |
jordaahh | 30:e6f59801ea2a | 828 | if(FLAG3==1) { |
jordaahh | 30:e6f59801ea2a | 829 | FLAG3=0; |
jordaahh | 30:e6f59801ea2a | 830 | b--; |
jordaahh | 29:f70d927c3e11 | 831 | } |
jordaahh | 30:e6f59801ea2a | 832 | } |
jordaahh | 30:e6f59801ea2a | 833 | if(b < 0) { |
jordaahh | 30:e6f59801ea2a | 834 | b = 47; |
jordaahh | 30:e6f59801ea2a | 835 | d = rand()%74; |
jordaahh | 30:e6f59801ea2a | 836 | } |
jordaahh | 30:e6f59801ea2a | 837 | if(( score > 5)&&(score < 9)) { |
jordaahh | 30:e6f59801ea2a | 838 | lcd.drawLine(f,g,f,h,1); |
jordaahh | 30:e6f59801ea2a | 839 | lcd.drawLine(f,h+10,f,47,1); |
jordaahh | 30:e6f59801ea2a | 840 | if(FLAG2==1) { |
jordaahh | 30:e6f59801ea2a | 841 | FLAG2=0; |
jordaahh | 30:e6f59801ea2a | 842 | f++; |
jordaahh | 29:f70d927c3e11 | 843 | } |
jordaahh | 30:e6f59801ea2a | 844 | } |
jordaahh | 30:e6f59801ea2a | 845 | if( f > 83) { |
jordaahh | 30:e6f59801ea2a | 846 | f = 0; |
jordaahh | 30:e6f59801ea2a | 847 | h = rand()%38; |
jordaahh | 30:e6f59801ea2a | 848 | } |
jordaahh | 30:e6f59801ea2a | 849 | if(( score > 10)&&(score < 15)) { |
jordaahh | 30:e6f59801ea2a | 850 | lcd.drawLine(q,w,q,e,1); |
jordaahh | 30:e6f59801ea2a | 851 | lcd.drawLine(q,e+10,q,47,1); |
jordaahh | 30:e6f59801ea2a | 852 | if(FLAG3==1) { |
jordaahh | 30:e6f59801ea2a | 853 | FLAG3=0; |
jordaahh | 30:e6f59801ea2a | 854 | q--; |
jordaahh | 29:f70d927c3e11 | 855 | } |
jordaahh | 30:e6f59801ea2a | 856 | } |
jordaahh | 30:e6f59801ea2a | 857 | if(q < 0) { |
jordaahh | 30:e6f59801ea2a | 858 | q = 83; |
jordaahh | 30:e6f59801ea2a | 859 | e = rand()%38; |
jordaahh | 30:e6f59801ea2a | 860 | } |
jordaahh | 30:e6f59801ea2a | 861 | if( score > 15) { |
jordaahh | 30:e6f59801ea2a | 862 | lcd.drawLine(q,w,q,e,1); |
jordaahh | 30:e6f59801ea2a | 863 | lcd.drawLine(q,e+10,q,47,1); |
jordaahh | 30:e6f59801ea2a | 864 | if(FLAG3==1) { |
jordaahh | 30:e6f59801ea2a | 865 | FLAG3=0; |
jordaahh | 30:e6f59801ea2a | 866 | q--; |
jordaahh | 29:f70d927c3e11 | 867 | } |
jordaahh | 30:e6f59801ea2a | 868 | } |
jordaahh | 30:e6f59801ea2a | 869 | if( score > 20) { |
jordaahh | 30:e6f59801ea2a | 870 | lcd.drawLine(a,b,d,b,1); |
jordaahh | 30:e6f59801ea2a | 871 | lcd.drawLine(d+10,b,83,b,1); |
jordaahh | 30:e6f59801ea2a | 872 | if(FLAG2==1) { |
jordaahh | 30:e6f59801ea2a | 873 | FLAG2=0; |
jordaahh | 30:e6f59801ea2a | 874 | b--; |
jordaahh | 29:f70d927c3e11 | 875 | } |
jordaahh | 30:e6f59801ea2a | 876 | } |
jordaahh | 30:e6f59801ea2a | 877 | } |
jordaahh | 30:e6f59801ea2a | 878 | |
jordaahh | 29:f70d927c3e11 | 879 | void instructions() |
jordaahh | 29:f70d927c3e11 | 880 | { |
jordaahh | 30:e6f59801ea2a | 881 | while(1) { |
jordaahh | 29:f70d927c3e11 | 882 | lcd.printString("Welcome :-)",9,0); |
jordaahh | 29:f70d927c3e11 | 883 | lcd.printString("Select using",6,1); |
jordaahh | 30:e6f59801ea2a | 884 | lcd.printString("joystickButton",0,2); |
jordaahh | 29:f70d927c3e11 | 885 | lcd.printString("Press >",27,4); |
jordaahh | 29:f70d927c3e11 | 886 | wait(0.5); |
jordaahh | 30:e6f59801ea2a | 887 | if(BFlag) { |
jordaahh | 30:e6f59801ea2a | 888 | BFlag = 0; // press joystick button to continue |
jordaahh | 29:f70d927c3e11 | 889 | clearCells(); |
jordaahh | 30:e6f59801ea2a | 890 | while(1) { |
jordaahh | 29:f70d927c3e11 | 891 | lcd.printString("Return to menu",0,0); |
jordaahh | 29:f70d927c3e11 | 892 | lcd.printString("by moving the",3,1); |
jordaahh | 29:f70d927c3e11 | 893 | lcd.printString("JS downward",9,2); |
jordaahh | 29:f70d927c3e11 | 894 | if(joystick.direction == DOWN) { // direct joystick down to continue |
jordaahh | 29:f70d927c3e11 | 895 | menu(); |
jordaahh | 29:f70d927c3e11 | 896 | break; |
jordaahh | 30:e6f59801ea2a | 897 | } |
jordaahh | 30:e6f59801ea2a | 898 | } |
jordaahh | 30:e6f59801ea2a | 899 | } |
jordaahh | 30:e6f59801ea2a | 900 | } |
jordaahh | 30:e6f59801ea2a | 901 | } |