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:
Mon May 11 13:24:29 2015 +0000
Revision:
31:9e843820d76e
Parent:
30:e6f59801ea2a
With reference to joystick

Who changed what in which revision?

UserRevisionLine numberNew 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 }