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 14:38:04 2015 +0000
Revision:
78:e2fc547c6b99
Parent:
77:b37c6a0d8758
Child:
79:a92239ce3b20
gduhg

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