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:
Fri May 08 07:30:43 2015 +0000
Revision:
68:e978b6bccff8
Parent:
67:3574ddf58be3
Child:
69:a6eb73a1a571
post memory;

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