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:
Fri May 01 17:13:05 2015 +0000
Revision:
21:a239f5a92464
Parent:
20:ef5e8840cb9a
Child:
22:49fa2e1e8f4b
100% finished. Need to do documentation

Who changed what in which revision?

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