Arcade style game on Nokia 5110 LCD with additional features. Includes game play song, high scores page and various settings.

Dependencies:   N5110 mbed

Committer:
jordaahh
Date:
Wed May 06 14:24:49 2015 +0000
Revision:
29:f70d927c3e11
Parent:
26:53ab8f8615dd
Child:
30:e6f59801ea2a
Fully complete. ready for publishing.

Who changed what in which revision?

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