A retro gaming programme, designed for use on a portable embedded system. Incorporates power saving techniques.

Dependencies:   ConfigFile N5110 PowerControl beep mbed

Committer:
el13drt
Date:
Mon May 11 22:13:11 2015 +0000
Revision:
80:55c724c1286c
Parent:
79:a92239ce3b20
This is the final commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el13drt 0:a8bc3aac5f69 1 /**
el13drt 0:a8bc3aac5f69 2 @file main.cpp
el13drt 0:a8bc3aac5f69 3 @brief Program implementation
el13drt 80:55c724c1286c 4 @brief "Example code of how to read a joystick" courtesy of Craig A. Evans. Created: 7th March 2015.
el13drt 0:a8bc3aac5f69 5 */
el13drt 0:a8bc3aac5f69 6
el13drt 73:1b03202c987a 7 #include "PowerControl/PowerControl.h"//for sleep modes
el13drt 73:1b03202c987a 8 #include "PowerControl/EthernetPowerControl.h"//for Ethernet Power Down
el13drt 0:a8bc3aac5f69 9 #include "mbed.h"
el13drt 0:a8bc3aac5f69 10 #include "N5110.h"
el13drt 10:947d35365ab8 11 #include "beep.h"
el13drt 12:eedda6554615 12 #include "tower.h"
el13drt 0:a8bc3aac5f69 13 #include <ctime>
el13drt 0:a8bc3aac5f69 14
el13drt 77:b37c6a0d8758 15 ///writes to CFG file.
el13drt 55:bb4f6cc196c8 16 void write()
el13drt 77:b37c6a0d8758 17 {
el13drt 78:e2fc547c6b99 18 ///Sets a Key 1 and Value 1.
el13drt 69:a6eb73a1a571 19 if (!cfg.setValue("Open1", player1initials)) {//key/value
el13drt 69:a6eb73a1a571 20 error("Failure to set a value.\n");
el13drt 69:a6eb73a1a571 21 }
el13drt 78:e2fc547c6b99 22 ///Sets a Key 2 and Value 2.
el13drt 69:a6eb73a1a571 23 if (!cfg.setValue("Open2", player2initials)) {//key/value
el13drt 69:a6eb73a1a571 24 error("Failure to set a value.\n");
el13drt 69:a6eb73a1a571 25 }
el13drt 78:e2fc547c6b99 26 ///Sets a Key 3 and Value 3.
el13drt 69:a6eb73a1a571 27 if (!cfg.setValue("Open3", player3initials)) {//key/value
el13drt 54:8180eec1656d 28 error("Failure to set a value.\n");
el13drt 54:8180eec1656d 29 }
el13drt 62:827cda7a2663 30 ///If a file does not already exist, create one.
el13drt 62:827cda7a2663 31 ///If one already exits, append the file.
el13drt 62:827cda7a2663 32 if (!cfg.write("/local/towerMemory.cfg")) {//Write key and value to CFG file
el13drt 54:8180eec1656d 33 error("Failure to write a configuration file.\n");
el13drt 54:8180eec1656d 34 }
el13drt 55:bb4f6cc196c8 35 }
el13drt 54:8180eec1656d 36
el13drt 62:827cda7a2663 37 ///Reads CFG file.
el13drt 72:ade25d595dc9 38 void read()
el13drt 77:b37c6a0d8758 39 {
el13drt 62:827cda7a2663 40 //Checks if key matches.
el13drt 69:a6eb73a1a571 41 char *key1 = "Open1";
el13drt 69:a6eb73a1a571 42 char *key2 = "Open2";
el13drt 80:55c724c1286c 43 char *key3 = "Open3";
el13drt 79:a92239ce3b20 44
el13drt 79:a92239ce3b20 45 int count=0;
el13drt 54:8180eec1656d 46
el13drt 78:e2fc547c6b99 47 ///Checks Key for match, then reads Value - if read is unsuccessful it prints error message.
el13drt 54:8180eec1656d 48 if (!cfg.read("/local/towerMemory.cfg")) {
el13drt 54:8180eec1656d 49 error("Failure to read a configuration file.\n");
el13drt 54:8180eec1656d 50 }
el13drt 62:827cda7a2663 51 ///check file size - if size acceptable, prints buffer to location.
el13drt 69:a6eb73a1a571 52 if (cfg.getValue(key1, &player1initials[0], sizeof(player1initials))) {
el13drt 54:8180eec1656d 53 serial.printf("%s\n",player1initials);
el13drt 79:a92239ce3b20 54
el13drt 79:a92239ce3b20 55 count=10;//first possible character of score
el13drt 79:a92239ce3b20 56 highScore1=0;//make sure that multiplacation works correctly
el13drt 79:a92239ce3b20 57 while(1){
el13drt 79:a92239ce3b20 58 //if first iteration/not an empty score
el13drt 79:a92239ce3b20 59 if(highScore1!=0){
el13drt 79:a92239ce3b20 60 highScore1*=10;
el13drt 79:a92239ce3b20 61 }
el13drt 79:a92239ce3b20 62 //convert ASCII to int value
el13drt 79:a92239ce3b20 63 highScore1+=player1initials[count]-48;
el13drt 79:a92239ce3b20 64 //increment
el13drt 79:a92239ce3b20 65 count++;
el13drt 79:a92239ce3b20 66 //check to see if at end of string array
el13drt 79:a92239ce3b20 67 if(player1initials[count]==NULL){
el13drt 79:a92239ce3b20 68 break;
el13drt 79:a92239ce3b20 69 }
el13drt 79:a92239ce3b20 70 }
el13drt 79:a92239ce3b20 71 serial.printf("%i\n",highScore1);
el13drt 77:b37c6a0d8758 72 }
el13drt 69:a6eb73a1a571 73 //check file size - if size acceptable, prints buffer to location.
el13drt 69:a6eb73a1a571 74 if (cfg.getValue(key2, &player2initials[0], sizeof(player2initials))) {
el13drt 69:a6eb73a1a571 75 serial.printf("%s\n",player2initials);
el13drt 79:a92239ce3b20 76 count=10;
el13drt 79:a92239ce3b20 77 highScore2=0;
el13drt 79:a92239ce3b20 78 while(1){
el13drt 79:a92239ce3b20 79 if(highScore2!=0){
el13drt 79:a92239ce3b20 80 highScore2*=10;
el13drt 79:a92239ce3b20 81 }
el13drt 79:a92239ce3b20 82 highScore2+=player2initials[count]-48;
el13drt 79:a92239ce3b20 83 count++;
el13drt 79:a92239ce3b20 84 if(player2initials[count]==NULL){
el13drt 79:a92239ce3b20 85 break;
el13drt 79:a92239ce3b20 86 }
el13drt 79:a92239ce3b20 87 }
el13drt 79:a92239ce3b20 88 serial.printf("%i\n",highScore2);
el13drt 77:b37c6a0d8758 89 }
el13drt 69:a6eb73a1a571 90 //check file size - if size acceptable, prints buffer to location.
el13drt 69:a6eb73a1a571 91 if (cfg.getValue(key3, &player3initials[0], sizeof(player3initials))) {
el13drt 69:a6eb73a1a571 92 serial.printf("%s\n",player3initials);
el13drt 79:a92239ce3b20 93 count=10;
el13drt 79:a92239ce3b20 94 highScore3=0;
el13drt 79:a92239ce3b20 95 while(1){
el13drt 79:a92239ce3b20 96 if(highScore3!=0){
el13drt 79:a92239ce3b20 97 highScore3*=10;
el13drt 79:a92239ce3b20 98 }
el13drt 79:a92239ce3b20 99 highScore3+=player3initials[count]-48;
el13drt 79:a92239ce3b20 100 count++;
el13drt 79:a92239ce3b20 101 if(player3initials[count]==NULL){
el13drt 79:a92239ce3b20 102 break;
el13drt 79:a92239ce3b20 103 }
el13drt 80:55c724c1286c 104 }
el13drt 79:a92239ce3b20 105 serial.printf("%i\n",highScore3);
el13drt 69:a6eb73a1a571 106 }
el13drt 54:8180eec1656d 107 }
el13drt 54:8180eec1656d 108
el13drt 62:827cda7a2663 109 ///Struct declaration for storing alphabet arrays.
el13drt 53:a3077af736bb 110 struct State {
el13drt 53:a3077af736bb 111 char output1;
el13drt 53:a3077af736bb 112 char output2;
el13drt 53:a3077af736bb 113 char output3;
el13drt 53:a3077af736bb 114 int nextState[2];
el13drt 53:a3077af736bb 115 };
el13drt 53:a3077af736bb 116
el13drt 62:827cda7a2663 117 ///Assigns new identifier to Struct.
el13drt 53:a3077af736bb 118 typedef const struct State STYP;
el13drt 53:a3077af736bb 119
el13drt 62:827cda7a2663 120 ///Finite State Machine for Struct data members.
el13drt 53:a3077af736bb 121 STYP fsm[27] = {
el13drt 77:b37c6a0d8758 122
el13drt 62:827cda7a2663 123 ///Outputs 1,2 and 3 for Initial Arrays.
el13drt 53:a3077af736bb 124 {'A','A','A',{1,26}},
el13drt 53:a3077af736bb 125 {'B','B','B',{2,0}},
el13drt 53:a3077af736bb 126 {'C','C','C',{3,1}},
el13drt 53:a3077af736bb 127 {'D','D','D',{4,2}},
el13drt 53:a3077af736bb 128 {'E','E','E',{5,3}},
el13drt 53:a3077af736bb 129 {'F','F','F',{6,4}},
el13drt 53:a3077af736bb 130 {'G','G','G',{7,5}},
el13drt 53:a3077af736bb 131 {'H','H','H',{8,6}},
el13drt 53:a3077af736bb 132 {'I','I','I',{9,7}},
el13drt 53:a3077af736bb 133 {'J','J','J',{10,8}},
el13drt 53:a3077af736bb 134 {'K','K','K',{11,9}},
el13drt 53:a3077af736bb 135 {'L','L','L',{12,10}},
el13drt 53:a3077af736bb 136 {'M','M','M',{13,11}},
el13drt 53:a3077af736bb 137 {'N','N','N',{14,12}},
el13drt 53:a3077af736bb 138 {'O','O','O',{15,13}},
el13drt 53:a3077af736bb 139 {'P','P','P',{16,14}},
el13drt 53:a3077af736bb 140 {'Q','Q','Q',{17,15}},
el13drt 53:a3077af736bb 141 {'R','R','R',{18,16}},
el13drt 53:a3077af736bb 142 {'S','S','S',{19,17}},
el13drt 53:a3077af736bb 143 {'T','T','T',{20,18}},
el13drt 53:a3077af736bb 144 {'U','U','U',{21,19}},
el13drt 53:a3077af736bb 145 {'V','V','V',{22,20}},
el13drt 53:a3077af736bb 146 {'W','W','W',{23,21}},
el13drt 53:a3077af736bb 147 {'X','X','X',{24,22}},
el13drt 53:a3077af736bb 148 {'Y','Y','Y',{25,23}},
el13drt 53:a3077af736bb 149 {'Z','Z','Z',{26,24}},
el13drt 53:a3077af736bb 150 {'.','.','.',{0,25}},
el13drt 53:a3077af736bb 151 };
el13drt 53:a3077af736bb 152
el13drt 62:827cda7a2663 153 ///Creates enumerated type (0,1,2,3 etc. for direction).
el13drt 53:a3077af736bb 154 enum DirectionName {
el13drt 53:a3077af736bb 155 UP,
el13drt 53:a3077af736bb 156 DOWN,
el13drt 53:a3077af736bb 157 LEFT,
el13drt 53:a3077af736bb 158 RIGHT,
el13drt 53:a3077af736bb 159 CENTRE,
el13drt 53:a3077af736bb 160 UNKNOWN
el13drt 53:a3077af736bb 161 };
el13drt 53:a3077af736bb 162
el13drt 62:827cda7a2663 163 ///Struct for Joystick.
el13drt 53:a3077af736bb 164 typedef struct JoyStick Joystick;
el13drt 53:a3077af736bb 165 struct JoyStick {
el13drt 53:a3077af736bb 166 float x;//current x value
el13drt 53:a3077af736bb 167 float x0;//'centred' x value
el13drt 53:a3077af736bb 168 float y;//current y value
el13drt 53:a3077af736bb 169 float y0;//'centred' y value
el13drt 53:a3077af736bb 170 int button;//button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
el13drt 53:a3077af736bb 171 DirectionName direction;//current direction
el13drt 53:a3077af736bb 172 };
el13drt 53:a3077af736bb 173
el13drt 78:e2fc547c6b99 174 ///create struct variable
el13drt 53:a3077af736bb 175 Joystick joystick;
el13drt 53:a3077af736bb 176
el13drt 78:e2fc547c6b99 177 ///Called when timerA expires. If buttonA is pressed - set flag A.
el13drt 53:a3077af736bb 178 void timerExpiredA()
el13drt 53:a3077af736bb 179 {
el13drt 78:e2fc547c6b99 180 ///Includes backlight reset for user input.
el13drt 76:c11cb774bd27 181 if((deBounce1.read_ms()>=95)&&(buttonA == 1)) {
el13drt 53:a3077af736bb 182 buttonFlagA = 1;
el13drt 66:d5174aa5839d 183 lcd.setBrightness(1.0);
el13drt 53:a3077af736bb 184 serial.printf("flagA set\n");
el13drt 78:e2fc547c6b99 185 deBounce1.reset();
el13drt 78:e2fc547c6b99 186 ///Reset value for debounce timer
el13drt 53:a3077af736bb 187 }
el13drt 53:a3077af736bb 188 }
el13drt 53:a3077af736bb 189
el13drt 78:e2fc547c6b99 190 ///Called when timer expires. If buttonB is pressed - Set flag B.
el13drt 53:a3077af736bb 191 void timerExpiredB()
el13drt 53:a3077af736bb 192 {
el13drt 78:e2fc547c6b99 193 ///Includes backlight reset for user input.
el13drt 76:c11cb774bd27 194 if((deBounce2.read_ms()>=95)&&(buttonB == 1)) {
el13drt 53:a3077af736bb 195 buttonFlagB = 1;
el13drt 66:d5174aa5839d 196 lcd.setBrightness(1.0);
el13drt 53:a3077af736bb 197 serial.printf("flagB set\n");
el13drt 76:c11cb774bd27 198 deBounce2.reset();//reset timer
el13drt 78:e2fc547c6b99 199 ///Resets value for debounce timer
el13drt 53:a3077af736bb 200 }
el13drt 53:a3077af736bb 201 }
el13drt 53:a3077af736bb 202
el13drt 62:827cda7a2663 203 ///Randomises initial co-ordinates for falling hazards.
el13drt 53:a3077af736bb 204 void randomise()
el13drt 53:a3077af736bb 205 {
el13drt 78:e2fc547c6b99 206 ///Creates initial seed for randomisation.
el13drt 53:a3077af736bb 207 srand (time(NULL));//initial seed for randomisation
el13drt 53:a3077af736bb 208
el13drt 53:a3077af736bb 209 //initial random x co-ordinates
el13drt 53:a3077af736bb 210 //for falling hazards
el13drt 53:a3077af736bb 211 //(values between 3 and 76)
el13drt 53:a3077af736bb 212 randX1 = rand() % 74 + 5;
el13drt 53:a3077af736bb 213 randX2 = rand() % 74 + 5;
el13drt 53:a3077af736bb 214 randX3 = rand() % 74 + 5;
el13drt 53:a3077af736bb 215 randX4 = rand() % 74 + 5;
el13drt 53:a3077af736bb 216 randX5 = rand() % 74 + 5;
el13drt 53:a3077af736bb 217 randX6 = rand() % 74 + 5;
el13drt 53:a3077af736bb 218 }
el13drt 53:a3077af736bb 219
el13drt 62:827cda7a2663 220 ///Draws the games static background.
el13drt 53:a3077af736bb 221 void drawBackground()
el13drt 53:a3077af736bb 222 {
el13drt 53:a3077af736bb 223 //x, y, w, h, fill - draw ground
el13drt 53:a3077af736bb 224 lcd.drawRect(0,47,84,0,1);
el13drt 53:a3077af736bb 225 //x, y, w, h, fill - draw left wall
el13drt 53:a3077af736bb 226 lcd.drawRect(2,0,0,47,1);
el13drt 53:a3077af736bb 227 //left wall - brick line 1
el13drt 53:a3077af736bb 228 lcd.drawLine(1,1,1,48,2);
el13drt 53:a3077af736bb 229 //left wall - brick line 2
el13drt 53:a3077af736bb 230 lcd.drawLine(0,0,0,48,2);
el13drt 53:a3077af736bb 231
el13drt 53:a3077af736bb 232 //x, y, w, h, fill - draw right wall
el13drt 53:a3077af736bb 233 lcd.drawRect(81,0,0,47,1);
el13drt 53:a3077af736bb 234 //right wall - brick line 1
el13drt 53:a3077af736bb 235 lcd.drawLine(82,0,82,48,2);
el13drt 53:a3077af736bb 236 //right wall - brick line 2
el13drt 53:a3077af736bb 237 lcd.drawLine(83,1,83,48,2);
el13drt 53:a3077af736bb 238
el13drt 53:a3077af736bb 239 lcd.refresh();
el13drt 53:a3077af736bb 240 }
el13drt 53:a3077af736bb 241
el13drt 78:e2fc547c6b99 242 ///Draws the Introduction screen.
el13drt 53:a3077af736bb 243 void drawWelcome()
el13drt 53:a3077af736bb 244 {
el13drt 53:a3077af736bb 245 //bottom border
el13drt 53:a3077af736bb 246 lcd.drawRect(0,44,84,2,1);
el13drt 53:a3077af736bb 247 //top border
el13drt 53:a3077af736bb 248 lcd.drawRect(0,1,84,2,1);
el13drt 53:a3077af736bb 249 lcd.refresh();
el13drt 53:a3077af736bb 250
el13drt 53:a3077af736bb 251 //print initials 'DRT'
el13drt 53:a3077af736bb 252 lcd.printChar('D',30,2);
el13drt 53:a3077af736bb 253 wait(0.6);
el13drt 53:a3077af736bb 254 lcd.printChar('R',37,2);
el13drt 53:a3077af736bb 255 wait(0.6);
el13drt 53:a3077af736bb 256 lcd.printChar('T',44,2);
el13drt 53:a3077af736bb 257 wait(0.6);
el13drt 53:a3077af736bb 258
el13drt 53:a3077af736bb 259 //print 'presents...'
el13drt 53:a3077af736bb 260 lcd.printString("presents...",8,3);
el13drt 53:a3077af736bb 261 wait(1.0);
el13drt 53:a3077af736bb 262
el13drt 53:a3077af736bb 263 //dramatic flashing
el13drt 53:a3077af736bb 264 buzzer.beep(5000,0.3);
el13drt 53:a3077af736bb 265 lcd.inverseMode();
el13drt 53:a3077af736bb 266 wait(0.2);
el13drt 53:a3077af736bb 267 lcd.normalMode();
el13drt 53:a3077af736bb 268 wait(0.2);
el13drt 53:a3077af736bb 269 buzzer.beep(5000,0.3);
el13drt 53:a3077af736bb 270 lcd.inverseMode();
el13drt 53:a3077af736bb 271 wait(0.2);
el13drt 53:a3077af736bb 272 lcd.normalMode();
el13drt 53:a3077af736bb 273 wait(1.0);
el13drt 53:a3077af736bb 274
el13drt 53:a3077af736bb 275 //more dramatic flashing
el13drt 53:a3077af736bb 276 buzzer.beep(5000,0.3);
el13drt 53:a3077af736bb 277 lcd.inverseMode();
el13drt 53:a3077af736bb 278 wait(0.2);
el13drt 53:a3077af736bb 279 lcd.normalMode();
el13drt 53:a3077af736bb 280 wait(0.2);
el13drt 53:a3077af736bb 281 buzzer.beep(5000,0.3);
el13drt 53:a3077af736bb 282 lcd.inverseMode();
el13drt 53:a3077af736bb 283 wait(0.2);
el13drt 53:a3077af736bb 284 lcd.normalMode();
el13drt 53:a3077af736bb 285 wait(0.6);
el13drt 53:a3077af736bb 286 }
el13drt 53:a3077af736bb 287
el13drt 62:827cda7a2663 288 ///Draws Pixel Ninja.
el13drt 53:a3077af736bb 289 void drawNinja()
el13drt 53:a3077af736bb 290 {
el13drt 53:a3077af736bb 291 //x, y, w, h, fill - left leg
el13drt 53:a3077af736bb 292 lcd.drawRect(a1,39,0,7,1);
el13drt 53:a3077af736bb 293 //right leg
el13drt 53:a3077af736bb 294 lcd.drawRect(a2,39,0,7,1);
el13drt 53:a3077af736bb 295 //centre stick
el13drt 53:a3077af736bb 296 lcd.drawRect(a3,37,0,7,1);
el13drt 59:be7a31cb8cd1 297 //back of the head
el13drt 60:681bc941b94d 298 lcd.drawRect(a4,33,0,4,1);
el13drt 59:be7a31cb8cd1 299 //top of the head
el13drt 60:681bc941b94d 300 lcd.drawRect(a5,33,4,0,1);
el13drt 59:be7a31cb8cd1 301 //jaw
el13drt 60:681bc941b94d 302 lcd.drawRect(a6,38,2,0,1);
el13drt 53:a3077af736bb 303 //right shoulder
el13drt 60:681bc941b94d 304 lcd.drawRect(a7,40,1,0,1);
el13drt 53:a3077af736bb 305 //left shoulder
el13drt 60:681bc941b94d 306 lcd.drawRect(a8,40,1,0,1);
el13drt 53:a3077af736bb 307 //left arm
el13drt 60:681bc941b94d 308 lcd.drawRect(a9,41,0,1,1);
el13drt 53:a3077af736bb 309 //right arm
el13drt 60:681bc941b94d 310 lcd.drawRect(a10,41,0,1,1);
el13drt 53:a3077af736bb 311 //right eye
el13drt 60:681bc941b94d 312 lcd.drawRect(a11,35,0,0,1);
el13drt 53:a3077af736bb 313 //mouth piece
el13drt 60:681bc941b94d 314 lcd.drawRect(a12,37,0,0,1);
el13drt 53:a3077af736bb 315 //left eye
el13drt 60:681bc941b94d 316 lcd.drawRect(a13,35,0,0,1);
el13drt 53:a3077af736bb 317 //sword handle
el13drt 60:681bc941b94d 318 lcd.drawRect(a14,36,0,0,1);
el13drt 60:681bc941b94d 319 lcd.drawRect(a15,37,0,0,1);
el13drt 60:681bc941b94d 320 lcd.drawRect(a16,38,0,0,1);
el13drt 77:b37c6a0d8758 321
el13drt 53:a3077af736bb 322 lcd.refresh();
el13drt 53:a3077af736bb 323 }
el13drt 53:a3077af736bb 324
el13drt 62:827cda7a2663 325 ///Implements Pixel Ninja's boundary conditions.
el13drt 53:a3077af736bb 326 void ninjaBoundaries()
el13drt 53:a3077af736bb 327 {
el13drt 78:e2fc547c6b99 328 ///If ninja exceeds max boundary, Ninja equals max boundary.
el13drt 60:681bc941b94d 329 //right eye
el13drt 60:681bc941b94d 330 if(a11 > 80 )
el13drt 60:681bc941b94d 331 a11 = 80;
el13drt 60:681bc941b94d 332 //mouth piece
el13drt 60:681bc941b94d 333 if(a12 > 80)
el13drt 60:681bc941b94d 334 a12 = 80;
el13drt 60:681bc941b94d 335 //right arm
el13drt 60:681bc941b94d 336 if(a10> 80)
el13drt 60:681bc941b94d 337 a10 = 80;
el13drt 60:681bc941b94d 338 //right shoulder
el13drt 60:681bc941b94d 339 if(a7 > 79)
el13drt 77:b37c6a0d8758 340 a7 = 79;
el13drt 77:b37c6a0d8758 341 //right leg
el13drt 60:681bc941b94d 342 if(a2 > 78)
el13drt 60:681bc941b94d 343 a2 = 78;
el13drt 77:b37c6a0d8758 344 //jaw
el13drt 60:681bc941b94d 345 if(a6 > 78)
el13drt 60:681bc941b94d 346 a6 = 78;
el13drt 60:681bc941b94d 347 //left eye
el13drt 60:681bc941b94d 348 if(a13 > 78)
el13drt 77:b37c6a0d8758 349 a13 = 78;
el13drt 77:b37c6a0d8758 350 //centre
el13drt 60:681bc941b94d 351 if(a3 > 77)
el13drt 60:681bc941b94d 352 a3 = 77;
el13drt 60:681bc941b94d 353 //back of the head
el13drt 60:681bc941b94d 354 if(a4 > 76 )
el13drt 77:b37c6a0d8758 355 a4= 76;
el13drt 77:b37c6a0d8758 356 //topf of the head
el13drt 77:b37c6a0d8758 357 if(a5 > 76)
el13drt 77:b37c6a0d8758 358 a5 = 76;
el13drt 60:681bc941b94d 359 //left leg
el13drt 60:681bc941b94d 360 if(a1>76)
el13drt 77:b37c6a0d8758 361 a1 = 76;
el13drt 60:681bc941b94d 362 //sword
el13drt 60:681bc941b94d 363 if(a16>75)
el13drt 77:b37c6a0d8758 364 a16 = 75;
el13drt 60:681bc941b94d 365 //left shoulder
el13drt 60:681bc941b94d 366 if(a8 >74)
el13drt 77:b37c6a0d8758 367 a8 = 74;
el13drt 60:681bc941b94d 368 //left arm
el13drt 60:681bc941b94d 369 if(a9>74)
el13drt 77:b37c6a0d8758 370 a9 = 74;
el13drt 60:681bc941b94d 371 //sword
el13drt 60:681bc941b94d 372 if(a15>74)
el13drt 77:b37c6a0d8758 373 a15 = 74;
el13drt 60:681bc941b94d 374 //sword
el13drt 60:681bc941b94d 375 if(a14 > 73)
el13drt 77:b37c6a0d8758 376 a14 = 73;
el13drt 77:b37c6a0d8758 377
el13drt 60:681bc941b94d 378 //right eye
el13drt 60:681bc941b94d 379 if(a11 < 5 )
el13drt 60:681bc941b94d 380 a11 = 5;
el13drt 60:681bc941b94d 381 //mouth piece
el13drt 60:681bc941b94d 382 if(a12 < 3)
el13drt 60:681bc941b94d 383 a12 = 3;
el13drt 60:681bc941b94d 384 //right arm
el13drt 60:681bc941b94d 385 if(a10< 9)
el13drt 60:681bc941b94d 386 a10 = 9;
el13drt 60:681bc941b94d 387 //right shoulder
el13drt 60:681bc941b94d 388 if(a7 < 8)
el13drt 77:b37c6a0d8758 389 a7 = 8;
el13drt 77:b37c6a0d8758 390 //right leg
el13drt 60:681bc941b94d 391 if(a2 < 7)
el13drt 60:681bc941b94d 392 a2 = 7;
el13drt 77:b37c6a0d8758 393 //jaw
el13drt 60:681bc941b94d 394 if(a6 < 3)
el13drt 60:681bc941b94d 395 a6 = 3;
el13drt 60:681bc941b94d 396 //left eye
el13drt 60:681bc941b94d 397 if(a13 < 3)
el13drt 77:b37c6a0d8758 398 a13 = 3;
el13drt 77:b37c6a0d8758 399 //centre
el13drt 60:681bc941b94d 400 if(a3 < 6)
el13drt 60:681bc941b94d 401 a3 = 6;
el13drt 60:681bc941b94d 402 //back of the head
el13drt 60:681bc941b94d 403 if(a4 < 7)
el13drt 77:b37c6a0d8758 404 a4= 7;
el13drt 77:b37c6a0d8758 405 //top of the head
el13drt 77:b37c6a0d8758 406 if(a5 < 3)
el13drt 77:b37c6a0d8758 407 a5 = 3;
el13drt 60:681bc941b94d 408 //left leg
el13drt 60:681bc941b94d 409 if(a1 < 5)
el13drt 77:b37c6a0d8758 410 a1 = 5;
el13drt 60:681bc941b94d 411 //sword
el13drt 60:681bc941b94d 412 if(a16 < 8)
el13drt 77:b37c6a0d8758 413 a16 = 8;
el13drt 60:681bc941b94d 414 //left shoulder
el13drt 60:681bc941b94d 415 if(a8 < 3)
el13drt 77:b37c6a0d8758 416 a8 = 3;
el13drt 60:681bc941b94d 417 //left arm
el13drt 60:681bc941b94d 418 if(a9 < 3)
el13drt 77:b37c6a0d8758 419 a9 = 3;
el13drt 60:681bc941b94d 420 //sword
el13drt 60:681bc941b94d 421 if(a15 < 9)
el13drt 77:b37c6a0d8758 422 a15 = 9;
el13drt 60:681bc941b94d 423 //sword
el13drt 60:681bc941b94d 424 if(a14 < 10)
el13drt 77:b37c6a0d8758 425 a14 = 10;
el13drt 78:e2fc547c6b99 426 ///If ninja falls below min boundary, Ninja equals min boundary.
el13drt 53:a3077af736bb 427 }
el13drt 53:a3077af736bb 428
el13drt 78:e2fc547c6b99 429 ///Resets configuration values for the game.
el13drt 53:a3077af736bb 430 void resetGame()
el13drt 78:e2fc547c6b99 431 {
el13drt 78:e2fc547c6b99 432 ///Resets Global variables for pixelNinja movement.
el13drt 60:681bc941b94d 433 a1 = 22;
el13drt 60:681bc941b94d 434 a2 = 24;
el13drt 60:681bc941b94d 435 a3 = 23;
el13drt 60:681bc941b94d 436 a4 = 22;
el13drt 60:681bc941b94d 437 a5 = 22;
el13drt 60:681bc941b94d 438 a6 = 24;
el13drt 60:681bc941b94d 439 a7 = 25;
el13drt 60:681bc941b94d 440 a8 = 20;
el13drt 60:681bc941b94d 441 a9 = 20;
el13drt 60:681bc941b94d 442 a10 = 26;
el13drt 60:681bc941b94d 443 a11 = 26;
el13drt 60:681bc941b94d 444 a12 = 26;
el13drt 60:681bc941b94d 445 a13 = 24;
el13drt 60:681bc941b94d 446 a14 = 19;
el13drt 60:681bc941b94d 447 a15 = 20;
el13drt 60:681bc941b94d 448 a16 = 21;
el13drt 78:e2fc547c6b99 449
el13drt 78:e2fc547c6b99 450 ///Resets current score.
el13drt 53:a3077af736bb 451 score = 0;
el13drt 53:a3077af736bb 452
el13drt 53:a3077af736bb 453 //in this case the X values are given a
el13drt 53:a3077af736bb 454 //new random variable each time the player
el13drt 53:a3077af736bb 455 //dies, exits or starts a new game
el13drt 78:e2fc547c6b99 456
el13drt 78:e2fc547c6b99 457 ///Randomises X co-ordinates.
el13drt 64:715fb5a1e58b 458 randomise();
el13drt 78:e2fc547c6b99 459
el13drt 78:e2fc547c6b99 460 ///Resets Y co-ordinates.
el13drt 53:a3077af736bb 461 randY1 = 0;
el13drt 53:a3077af736bb 462 randY2 = 0;
el13drt 53:a3077af736bb 463 randY3 = 0;
el13drt 53:a3077af736bb 464 randY4 = 0;
el13drt 53:a3077af736bb 465 randY5 = 0;
el13drt 53:a3077af736bb 466 randY6 = 0;
el13drt 78:e2fc547c6b99 467
el13drt 78:e2fc547c6b99 468 ///Clears screen.
el13drt 53:a3077af736bb 469 lcd.clear();
el13drt 53:a3077af736bb 470 }
el13drt 53:a3077af736bb 471
el13drt 62:827cda7a2663 472 ///Draws falling hazards.
el13drt 53:a3077af736bb 473 void drawHazards()
el13drt 53:a3077af736bb 474 {
el13drt 53:a3077af736bb 475 //X, Y, radius, fill
el13drt 53:a3077af736bb 476 lcd.drawCircle(randX1,randY1,2,1);
el13drt 53:a3077af736bb 477 lcd.drawCircle(randX2,randY2,2,1);
el13drt 53:a3077af736bb 478 lcd.drawCircle(randX3,randY3,2,1);
el13drt 53:a3077af736bb 479 lcd.drawCircle(randX4,randY4,2,1);
el13drt 53:a3077af736bb 480 lcd.drawCircle(randX5,randY5,2,1);
el13drt 53:a3077af736bb 481 lcd.drawCircle(randX6,randY6,2,1);
el13drt 78:e2fc547c6b99 482
el13drt 53:a3077af736bb 483 lcd.refresh();
el13drt 53:a3077af736bb 484 }
el13drt 53:a3077af736bb 485
el13drt 62:827cda7a2663 486 ///Increments the hazards to make them "Fall".
el13drt 53:a3077af736bb 487 void hazardFall()
el13drt 53:a3077af736bb 488 {
el13drt 78:e2fc547c6b99 489 ///Increments values by chosen difficulty.
el13drt 53:a3077af736bb 490 randY1 = randY1 += fall;
el13drt 53:a3077af736bb 491 randY2 = randY2 += fall;
el13drt 53:a3077af736bb 492 randY3 = randY3 += fall;
el13drt 53:a3077af736bb 493 randY4 = randY4 += fall;
el13drt 53:a3077af736bb 494 randY5 = randY5 += fall;
el13drt 53:a3077af736bb 495 randY6 = randY6 += fall;
el13drt 53:a3077af736bb 496
el13drt 78:e2fc547c6b99 497 ///Loops objects once they've hit the floor.
el13drt 53:a3077af736bb 498 if (randY1>=48)
el13drt 53:a3077af736bb 499 randY1=0;
el13drt 53:a3077af736bb 500
el13drt 53:a3077af736bb 501 if (randY2>=48)
el13drt 53:a3077af736bb 502 randY2=0;
el13drt 53:a3077af736bb 503
el13drt 53:a3077af736bb 504 if (randY3>=48)
el13drt 53:a3077af736bb 505 randY3=0;
el13drt 53:a3077af736bb 506
el13drt 53:a3077af736bb 507 if (randY4>=48)
el13drt 53:a3077af736bb 508 randY4=0;
el13drt 53:a3077af736bb 509
el13drt 53:a3077af736bb 510 if (randY5>=48)
el13drt 53:a3077af736bb 511 randY5=0;
el13drt 53:a3077af736bb 512
el13drt 53:a3077af736bb 513 //each time the objects loop, a new pseudo random value
el13drt 53:a3077af736bb 514 //is assigned to the global variables (randX) to
el13drt 53:a3077af736bb 515 //randomise their positions
el13drt 78:e2fc547c6b99 516
el13drt 78:e2fc547c6b99 517 ///Assigns new random X co-ordinate once looped.
el13drt 53:a3077af736bb 518 if (randY6>=48) {
el13drt 53:a3077af736bb 519 randY6=0;
el13drt 78:e2fc547c6b99 520 ///Incements current score with each wave of hazards.
el13drt 53:a3077af736bb 521 score = score++;//increment score by 1 after each wave of hazards
el13drt 64:715fb5a1e58b 522 randomise();//randomise x co-ordinates again
el13drt 53:a3077af736bb 523 }
el13drt 53:a3077af736bb 524 }
el13drt 53:a3077af736bb 525
el13drt 62:827cda7a2663 526 ///Clears old pixels and keeps set pixels.
el13drt 53:a3077af736bb 527 void startrek()
el13drt 53:a3077af736bb 528 {
el13drt 78:e2fc547c6b99 529 ///Loops thorugh screen pixel by pixel.
el13drt 53:a3077af736bb 530 for (int i=3; i<81; i++)//loops through rows
el13drt 53:a3077af736bb 531 for (int j=0; j<47; j++)
el13drt 53:a3077af736bb 532 if (cells[i][j]) {//if there's a pixel then keep it
el13drt 53:a3077af736bb 533 lcd.setPixel(i,j);
el13drt 53:a3077af736bb 534 } else {
el13drt 53:a3077af736bb 535 lcd.clearPixel(i,j);//else remove the old ones
el13drt 53:a3077af736bb 536 }
el13drt 53:a3077af736bb 537 lcd.refresh();
el13drt 53:a3077af736bb 538 }
el13drt 53:a3077af736bb 539
el13drt 62:827cda7a2663 540 ///Clears old cursor, sets new one.
el13drt 53:a3077af736bb 541 void refreshCursor1()
el13drt 53:a3077af736bb 542 {
el13drt 78:e2fc547c6b99 543 ///Loops through select part of the screen.
el13drt 53:a3077af736bb 544 for (int i=70; i<80; i++)//loops through rows
el13drt 53:a3077af736bb 545 for (int j=17; j<25; j++)
el13drt 53:a3077af736bb 546 if (cells[i][j]) {//if there's a pixel then keep it
el13drt 53:a3077af736bb 547 lcd.setPixel(i,j);
el13drt 53:a3077af736bb 548 } else {
el13drt 53:a3077af736bb 549 lcd.clearPixel(i,j);//else remove the old ones
el13drt 53:a3077af736bb 550 }
el13drt 53:a3077af736bb 551 lcd.refresh();
el13drt 53:a3077af736bb 552 }
el13drt 53:a3077af736bb 553
el13drt 62:827cda7a2663 554 ///Clears old cursor, sets new one.
el13drt 53:a3077af736bb 555 void refreshCursor2()
el13drt 53:a3077af736bb 556 {
el13drt 78:e2fc547c6b99 557 ///Loops though select part of the screen.
el13drt 53:a3077af736bb 558 for (int i=70; i<80; i++)//loops through rows
el13drt 53:a3077af736bb 559 for (int j=25; j<32; j++)
el13drt 53:a3077af736bb 560 if (cells[i][j]) {//if there's a pixel then keep it
el13drt 53:a3077af736bb 561 lcd.setPixel(i,j);
el13drt 53:a3077af736bb 562 } else {
el13drt 53:a3077af736bb 563 lcd.clearPixel(i,j);//else remove the old ones
el13drt 53:a3077af736bb 564 }
el13drt 53:a3077af736bb 565 lcd.refresh();
el13drt 53:a3077af736bb 566 }
el13drt 53:a3077af736bb 567
el13drt 62:827cda7a2663 568 ///Clears old cursor, sets new one.
el13drt 53:a3077af736bb 569 void refreshCursor3()
el13drt 53:a3077af736bb 570 {
el13drt 78:e2fc547c6b99 571 ///Loops through select part of the screen.
el13drt 53:a3077af736bb 572 for (int i=70; i<80; i++)//loops through rows
el13drt 53:a3077af736bb 573 for (int j=32; j<40; j++)
el13drt 53:a3077af736bb 574 if (cells[i][j]) {//if there's a pixel then keep it
el13drt 53:a3077af736bb 575 lcd.setPixel(i,j);
el13drt 53:a3077af736bb 576 } else {
el13drt 53:a3077af736bb 577 lcd.clearPixel(i,j);//else remove the old ones
el13drt 53:a3077af736bb 578 }
el13drt 53:a3077af736bb 579 lcd.refresh();
el13drt 53:a3077af736bb 580 }
el13drt 53:a3077af736bb 581
el13drt 62:827cda7a2663 582 ///Creates buzzer audible/LED to light when either button is pressed.
el13drt 53:a3077af736bb 583 void actionButtons()
el13drt 53:a3077af736bb 584 {
el13drt 78:e2fc547c6b99 585 ///If FX is on emit beep and LED flash, else just flash.
el13drt 53:a3077af736bb 586 if((FX == 0)&&(buttonA||buttonB)) {
el13drt 53:a3077af736bb 587 ledA = 1;
el13drt 53:a3077af736bb 588 buzzer.beep(1500,0.3);
el13drt 53:a3077af736bb 589 }
el13drt 53:a3077af736bb 590 if (buttonA || buttonB) {
el13drt 53:a3077af736bb 591 ledA = 1;
el13drt 53:a3077af736bb 592 } else {
el13drt 53:a3077af736bb 593 ledA = 0;
el13drt 53:a3077af736bb 594 }
el13drt 53:a3077af736bb 595 }
el13drt 53:a3077af736bb 596
el13drt 62:827cda7a2663 597 ///Implements Joystick navigation for main menu.
el13drt 53:a3077af736bb 598 void mainMenu(int& mainOption)
el13drt 53:a3077af736bb 599 {
el13drt 78:e2fc547c6b99 600 ///Includes actionButtons();
el13drt 53:a3077af736bb 601 actionButtons();//set audible/light for button
el13drt 53:a3077af736bb 602
el13drt 53:a3077af736bb 603 if (printFlag) {//if flag set, clear flag and print joystick values to serial port
el13drt 53:a3077af736bb 604 printFlag = 0;
el13drt 53:a3077af736bb 605
el13drt 53:a3077af736bb 606 //option up
el13drt 53:a3077af736bb 607 if (joystick.direction == UP) {
el13drt 53:a3077af736bb 608 serial.printf(" UP\n");
el13drt 53:a3077af736bb 609 mainOption = mainOption--;
el13drt 53:a3077af736bb 610 if (mainOption < 0)mainOption = 0;
el13drt 53:a3077af736bb 611 }
el13drt 53:a3077af736bb 612 //option down
el13drt 53:a3077af736bb 613 if (joystick.direction == DOWN) {
el13drt 53:a3077af736bb 614 serial.printf(" DOWN\n");
el13drt 53:a3077af736bb 615 mainOption = mainOption++;
el13drt 53:a3077af736bb 616 if (mainOption > 2)mainOption = 2;
el13drt 53:a3077af736bb 617 }
el13drt 53:a3077af736bb 618 //Centre / Unknown orientation
el13drt 53:a3077af736bb 619 if (joystick.direction == CENTRE)
el13drt 53:a3077af736bb 620 serial.printf(" CENTRE\n");
el13drt 53:a3077af736bb 621 if (joystick.direction == UNKNOWN)
el13drt 53:a3077af736bb 622 serial.printf(" Unsupported direction\n");
el13drt 53:a3077af736bb 623
el13drt 53:a3077af736bb 624 //'Play Game' option 1
el13drt 53:a3077af736bb 625 if (mainOption == 0) {
el13drt 53:a3077af736bb 626 lcd.printString("Play Game",3,4);
el13drt 53:a3077af736bb 627 }
el13drt 53:a3077af736bb 628 //'High Scores' option 2
el13drt 53:a3077af736bb 629 if (mainOption == 1) {
el13drt 53:a3077af736bb 630 lcd.printString(" Scores ",3,4);
el13drt 53:a3077af736bb 631 }
el13drt 53:a3077af736bb 632 //'Options' option 3
el13drt 53:a3077af736bb 633 if (mainOption == 2) {
el13drt 53:a3077af736bb 634 lcd.printString(" Options ",3,4);
el13drt 53:a3077af736bb 635 }
el13drt 53:a3077af736bb 636 }
el13drt 53:a3077af736bb 637 }
el13drt 53:a3077af736bb 638
el13drt 62:827cda7a2663 639 ///Draws the Main Menu.
el13drt 53:a3077af736bb 640 void drawMainMenu()
el13drt 53:a3077af736bb 641 {
el13drt 53:a3077af736bb 642 //bottom border
el13drt 53:a3077af736bb 643 lcd.drawRect(0,47,84,0,1);
el13drt 53:a3077af736bb 644 //top border
el13drt 53:a3077af736bb 645 lcd.drawRect(0,0,84,2,1);
el13drt 53:a3077af736bb 646
el13drt 53:a3077af736bb 647 //title outline
el13drt 53:a3077af736bb 648 lcd.drawRect(3,6,77,10,0);
el13drt 53:a3077af736bb 649
el13drt 53:a3077af736bb 650 ////castle //x, y, w, h, fill//////////////////////
el13drt 53:a3077af736bb 651
el13drt 53:a3077af736bb 652 //castle main bulk
el13drt 53:a3077af736bb 653 lcd.drawRect(59,32,21,8,1);
el13drt 53:a3077af736bb 654
el13drt 53:a3077af736bb 655 //left window bulk
el13drt 53:a3077af736bb 656 lcd.drawRect(59,22,2,10,1);
el13drt 53:a3077af736bb 657 //centre left window bulk
el13drt 53:a3077af736bb 658 lcd.drawRect(65,22,2,10,1);
el13drt 53:a3077af736bb 659 //centre right window bulk
el13drt 53:a3077af736bb 660 lcd.drawRect(72,22,2,10,1);
el13drt 53:a3077af736bb 661 //right window bulk
el13drt 53:a3077af736bb 662 lcd.drawRect(78,22,2,10,1);
el13drt 53:a3077af736bb 663 //central window bulk
el13drt 53:a3077af736bb 664 lcd.drawRect(68,25,3,7,1);
el13drt 53:a3077af736bb 665
el13drt 53:a3077af736bb 666 //central window bulk
el13drt 53:a3077af736bb 667 lcd.drawRect(75,28,0,0,1);
el13drt 53:a3077af736bb 668 lcd.drawRect(77,28,0,0,1);
el13drt 53:a3077af736bb 669 lcd.drawRect(64,28,0,0,1);
el13drt 53:a3077af736bb 670 lcd.drawRect(62,28,0,0,1);
el13drt 53:a3077af736bb 671
el13drt 53:a3077af736bb 672 //above left window bulk
el13drt 53:a3077af736bb 673 lcd.drawRect(62,25,3,2,1);
el13drt 53:a3077af736bb 674 //above right window bulk
el13drt 53:a3077af736bb 675 lcd.drawRect(75,25,2,2,1);
el13drt 53:a3077af736bb 676
el13drt 53:a3077af736bb 677 //lower right line
el13drt 53:a3077af736bb 678 lcd.drawRect(71,42,9,0,1);
el13drt 53:a3077af736bb 679 //upper right line
el13drt 53:a3077af736bb 680 lcd.drawRect(70,41,10,0,1);
el13drt 53:a3077af736bb 681
el13drt 53:a3077af736bb 682 //upper left line
el13drt 53:a3077af736bb 683 lcd.drawRect(59,41,10,0,1);
el13drt 53:a3077af736bb 684 //lower left line
el13drt 53:a3077af736bb 685 lcd.drawRect(59,42,9,0,1);
el13drt 53:a3077af736bb 686
el13drt 53:a3077af736bb 687 //bottom left bulk
el13drt 53:a3077af736bb 688 lcd.drawRect(59,43,8,3,1);
el13drt 53:a3077af736bb 689 //bottom right bulk
el13drt 53:a3077af736bb 690 lcd.drawRect(72,43,8,3,1);
el13drt 53:a3077af736bb 691
el13drt 53:a3077af736bb 692 //option arrows - lower
el13drt 53:a3077af736bb 693 lcd.drawRect(27,42,4,0,1);
el13drt 53:a3077af736bb 694 lcd.drawRect(28,43,2,0,1);
el13drt 53:a3077af736bb 695 lcd.drawRect(29,44,0,0,1);
el13drt 53:a3077af736bb 696
el13drt 53:a3077af736bb 697 //option arrows - higher
el13drt 53:a3077af736bb 698 lcd.drawRect(27,29,4,0,1);
el13drt 53:a3077af736bb 699 lcd.drawRect(28,28,2,0,1);
el13drt 53:a3077af736bb 700 lcd.drawRect(29,27,0,0,1);
el13drt 53:a3077af736bb 701
el13drt 53:a3077af736bb 702 //print 'Xtreme Tower'
el13drt 53:a3077af736bb 703 lcd.printString("Xtreme Tower",7,1);
el13drt 53:a3077af736bb 704
el13drt 53:a3077af736bb 705 lcd.refresh();
el13drt 53:a3077af736bb 706 }
el13drt 53:a3077af736bb 707
el13drt 62:827cda7a2663 708 ///Implements Joystick navigation for Exit Menu.
el13drt 53:a3077af736bb 709 void exitMenu(int& exitOption)
el13drt 53:a3077af736bb 710 {
el13drt 78:e2fc547c6b99 711 ///Includes actionButtons();
el13drt 53:a3077af736bb 712 actionButtons();
el13drt 53:a3077af736bb 713 if (printFlag) {//if flag set, clear flag and print joystick values to serial port
el13drt 53:a3077af736bb 714 printFlag = 0;
el13drt 53:a3077af736bb 715
el13drt 53:a3077af736bb 716 if (joystick.direction == LEFT) {
el13drt 53:a3077af736bb 717 serial.printf(" LEFT\n");
el13drt 53:a3077af736bb 718 exitOption--;
el13drt 53:a3077af736bb 719 if(exitOption < 0)exitOption = 0;
el13drt 53:a3077af736bb 720 }
el13drt 53:a3077af736bb 721 if (joystick.direction == RIGHT) {
el13drt 53:a3077af736bb 722 serial.printf(" RIGHT\n");
el13drt 53:a3077af736bb 723 exitOption++;
el13drt 53:a3077af736bb 724 if(exitOption > 1)exitOption = 1;
el13drt 53:a3077af736bb 725 }
el13drt 53:a3077af736bb 726 if (joystick.direction == CENTRE)
el13drt 53:a3077af736bb 727 serial.printf(" CENTRE\n");
el13drt 53:a3077af736bb 728 if (joystick.direction == UNKNOWN)
el13drt 53:a3077af736bb 729 serial.printf(" Unsupported direction\n");
el13drt 53:a3077af736bb 730 }
el13drt 53:a3077af736bb 731 //draws option cursor
el13drt 53:a3077af736bb 732 if(exitOption == 0) {
el13drt 53:a3077af736bb 733 lcd.printString("YES",33,3);
el13drt 54:8180eec1656d 734 } else if(exitOption == 1) {
el13drt 53:a3077af736bb 735 lcd.printString(" NO",33,3);
el13drt 53:a3077af736bb 736 }
el13drt 53:a3077af736bb 737 }
el13drt 53:a3077af736bb 738
el13drt 62:827cda7a2663 739 ///If the joystick is moved left, Pixel Ninja moves left.
el13drt 60:681bc941b94d 740 void ninjaLeft()
el13drt 60:681bc941b94d 741 {
el13drt 78:e2fc547c6b99 742 ///Decrements values for left movement.
el13drt 60:681bc941b94d 743 a1 = a1-=2;
el13drt 60:681bc941b94d 744 a2 = a2-=2;
el13drt 60:681bc941b94d 745 a3 = a3-=2;
el13drt 64:715fb5a1e58b 746 a4 = a3+1;
el13drt 60:681bc941b94d 747 a5 = a3-3;
el13drt 60:681bc941b94d 748 a6 = a3-3;
el13drt 60:681bc941b94d 749 a7 = a7-=2;
el13drt 60:681bc941b94d 750 a8 = a8-=2;
el13drt 60:681bc941b94d 751 a9 = a9-=2;
el13drt 60:681bc941b94d 752 a10 = a10-=2;
el13drt 60:681bc941b94d 753 a11 = a3-1;
el13drt 60:681bc941b94d 754 a12 = a3-3;
el13drt 60:681bc941b94d 755 a13 = a3-3;
el13drt 60:681bc941b94d 756 a14 = a3+4;
el13drt 60:681bc941b94d 757 a15 = a3+3;
el13drt 60:681bc941b94d 758 a16 = a3+2;
el13drt 78:e2fc547c6b99 759 ///Also turns head to face left.
el13drt 60:681bc941b94d 760 }
el13drt 60:681bc941b94d 761
el13drt 62:827cda7a2663 762 ///If the Joystick is moved right, Pixel Ninja moves right.
el13drt 60:681bc941b94d 763 void ninjaRight()
el13drt 60:681bc941b94d 764 {
el13drt 78:e2fc547c6b99 765 ///Increments for right movement.
el13drt 60:681bc941b94d 766 a1 = a1+=2;
el13drt 60:681bc941b94d 767 a2 = a2+=2;
el13drt 60:681bc941b94d 768 a3 = a3+=2;
el13drt 60:681bc941b94d 769 a4 = a3-1;
el13drt 60:681bc941b94d 770 a5 = a3-1;
el13drt 60:681bc941b94d 771 a6 = a3+1;
el13drt 60:681bc941b94d 772 a7 = a7+=2;
el13drt 60:681bc941b94d 773 a8 = a8+=2;
el13drt 60:681bc941b94d 774 a9 = a9+=2;
el13drt 60:681bc941b94d 775 a10 = a10+=2;
el13drt 60:681bc941b94d 776 a11 = a3+3;
el13drt 60:681bc941b94d 777 a12 = a3+3;
el13drt 60:681bc941b94d 778 a13 = a3+1;
el13drt 60:681bc941b94d 779 a14 = a3-4;
el13drt 60:681bc941b94d 780 a15 = a3-3;
el13drt 60:681bc941b94d 781 a16 = a3-2;
el13drt 78:e2fc547c6b99 782 ///Turns head to face right.
el13drt 60:681bc941b94d 783 }
el13drt 60:681bc941b94d 784
el13drt 62:827cda7a2663 785 ///Draws the Exit Menu.
el13drt 53:a3077af736bb 786 void drawExitMenu()
el13drt 53:a3077af736bb 787 {
el13drt 53:a3077af736bb 788 //set exit menu
el13drt 53:a3077af736bb 789 lcd.clear();
el13drt 53:a3077af736bb 790 drawBackground();
el13drt 53:a3077af736bb 791 lcd.printString("Exit Game?",14,1);
el13drt 53:a3077af736bb 792
el13drt 53:a3077af736bb 793 lcd.drawRect(8,3,70,30,0);//title outline
el13drt 53:a3077af736bb 794 //option arrow - right
el13drt 53:a3077af736bb 795 lcd.drawRect(55,25,0,4,1);
el13drt 53:a3077af736bb 796 lcd.drawRect(56,26,0,2,1);
el13drt 53:a3077af736bb 797 lcd.drawRect(57,27,0,0,1);
el13drt 53:a3077af736bb 798
el13drt 53:a3077af736bb 799 //option arrow - left//
el13drt 53:a3077af736bb 800 lcd.drawRect(27,25,0,4,1);
el13drt 53:a3077af736bb 801 lcd.drawRect(26,26,0,2,1);
el13drt 53:a3077af736bb 802 lcd.drawRect(25,27,0,0,1);
el13drt 53:a3077af736bb 803
el13drt 53:a3077af736bb 804 lcd.refresh();
el13drt 53:a3077af736bb 805 }
el13drt 53:a3077af736bb 806
el13drt 62:827cda7a2663 807 ///Implements Joystick navigation for Options Menu.
el13drt 53:a3077af736bb 808 void optionsMenu(int& option)
el13drt 53:a3077af736bb 809 {
el13drt 53:a3077af736bb 810 //joystick selection
el13drt 53:a3077af736bb 811 if (printFlag) { //if flag set, clear flag and print joystick values to serial port
el13drt 53:a3077af736bb 812 printFlag = 0;
el13drt 53:a3077af736bb 813
el13drt 53:a3077af736bb 814 //option up
el13drt 53:a3077af736bb 815 if (joystick.direction == UP) {
el13drt 53:a3077af736bb 816 serial.printf(" UP\n");
el13drt 53:a3077af736bb 817 option = option--;
el13drt 53:a3077af736bb 818 if (option < 0)option = 0;
el13drt 53:a3077af736bb 819 }
el13drt 53:a3077af736bb 820 //option down
el13drt 53:a3077af736bb 821 if (joystick.direction == DOWN) {
el13drt 53:a3077af736bb 822 serial.printf(" DOWN\n");
el13drt 53:a3077af736bb 823 option = option++;
el13drt 53:a3077af736bb 824 if (option > 1)option = 1;
el13drt 53:a3077af736bb 825 }
el13drt 53:a3077af736bb 826 //Centre / Unknown orientation
el13drt 53:a3077af736bb 827 if (joystick.direction == CENTRE)
el13drt 53:a3077af736bb 828 serial.printf(" CENTRE\n");
el13drt 53:a3077af736bb 829 if (joystick.direction == UNKNOWN)
el13drt 53:a3077af736bb 830 serial.printf(" Unsupported direction\n");
el13drt 53:a3077af736bb 831
el13drt 53:a3077af736bb 832 //'Difficulty' option 1
el13drt 53:a3077af736bb 833 if (option == 0) {
el13drt 53:a3077af736bb 834 lcd.drawCircle(72,27,2,1);
el13drt 53:a3077af736bb 835 refreshCursor3();
el13drt 53:a3077af736bb 836 }
el13drt 53:a3077af736bb 837 //'Sound FX' option 2
el13drt 53:a3077af736bb 838 if (option == 1) {
el13drt 53:a3077af736bb 839 lcd.drawCircle(72,35,2,1);
el13drt 53:a3077af736bb 840 refreshCursor2();
el13drt 53:a3077af736bb 841 }
el13drt 53:a3077af736bb 842 }
el13drt 53:a3077af736bb 843 lcd.refresh();
el13drt 53:a3077af736bb 844 }
el13drt 53:a3077af736bb 845
el13drt 62:827cda7a2663 846 ///Draws the Options Menu.
el13drt 53:a3077af736bb 847 void drawOptionsMenu()
el13drt 53:a3077af736bb 848 {
el13drt 53:a3077af736bb 849 lcd.clear();//clear screen
el13drt 53:a3077af736bb 850 drawBackground();
el13drt 53:a3077af736bb 851 lcd.drawRect(3,6,77,10,0);//title outline
el13drt 53:a3077af736bb 852 lcd.drawRect(0,47,84,0,1);//bottom border
el13drt 53:a3077af736bb 853 lcd.drawRect(0,0,84,2,1);//top border
el13drt 53:a3077af736bb 854 lcd.printString("Options",20,1);//title
el13drt 70:8f76ea42f084 855 lcd.printString("Difficulty",5,3);
el13drt 70:8f76ea42f084 856 lcd.printString("Sound FX",5,4);
el13drt 53:a3077af736bb 857
el13drt 53:a3077af736bb 858 lcd.refresh();
el13drt 53:a3077af736bb 859 }
el13drt 53:a3077af736bb 860
el13drt 62:827cda7a2663 861 ///Implements Joystick navigation for Difficulty Options.
el13drt 53:a3077af736bb 862 void difficultyMenu(int& subOption)
el13drt 53:a3077af736bb 863 {
el13drt 78:e2fc547c6b99 864 ///Includes actionButtons();
el13drt 53:a3077af736bb 865 actionButtons();
el13drt 53:a3077af736bb 866
el13drt 53:a3077af736bb 867 //joystick selection
el13drt 53:a3077af736bb 868 if (printFlag) {//if flag set, clear flag,print joystick values
el13drt 53:a3077af736bb 869 printFlag = 0;
el13drt 53:a3077af736bb 870
el13drt 53:a3077af736bb 871 //option up
el13drt 53:a3077af736bb 872 if (joystick.direction == UP) {
el13drt 53:a3077af736bb 873 serial.printf(" UP\n");
el13drt 53:a3077af736bb 874 subOption = subOption--;
el13drt 53:a3077af736bb 875 if (subOption < 1)subOption = 1;
el13drt 53:a3077af736bb 876 }
el13drt 53:a3077af736bb 877 //option down
el13drt 53:a3077af736bb 878 if (joystick.direction == DOWN) {
el13drt 53:a3077af736bb 879 serial.printf(" DOWN\n");
el13drt 53:a3077af736bb 880 subOption = subOption++;
el13drt 53:a3077af736bb 881 if (subOption > 3)subOption = 3;
el13drt 53:a3077af736bb 882 }
el13drt 53:a3077af736bb 883 //Centre / Unknown orientation
el13drt 53:a3077af736bb 884 if (joystick.direction == CENTRE)
el13drt 53:a3077af736bb 885 serial.printf(" CENTRE\n");
el13drt 53:a3077af736bb 886 if (joystick.direction == UNKNOWN)
el13drt 53:a3077af736bb 887 serial.printf(" Unsupported direction\n");
el13drt 53:a3077af736bb 888
el13drt 53:a3077af736bb 889 //'Easy' option 1
el13drt 53:a3077af736bb 890 if (subOption == 1) {
el13drt 53:a3077af736bb 891 lcd.drawCircle(72,19,2,1);
el13drt 53:a3077af736bb 892 refreshCursor2();
el13drt 53:a3077af736bb 893 refreshCursor3();
el13drt 53:a3077af736bb 894 if(buttonFlagA) { //select easy
el13drt 77:b37c6a0d8758 895 //rightness(1.0);
el13drt 53:a3077af736bb 896 buttonFlagA = 0;
el13drt 53:a3077af736bb 897 fall = 1;
el13drt 53:a3077af736bb 898 }
el13drt 53:a3077af736bb 899 }
el13drt 53:a3077af736bb 900 //'Normal' option 2
el13drt 53:a3077af736bb 901 if (subOption == 2) {
el13drt 53:a3077af736bb 902 lcd.drawCircle(72,27,2,1);
el13drt 53:a3077af736bb 903 refreshCursor1();
el13drt 53:a3077af736bb 904 refreshCursor3();
el13drt 53:a3077af736bb 905
el13drt 53:a3077af736bb 906 if(buttonFlagA) { //select normal
el13drt 77:b37c6a0d8758 907 //rightness(1.0);
el13drt 53:a3077af736bb 908 buttonFlagA = 0;
el13drt 53:a3077af736bb 909 fall = 2;
el13drt 53:a3077af736bb 910 }
el13drt 53:a3077af736bb 911 }
el13drt 53:a3077af736bb 912 //'Forget It' option 3
el13drt 53:a3077af736bb 913 if (subOption == 3) {
el13drt 53:a3077af736bb 914 lcd.drawCircle(72,35,2,1);
el13drt 53:a3077af736bb 915 refreshCursor1();
el13drt 53:a3077af736bb 916 refreshCursor2();
el13drt 53:a3077af736bb 917
el13drt 53:a3077af736bb 918 if(buttonFlagA) { //select difficult
el13drt 77:b37c6a0d8758 919 //rightness(1.0);
el13drt 53:a3077af736bb 920 buttonFlagA = 0;
el13drt 53:a3077af736bb 921 fall = 3;
el13drt 53:a3077af736bb 922 }
el13drt 53:a3077af736bb 923 }
el13drt 53:a3077af736bb 924 }
el13drt 53:a3077af736bb 925 lcd.refresh();
el13drt 53:a3077af736bb 926 }
el13drt 53:a3077af736bb 927
el13drt 62:827cda7a2663 928 ///Draws Difficulty Menu.
el13drt 53:a3077af736bb 929 void drawDifficultyMenu()
el13drt 53:a3077af736bb 930 {
el13drt 53:a3077af736bb 931 lcd.clear();
el13drt 53:a3077af736bb 932 drawBackground();
el13drt 53:a3077af736bb 933 lcd.drawRect(0,47,84,0,1);//bottom border
el13drt 53:a3077af736bb 934 lcd.drawRect(0,0,84,2,1);//top border
el13drt 53:a3077af736bb 935 lcd.refresh();
el13drt 53:a3077af736bb 936 lcd.printString("*Difficulty*",5,1);//title
el13drt 53:a3077af736bb 937 lcd.printString("Easy",5,2);//title
el13drt 53:a3077af736bb 938 lcd.printString("Normal",5,3);//title
el13drt 53:a3077af736bb 939 lcd.printString("Forget It",5,4);//title
el13drt 53:a3077af736bb 940 }
el13drt 53:a3077af736bb 941
el13drt 62:827cda7a2663 942 ///Implements Joystick navigation for FX Menu.
el13drt 53:a3077af736bb 943 void soundFXMenu(int& fxOption)
el13drt 53:a3077af736bb 944 {
el13drt 78:e2fc547c6b99 945 ///Inlcudes actionButtons();
el13drt 53:a3077af736bb 946 actionButtons();
el13drt 53:a3077af736bb 947
el13drt 53:a3077af736bb 948 //joystick selection
el13drt 53:a3077af736bb 949 if (printFlag) {//if flag set, clear flag,print joystick values
el13drt 53:a3077af736bb 950 printFlag = 0;
el13drt 53:a3077af736bb 951
el13drt 53:a3077af736bb 952 //option up
el13drt 53:a3077af736bb 953 if (joystick.direction == UP) {
el13drt 53:a3077af736bb 954 serial.printf(" UP\n");
el13drt 53:a3077af736bb 955 fxOption = fxOption--;
el13drt 53:a3077af736bb 956 if (fxOption < 0)fxOption = 0;
el13drt 53:a3077af736bb 957 }
el13drt 53:a3077af736bb 958 //option down
el13drt 53:a3077af736bb 959 if (joystick.direction == DOWN) {
el13drt 53:a3077af736bb 960 serial.printf(" DOWN\n");
el13drt 53:a3077af736bb 961 fxOption = fxOption++;
el13drt 53:a3077af736bb 962 if (fxOption > 1)fxOption = 1;
el13drt 53:a3077af736bb 963 }
el13drt 53:a3077af736bb 964 //Centre / Unknown orientation
el13drt 53:a3077af736bb 965 if (joystick.direction == CENTRE)
el13drt 53:a3077af736bb 966 serial.printf(" CENTRE\n");
el13drt 53:a3077af736bb 967 if (joystick.direction == UNKNOWN)
el13drt 53:a3077af736bb 968 serial.printf(" Unsupported direction\n");
el13drt 53:a3077af736bb 969 }
el13drt 53:a3077af736bb 970 //'ON' option 1
el13drt 53:a3077af736bb 971 if (fxOption == 0) {
el13drt 53:a3077af736bb 972 lcd.drawCircle(72,27,2,1);//draw cursor 'ON'
el13drt 53:a3077af736bb 973 refreshCursor1();
el13drt 53:a3077af736bb 974 refreshCursor3();
el13drt 53:a3077af736bb 975
el13drt 53:a3077af736bb 976 if(buttonFlagA) {
el13drt 53:a3077af736bb 977 buttonFlagA =0;
el13drt 53:a3077af736bb 978 FX = 0;
el13drt 53:a3077af736bb 979 serial.printf("FX = %d\n",FX);
el13drt 53:a3077af736bb 980 }
el13drt 53:a3077af736bb 981 }
el13drt 53:a3077af736bb 982 //'OFF' option 2
el13drt 53:a3077af736bb 983 if (fxOption == 1) {
el13drt 53:a3077af736bb 984 lcd.drawCircle(72,35,2,1);//draw cursor 'OFF'
el13drt 53:a3077af736bb 985 refreshCursor1();
el13drt 53:a3077af736bb 986 refreshCursor2();
el13drt 53:a3077af736bb 987
el13drt 77:b37c6a0d8758 988 if(buttonFlagA) {
el13drt 53:a3077af736bb 989 buttonFlagA =0;
el13drt 53:a3077af736bb 990 FX = 1;
el13drt 53:a3077af736bb 991 serial.printf("FX = %d\n",FX);
el13drt 53:a3077af736bb 992 }
el13drt 53:a3077af736bb 993 }
el13drt 53:a3077af736bb 994 lcd.refresh();
el13drt 53:a3077af736bb 995 }
el13drt 53:a3077af736bb 996
el13drt 62:827cda7a2663 997 ///Draws the FX Menu.
el13drt 53:a3077af736bb 998 void drawSoundFXMenu()
el13drt 53:a3077af736bb 999 {
el13drt 53:a3077af736bb 1000 lcd.clear();
el13drt 53:a3077af736bb 1001 drawBackground();
el13drt 53:a3077af736bb 1002 lcd.drawRect(0,47,84,0,1);//bottom border
el13drt 53:a3077af736bb 1003 lcd.drawRect(0,0,84,2,1);//top border
el13drt 53:a3077af736bb 1004 lcd.printString("*Sound FX*",10,1);//title
el13drt 53:a3077af736bb 1005 lcd.printString("ON",35,3);//title
el13drt 53:a3077af736bb 1006 lcd.printString("OFF",33,4);//title
el13drt 53:a3077af736bb 1007 lcd.refresh();
el13drt 53:a3077af736bb 1008 }
el13drt 53:a3077af736bb 1009
el13drt 76:c11cb774bd27 1010
el13drt 78:e2fc547c6b99 1011 ///Game flag for main game.
el13drt 77:b37c6a0d8758 1012 void gameLoop()
el13drt 77:b37c6a0d8758 1013 {
el13drt 78:e2fc547c6b99 1014 ///Sets gameFlag when game Timer expires.
el13drt 76:c11cb774bd27 1015 gameFlag = 1;
el13drt 76:c11cb774bd27 1016 }
el13drt 76:c11cb774bd27 1017
el13drt 62:827cda7a2663 1018 ///Shifts and stores the new scores accordingly.
el13drt 53:a3077af736bb 1019 void newScore()
el13drt 53:a3077af736bb 1020 {
el13drt 78:e2fc547c6b99 1021 ///Entry conditions mean function is only used if user equals or beats High Score 3.
el13drt 53:a3077af736bb 1022 if(score >= highScore3) {//entry condition
el13drt 53:a3077af736bb 1023 buttonFlagA = 0;//reset flags
el13drt 53:a3077af736bb 1024 buttonFlagB = 0;
el13drt 53:a3077af736bb 1025 lcd.clear();//clears screen
el13drt 53:a3077af736bb 1026 drawBackground();//draws background
el13drt 53:a3077af736bb 1027 lcd.printString("High Score!!",7,0);//title
el13drt 53:a3077af736bb 1028 lcd.printString("Enter ID",19,4);//title
el13drt 53:a3077af736bb 1029
el13drt 53:a3077af736bb 1030 int n;//local variable used for storing temporary global variable
el13drt 53:a3077af736bb 1031 int initial = 0;//used for isolating which initial is being selected
el13drt 53:a3077af736bb 1032 char x,y,z;
el13drt 53:a3077af736bb 1033
el13drt 53:a3077af736bb 1034 //print initial characters
el13drt 53:a3077af736bb 1035 x=fsm[state1].output1;
el13drt 53:a3077af736bb 1036 lcd.printChar(x,28,2);
el13drt 53:a3077af736bb 1037 y=fsm[state2].output2;
el13drt 53:a3077af736bb 1038 lcd.printChar(y,40,2);
el13drt 53:a3077af736bb 1039 z=fsm[state3].output3;
el13drt 53:a3077af736bb 1040 lcd.printChar(z,52,2);
el13drt 53:a3077af736bb 1041
el13drt 53:a3077af736bb 1042 while(1) {
el13drt 53:a3077af736bb 1043
el13drt 53:a3077af736bb 1044 //joystick selection
el13drt 53:a3077af736bb 1045 if (printFlag) {//if flag set, clear flag,print joystick values
el13drt 53:a3077af736bb 1046 printFlag = 0;
el13drt 53:a3077af736bb 1047
el13drt 53:a3077af736bb 1048 if(joystick.direction==CENTRE) {
el13drt 53:a3077af736bb 1049 preDirection=0;
el13drt 53:a3077af736bb 1050 }
el13drt 53:a3077af736bb 1051 if (joystick.direction == UP ) {
el13drt 53:a3077af736bb 1052 serial.printf(" UP\n");
el13drt 53:a3077af736bb 1053 state1 = state1--;
el13drt 53:a3077af736bb 1054 if (state1 < 0)state1 = 0;
el13drt 53:a3077af736bb 1055 state2 = state2--;
el13drt 53:a3077af736bb 1056 if (state2 < 0)state2 = 0;
el13drt 53:a3077af736bb 1057 state3 = state3--;
el13drt 53:a3077af736bb 1058 if (state3 < 0)state3 = 0;
el13drt 53:a3077af736bb 1059 }
el13drt 53:a3077af736bb 1060 //option down
el13drt 53:a3077af736bb 1061 if (joystick.direction == DOWN ) {
el13drt 53:a3077af736bb 1062 serial.printf(" DOWN\n");
el13drt 53:a3077af736bb 1063 state1 = state1++;
el13drt 53:a3077af736bb 1064 if (state1 > 26)state1 = 26;
el13drt 53:a3077af736bb 1065 state2 = state2++;
el13drt 53:a3077af736bb 1066 if (state2 > 26)state2 = 26;
el13drt 53:a3077af736bb 1067 state3 = state3++;
el13drt 53:a3077af736bb 1068 if (state3 > 26)state3 = 26;
el13drt 53:a3077af736bb 1069 }
el13drt 53:a3077af736bb 1070 if (joystick.direction == LEFT && preDirection==0) {
el13drt 53:a3077af736bb 1071 serial.printf(" LEFT\n");
el13drt 53:a3077af736bb 1072 initial = initial--;
el13drt 53:a3077af736bb 1073 if (initial < 0)initial = 0;
el13drt 53:a3077af736bb 1074 preDirection=1;
el13drt 53:a3077af736bb 1075 }
el13drt 53:a3077af736bb 1076 if (joystick.direction == RIGHT && preDirection==0) {
el13drt 53:a3077af736bb 1077 serial.printf(" RIGHT\n");
el13drt 53:a3077af736bb 1078 initial = initial++;
el13drt 53:a3077af736bb 1079 if (initial > 2)initial = 2;
el13drt 53:a3077af736bb 1080 preDirection=1;
el13drt 53:a3077af736bb 1081 }
el13drt 53:a3077af736bb 1082 //Centre / Unknown orientation
el13drt 53:a3077af736bb 1083 if (joystick.direction == CENTRE)
el13drt 53:a3077af736bb 1084 serial.printf(" CENTRE\n");
el13drt 53:a3077af736bb 1085 if (joystick.direction == UNKNOWN)
el13drt 53:a3077af736bb 1086 serial.printf(" Unsupported direction\n");
el13drt 53:a3077af736bb 1087 }
el13drt 53:a3077af736bb 1088 //if initial 3 display selected character
el13drt 53:a3077af736bb 1089 if (initial == 0) {
el13drt 53:a3077af736bb 1090 x=fsm[state1].output1;
el13drt 53:a3077af736bb 1091 lcd.printChar(x,28,2);
el13drt 53:a3077af736bb 1092 }
el13drt 53:a3077af736bb 1093 //if initial 1 display selected character
el13drt 53:a3077af736bb 1094 if(initial == 1) {
el13drt 53:a3077af736bb 1095 y=fsm[state2].output2;
el13drt 53:a3077af736bb 1096 lcd.printChar(y,40,2);
el13drt 53:a3077af736bb 1097 }
el13drt 53:a3077af736bb 1098 //if initial 2 display selected character
el13drt 53:a3077af736bb 1099 if(initial == 2) {
el13drt 53:a3077af736bb 1100 z=fsm[state3].output3;
el13drt 53:a3077af736bb 1101 lcd.printChar(z,52,2);
el13drt 53:a3077af736bb 1102 }
el13drt 77:b37c6a0d8758 1103 if(buttonFlagA) {
el13drt 53:a3077af736bb 1104 actionButtons();
el13drt 53:a3077af736bb 1105 buttonFlagA = 0;
el13drt 53:a3077af736bb 1106 buttonFlagB = 0;
el13drt 53:a3077af736bb 1107 break;
el13drt 53:a3077af736bb 1108 }
el13drt 53:a3077af736bb 1109 }
el13drt 53:a3077af736bb 1110 //if player beats High Score 3, replace it with new score
el13drt 53:a3077af736bb 1111 if(score >= highScore3 && score<highScore2 ) {
el13drt 53:a3077af736bb 1112 highScore3 = score;
el13drt 53:a3077af736bb 1113 sprintf (player3initials, "3.%c%c%c.....%i",x,y,z,highScore3);
el13drt 53:a3077af736bb 1114 }
el13drt 53:a3077af736bb 1115 //if player beats High Score 3 and 2, replace HighScore2 with new score
el13drt 53:a3077af736bb 1116 if(score >= highScore2 && score< highScore1) {
el13drt 53:a3077af736bb 1117 highScore3 = highScore2;
el13drt 53:a3077af736bb 1118 n = score;
el13drt 53:a3077af736bb 1119 highScore2 = n;
el13drt 72:ade25d595dc9 1120 sprintf (player3initials, "3.%c%c%c.....%i",player2initials[2],player2initials[3],player2initials[4],highScore3);
el13drt 53:a3077af736bb 1121 sprintf (player2initials, "2.%c%c%c.....%i",x,y,z,highScore2);
el13drt 53:a3077af736bb 1122 }
el13drt 53:a3077af736bb 1123 //if player beats High Score 1, 2 and 3, replace highScore1 with new score
el13drt 53:a3077af736bb 1124 if(score >= highScore1 ) {
el13drt 53:a3077af736bb 1125 highScore3 = highScore2;
el13drt 53:a3077af736bb 1126 highScore2 = highScore1;
el13drt 53:a3077af736bb 1127 n = score;
el13drt 53:a3077af736bb 1128 highScore1 = n;
el13drt 72:ade25d595dc9 1129 sprintf (player3initials, "3.%c%c%c.....%i",player2initials[2],player2initials[3],player2initials[4],highScore3);
el13drt 53:a3077af736bb 1130 sprintf (player2initials, "2.%c%c%c.....%i",player1initials[2],player1initials[3],player1initials[4],highScore2);
el13drt 53:a3077af736bb 1131 sprintf (player1initials, "1.%c%c%c.....%i",x,y,z,highScore1);
el13drt 53:a3077af736bb 1132 }
el13drt 53:a3077af736bb 1133 state1 = 0;
el13drt 53:a3077af736bb 1134 state2 = 0;
el13drt 53:a3077af736bb 1135 state3 = 0;
el13drt 79:a92239ce3b20 1136 write();
el13drt 53:a3077af736bb 1137 }
el13drt 53:a3077af736bb 1138 }
el13drt 53:a3077af736bb 1139
el13drt 68:e978b6bccff8 1140 ///Begins Game.
el13drt 53:a3077af736bb 1141 void game(int& exitFlag, int& exitOption)
el13drt 53:a3077af736bb 1142 {
el13drt 78:e2fc547c6b99 1143 ///Includes action buttons.
el13drt 53:a3077af736bb 1144 actionButtons();
el13drt 53:a3077af736bb 1145 lcd.clear();//clears screen
el13drt 53:a3077af736bb 1146 drawBackground();//draw background
el13drt 77:b37c6a0d8758 1147
el13drt 53:a3077af736bb 1148 while(1) {
el13drt 77:b37c6a0d8758 1149
el13drt 53:a3077af736bb 1150 //print score - top left of display
el13drt 73:1b03202c987a 1151 char buffer [14];//create buffer for string
el13drt 53:a3077af736bb 1152 int length = sprintf(buffer,"Level:%d",score);//insert buffer
el13drt 53:a3077af736bb 1153 lcd.printString(buffer,3,0);//display
el13drt 53:a3077af736bb 1154
el13drt 53:a3077af736bb 1155 actionButtons();
el13drt 53:a3077af736bb 1156 drawNinja();//set character
el13drt 61:64077ba14f3c 1157 drawHazards();//initiates hazards
el13drt 76:c11cb774bd27 1158
el13drt 77:b37c6a0d8758 1159 if(gameFlag) {
el13drt 77:b37c6a0d8758 1160 gameFlag = 0;
el13drt 77:b37c6a0d8758 1161 hazardFall();//increments hazards towards floor
el13drt 77:b37c6a0d8758 1162 if (printFlag) { //if flag set, clear flag and print joystick values to serial port
el13drt 77:b37c6a0d8758 1163 printFlag = 0;
el13drt 77:b37c6a0d8758 1164 if (joystick.direction == RIGHT) {
el13drt 77:b37c6a0d8758 1165 serial.printf(" RIGHT\n");
el13drt 77:b37c6a0d8758 1166 ninjaRight();//move right
el13drt 77:b37c6a0d8758 1167 ninjaBoundaries();
el13drt 77:b37c6a0d8758 1168 }
el13drt 77:b37c6a0d8758 1169 //check joystick direction
el13drt 77:b37c6a0d8758 1170 if (joystick.direction == LEFT) {
el13drt 77:b37c6a0d8758 1171 serial.printf(" LEFT\n");
el13drt 77:b37c6a0d8758 1172 ninjaLeft();//move left
el13drt 77:b37c6a0d8758 1173 ninjaBoundaries();
el13drt 77:b37c6a0d8758 1174 }
el13drt 77:b37c6a0d8758 1175 if (joystick.direction == CENTRE)
el13drt 77:b37c6a0d8758 1176 serial.printf(" CENTRE\n");
el13drt 77:b37c6a0d8758 1177 if (joystick.direction == UNKNOWN)
el13drt 77:b37c6a0d8758 1178 serial.printf(" Unsupported direction\n");
el13drt 53:a3077af736bb 1179
el13drt 77:b37c6a0d8758 1180 //integer to represent character being
el13drt 77:b37c6a0d8758 1181 //struck by falling object
el13drt 77:b37c6a0d8758 1182 int contactPoint = 0;
el13drt 53:a3077af736bb 1183
el13drt 77:b37c6a0d8758 1184 //contact points
el13drt 77:b37c6a0d8758 1185 if(lcd.getPixel((a3),32))
el13drt 77:b37c6a0d8758 1186 contactPoint++;
el13drt 77:b37c6a0d8758 1187 if(lcd.getPixel((a3+3),32))
el13drt 77:b37c6a0d8758 1188 contactPoint++;
el13drt 77:b37c6a0d8758 1189 if(lcd.getPixel((a3-3),32))
el13drt 77:b37c6a0d8758 1190 contactPoint++;
el13drt 53:a3077af736bb 1191
el13drt 77:b37c6a0d8758 1192 //if contact point is not zero
el13drt 77:b37c6a0d8758 1193 //character has been hit
el13drt 77:b37c6a0d8758 1194 //and the game ends
el13drt 77:b37c6a0d8758 1195 if ( contactPoint !=0) {
el13drt 77:b37c6a0d8758 1196 lcd.printString("Game Over",17,2);
el13drt 77:b37c6a0d8758 1197 lcd.inverseMode();
el13drt 77:b37c6a0d8758 1198 buzzer.beep(2000,0.2);//frequeny/duration
el13drt 77:b37c6a0d8758 1199 wait(0.5);
el13drt 77:b37c6a0d8758 1200 lcd.normalMode();
el13drt 77:b37c6a0d8758 1201 wait(0.5);
el13drt 77:b37c6a0d8758 1202 lcd.inverseMode();
el13drt 77:b37c6a0d8758 1203 buzzer.beep(2000,0.2);
el13drt 77:b37c6a0d8758 1204 wait(0.5);
el13drt 77:b37c6a0d8758 1205 lcd.normalMode();
el13drt 77:b37c6a0d8758 1206 wait(0.5);
el13drt 77:b37c6a0d8758 1207 lcd.inverseMode();
el13drt 77:b37c6a0d8758 1208 buzzer.beep(2000,0.2);
el13drt 77:b37c6a0d8758 1209 wait(0.5);
el13drt 77:b37c6a0d8758 1210 lcd.normalMode();
el13drt 77:b37c6a0d8758 1211 newScore();//enter initial screen if previous scores are beaten
el13drt 79:a92239ce3b20 1212 //write();
el13drt 77:b37c6a0d8758 1213 resetGame();//reset values
el13drt 77:b37c6a0d8758 1214 break;
el13drt 77:b37c6a0d8758 1215 }
el13drt 77:b37c6a0d8758 1216 lcd.refresh();//refresh screen
el13drt 77:b37c6a0d8758 1217 startrek();//clears unset pixels, keeps set pixels
el13drt 53:a3077af736bb 1218
el13drt 68:e978b6bccff8 1219 //Exit Menu (Back button pressed)//
el13drt 77:b37c6a0d8758 1220 if(buttonFlagB) {
el13drt 77:b37c6a0d8758 1221 buttonFlagB = 0;//reset flags
el13drt 77:b37c6a0d8758 1222 buttonFlagA = 0;
el13drt 77:b37c6a0d8758 1223 actionButtons();
el13drt 77:b37c6a0d8758 1224 drawExitMenu();//draws the exit menu
el13drt 53:a3077af736bb 1225
el13drt 77:b37c6a0d8758 1226 while(1) {
el13drt 77:b37c6a0d8758 1227 exitMenu(exitOption);//presents exit options
el13drt 53:a3077af736bb 1228
el13drt 77:b37c6a0d8758 1229 //'exit' option YES
el13drt 77:b37c6a0d8758 1230 if((buttonFlagA)&&(exitOption == 0)) { //returns to menu
el13drt 77:b37c6a0d8758 1231 //rightness(1.0);
el13drt 77:b37c6a0d8758 1232 exitOption = 1;//reset intial option value
el13drt 77:b37c6a0d8758 1233 buttonFlagA = 0;//reset flags
el13drt 77:b37c6a0d8758 1234 buttonFlagB = 0;
el13drt 77:b37c6a0d8758 1235 actionButtons();
el13drt 77:b37c6a0d8758 1236 lcd.clear();//clears screen
el13drt 77:b37c6a0d8758 1237 resetGame();//resets scores/objects
el13drt 77:b37c6a0d8758 1238 exitFlag = 1;//sets exit flag
el13drt 77:b37c6a0d8758 1239 break;
el13drt 77:b37c6a0d8758 1240 }
el13drt 77:b37c6a0d8758 1241 //'exit' option NO - returns to game
el13drt 77:b37c6a0d8758 1242 if((buttonFlagA)&&(exitOption == 1)) {
el13drt 77:b37c6a0d8758 1243 buttonFlagA = 0;//resets flags
el13drt 77:b37c6a0d8758 1244 buttonFlagB = 0;
el13drt 77:b37c6a0d8758 1245 break;
el13drt 77:b37c6a0d8758 1246 }
el13drt 77:b37c6a0d8758 1247 sleep();//put while to sleep
el13drt 53:a3077af736bb 1248 }
el13drt 77:b37c6a0d8758 1249 //if 'exit' option YES, resets
el13drt 77:b37c6a0d8758 1250 //game values returns to main menu
el13drt 77:b37c6a0d8758 1251 if (exitFlag!=0) { //if exit flag set
el13drt 77:b37c6a0d8758 1252 exitFlag = 0;//reset flag
el13drt 77:b37c6a0d8758 1253 break;//break to main menu
el13drt 53:a3077af736bb 1254 }
el13drt 53:a3077af736bb 1255 }
el13drt 77:b37c6a0d8758 1256 serial.printf("Score: %i \n",score);//print Score for debug
el13drt 77:b37c6a0d8758 1257
el13drt 53:a3077af736bb 1258 }
el13drt 53:a3077af736bb 1259 }
el13drt 77:b37c6a0d8758 1260 }
el13drt 53:a3077af736bb 1261 }
el13drt 53:a3077af736bb 1262
el13drt 62:827cda7a2663 1263 ///Draws Scores Menu.
el13drt 53:a3077af736bb 1264 void scores()
el13drt 53:a3077af736bb 1265 {
el13drt 78:e2fc547c6b99 1266 ///Include actionButtons();
el13drt 53:a3077af736bb 1267 actionButtons();
el13drt 53:a3077af736bb 1268 lcd.clear();//clear screen
el13drt 53:a3077af736bb 1269 drawBackground();//set background
el13drt 53:a3077af736bb 1270 lcd.printString("High Scores",10,0);//title
el13drt 77:b37c6a0d8758 1271
el13drt 53:a3077af736bb 1272 //prints scores with names
el13drt 53:a3077af736bb 1273 lcd.printString(player1initials,5,2);//display
el13drt 53:a3077af736bb 1274 lcd.printString(player2initials,5,3);//display
el13drt 53:a3077af736bb 1275 lcd.printString(player3initials,5,4);//display
el13drt 53:a3077af736bb 1276
el13drt 53:a3077af736bb 1277 while(1) {
el13drt 53:a3077af736bb 1278 actionButtons();//select
el13drt 53:a3077af736bb 1279
el13drt 53:a3077af736bb 1280 //back to menu
el13drt 53:a3077af736bb 1281 if(buttonFlagB) {
el13drt 53:a3077af736bb 1282 buttonFlagA = 0;//reset flags
el13drt 53:a3077af736bb 1283 buttonFlagB = 0;
el13drt 53:a3077af736bb 1284 lcd.clear();
el13drt 53:a3077af736bb 1285 break;
el13drt 53:a3077af736bb 1286 }
el13drt 53:a3077af736bb 1287 sleep();//put while to sleep
el13drt 53:a3077af736bb 1288 }
el13drt 53:a3077af736bb 1289 }
el13drt 53:a3077af736bb 1290
el13drt 62:827cda7a2663 1291 ///Implements selection for Options Menu.
el13drt 53:a3077af736bb 1292 void optionsMenu()
el13drt 53:a3077af736bb 1293 {
el13drt 78:e2fc547c6b99 1294 ///Includes actionButtons();
el13drt 53:a3077af736bb 1295 int option = 0;
el13drt 53:a3077af736bb 1296 int subOption = fall;//keeps cursor on selected option, even after exiting screen
el13drt 53:a3077af736bb 1297 int fxOption = 0;
el13drt 53:a3077af736bb 1298 actionButtons();
el13drt 53:a3077af736bb 1299 drawOptionsMenu();//draws options menu
el13drt 53:a3077af736bb 1300 //counters for navigation
el13drt 53:a3077af736bb 1301
el13drt 53:a3077af736bb 1302 while(1) {
el13drt 53:a3077af736bb 1303 actionButtons();
el13drt 53:a3077af736bb 1304 optionsMenu(option);//presents options
el13drt 53:a3077af736bb 1305
el13drt 73:1b03202c987a 1306 //================ Difficulty menu =======================
el13drt 53:a3077af736bb 1307 if ((option == 0)&&(buttonFlagA)) {
el13drt 77:b37c6a0d8758 1308 //rightness(1.0);
el13drt 53:a3077af736bb 1309 buttonFlagA = 0;//reset flag
el13drt 53:a3077af736bb 1310 actionButtons();
el13drt 53:a3077af736bb 1311 drawDifficultyMenu();//draws difficulty menu
el13drt 53:a3077af736bb 1312
el13drt 53:a3077af736bb 1313 while(1) {
el13drt 53:a3077af736bb 1314 actionButtons();
el13drt 53:a3077af736bb 1315 difficultyMenu(subOption);//presents difficulty options
el13drt 53:a3077af736bb 1316
el13drt 77:b37c6a0d8758 1317 if(buttonFlagB) {
el13drt 53:a3077af736bb 1318 buttonFlagB = 0;//reset flags
el13drt 53:a3077af736bb 1319 buttonFlagA = 0;
el13drt 53:a3077af736bb 1320 lcd.clear();//clear screen
el13drt 53:a3077af736bb 1321 break;//return back
el13drt 53:a3077af736bb 1322 }
el13drt 53:a3077af736bb 1323 sleep();//put while to sleep
el13drt 53:a3077af736bb 1324 }
el13drt 53:a3077af736bb 1325 drawOptionsMenu();
el13drt 53:a3077af736bb 1326 }
el13drt 77:b37c6a0d8758 1327 //================sound FX menu==================================
el13drt 64:715fb5a1e58b 1328
el13drt 53:a3077af736bb 1329 if((option ==1)&&(buttonFlagA)) {
el13drt 53:a3077af736bb 1330 buttonFlagA = 0;//reset flags
el13drt 53:a3077af736bb 1331 buttonFlagB = 0;
el13drt 53:a3077af736bb 1332 actionButtons();
el13drt 53:a3077af736bb 1333 drawSoundFXMenu();//draw menu
el13drt 53:a3077af736bb 1334
el13drt 53:a3077af736bb 1335 while(1) {
el13drt 53:a3077af736bb 1336 actionButtons();
el13drt 53:a3077af736bb 1337 soundFXMenu(fxOption);//presents options
el13drt 53:a3077af736bb 1338
el13drt 53:a3077af736bb 1339 //back to options menu
el13drt 77:b37c6a0d8758 1340 if(buttonFlagB) {
el13drt 53:a3077af736bb 1341 buttonFlagB = 0;//reset flags
el13drt 53:a3077af736bb 1342 buttonFlagA = 0;
el13drt 53:a3077af736bb 1343 lcd.clear();//clear screen
el13drt 53:a3077af736bb 1344 break;//return back
el13drt 53:a3077af736bb 1345 }
el13drt 53:a3077af736bb 1346 sleep();//put while to sleep
el13drt 53:a3077af736bb 1347 }
el13drt 53:a3077af736bb 1348 drawOptionsMenu();
el13drt 53:a3077af736bb 1349 }
el13drt 53:a3077af736bb 1350 //back to mainmenu
el13drt 53:a3077af736bb 1351 if(buttonFlagB) {
el13drt 53:a3077af736bb 1352 buttonFlagB = 0;//reset flags
el13drt 53:a3077af736bb 1353 buttonFlagA = 0;
el13drt 53:a3077af736bb 1354 lcd.clear();//clear
el13drt 53:a3077af736bb 1355 break;//return back
el13drt 53:a3077af736bb 1356 }
el13drt 53:a3077af736bb 1357 sleep();//put while to sleep
el13drt 53:a3077af736bb 1358 }
el13drt 53:a3077af736bb 1359 }
el13drt 53:a3077af736bb 1360
el13drt 62:827cda7a2663 1361 ///Reads default position of Joystick for calibration.
el13drt 53:a3077af736bb 1362 void calibrateJoystick()
el13drt 53:a3077af736bb 1363 {
el13drt 53:a3077af736bb 1364 joyButton.mode(PullDown);
el13drt 53:a3077af736bb 1365 //must not move during calibration
el13drt 53:a3077af736bb 1366 joystick.x0 = xPot; //initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
el13drt 53:a3077af736bb 1367 joystick.y0 = yPot;
el13drt 53:a3077af736bb 1368 }
el13drt 53:a3077af736bb 1369
el13drt 62:827cda7a2663 1370 ///Updates Joytick position according to voltage readings.
el13drt 53:a3077af736bb 1371 void updateJoystick()
el13drt 53:a3077af736bb 1372 {
el13drt 53:a3077af736bb 1373 //read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
el13drt 53:a3077af736bb 1374 joystick.x = xPot - joystick.x0;
el13drt 53:a3077af736bb 1375 joystick.y = yPot - joystick.y0;
el13drt 53:a3077af736bb 1376 //read button state
el13drt 53:a3077af736bb 1377 joystick.button = joyButton;
el13drt 53:a3077af736bb 1378
el13drt 53:a3077af736bb 1379 //calculate direction depending on x,y values
el13drt 53:a3077af736bb 1380 //tolerance allows a little lee-way in case joystick not exactly in the stated direction
el13drt 53:a3077af736bb 1381 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13drt 53:a3077af736bb 1382 joystick.direction = CENTRE;
el13drt 53:a3077af736bb 1383 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13drt 53:a3077af736bb 1384 joystick.direction = DOWN;
el13drt 66:d5174aa5839d 1385 lcd.setBrightness(1.0);
el13drt 53:a3077af736bb 1386 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13drt 53:a3077af736bb 1387 joystick.direction = UP;
el13drt 66:d5174aa5839d 1388 lcd.setBrightness(1.0);
el13drt 53:a3077af736bb 1389 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el13drt 53:a3077af736bb 1390 joystick.direction = RIGHT;
el13drt 66:d5174aa5839d 1391 lcd.setBrightness(1.0);
el13drt 53:a3077af736bb 1392 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el13drt 53:a3077af736bb 1393 joystick.direction = LEFT;
el13drt 66:d5174aa5839d 1394 lcd.setBrightness(1.0);
el13drt 53:a3077af736bb 1395 } else {
el13drt 53:a3077af736bb 1396 joystick.direction = UNKNOWN;
el13drt 53:a3077af736bb 1397 }
el13drt 53:a3077af736bb 1398 //set flag for printing
el13drt 53:a3077af736bb 1399 printFlag = 1;
el13drt 53:a3077af736bb 1400 }
el13drt 52:bb2acf0e248a 1401
el13drt 77:b37c6a0d8758 1402 ///Turns off screen backlighting.
el13drt 66:d5174aa5839d 1403 void screenOff()
el13drt 66:d5174aa5839d 1404 {
el13drt 78:e2fc547c6b99 1405 ///Sets lcd birghtness to 0.0.
el13drt 65:c5dad703f752 1406 lcd.setBrightness(0.0);
el13drt 66:d5174aa5839d 1407 }
el13drt 65:c5dad703f752 1408
el13drt 77:b37c6a0d8758 1409 ///When idle, calls the funtion screenOff();
el13drt 74:d76be537bafd 1410 void idleMode()
el13drt 74:d76be537bafd 1411 {
el13drt 78:e2fc547c6b99 1412 ///If user input detected, reset timer.
el13drt 74:d76be537bafd 1413 if((buttonFlagA)||(buttonFlagB)||(joystick.direction)) { //call standby mode if idle
el13drt 74:d76be537bafd 1414 int time = 60;
el13drt 74:d76be537bafd 1415 standby.attach(&screenOff,time);
el13drt 74:d76be537bafd 1416 }
el13drt 74:d76be537bafd 1417 }
el13drt 74:d76be537bafd 1418
el13drt 0:a8bc3aac5f69 1419 int main()
el13drt 0:a8bc3aac5f69 1420 {
el13drt 73:1b03202c987a 1421 PHY_PowerDown();//powers down the Ethernet
el13drt 46:613eabb6ea86 1422 ledP = 1;//power LED on
el13drt 14:c2c969e1c6e8 1423 randomise();//randomises falling hazards (initial values only)
el13drt 7:217810c90306 1424 calibrateJoystick();//get centred values of joystick
el13drt 7:217810c90306 1425 pollJoystick.attach(&updateJoystick,1.0/10.0);//read joystick 10 times per second
el13drt 6:fa2928bcec17 1426
el13drt 0:a8bc3aac5f69 1427 lcd.init();//initialise screen
el13drt 35:9f55326c1b0a 1428 drawWelcome();//welcome screen
el13drt 73:1b03202c987a 1429 lcd.clear();//clear screen
el13drt 54:8180eec1656d 1430
el13drt 17:242ccf6a8442 1431 buttonA.mode(PullDown);//pull down buttonA
el13drt 17:242ccf6a8442 1432 buttonB.mode(PullDown);//pull down buttonB
el13drt 0:a8bc3aac5f69 1433
el13drt 12:eedda6554615 1434 int exitFlag = 0;//exit flag
el13drt 5:a0e4a67266d6 1435 int mainOption = 0;//counter for main menu
el13drt 40:56ab6d368e9b 1436 int exitOption = 1;//counter for exit menu
el13drt 77:b37c6a0d8758 1437
el13drt 74:d76be537bafd 1438 read();//set high scores using flash memory
el13drt 76:c11cb774bd27 1439 deBounce1.start();//timer buttonA debounce
el13drt 76:c11cb774bd27 1440 deBounce2.start();//timer buttonB debounce
el13drt 78:e2fc547c6b99 1441 timerGame.attach(&gameLoop,0.1);//timer game delay
el13drt 40:56ab6d368e9b 1442 timerA.attach(&timerExpiredA, 0.1);//checks state of buttonA
el13drt 40:56ab6d368e9b 1443 timerB.attach(&timerExpiredB, 0.1);//checks state of buttonB
el13drt 74:d76be537bafd 1444 idleMode();//turns off screen if idle.
el13drt 77:b37c6a0d8758 1445
el13drt 1:352c50e88ffa 1446 while(1) {
el13drt 11:6b8416a8ddb3 1447 drawMainMenu();//draws main menu
el13drt 11:6b8416a8ddb3 1448 mainMenu(mainOption);//presents main menu options
el13drt 52:bb2acf0e248a 1449 actionButtons();//sound light when buttons pressed
el13drt 77:b37c6a0d8758 1450
el13drt 11:6b8416a8ddb3 1451 // if 'Play Game' selected
el13drt 15:ff3eb0091453 1452 if ((mainOption == 0)&&(buttonFlagA)) {
el13drt 15:ff3eb0091453 1453 buttonFlagA = 0;
el13drt 19:e0fd493816ae 1454 buttonFlagB = 0;
el13drt 12:eedda6554615 1455 game(exitFlag, exitOption);//actual game
el13drt 12:eedda6554615 1456 }
el13drt 12:eedda6554615 1457 // if 'Scores' selected
el13drt 15:ff3eb0091453 1458 if((mainOption == 1)&&(buttonFlagA)) {
el13drt 15:ff3eb0091453 1459 buttonFlagA = 0;
el13drt 19:e0fd493816ae 1460 buttonFlagB = 0;
el13drt 12:eedda6554615 1461 scores();
el13drt 5:a0e4a67266d6 1462 }
el13drt 12:eedda6554615 1463 // if 'option' selected
el13drt 77:b37c6a0d8758 1464 if((mainOption == 2)&&(buttonFlagA)) {
el13drt 15:ff3eb0091453 1465 buttonFlagA = 0;
el13drt 19:e0fd493816ae 1466 buttonFlagB = 0;
el13drt 14:c2c969e1c6e8 1467 optionsMenu();
el13drt 1:352c50e88ffa 1468 }
el13drt 15:ff3eb0091453 1469 sleep();
el13drt 0:a8bc3aac5f69 1470 }
el13drt 3:57bab3b1c974 1471 }