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:
Sat May 02 02:25:45 2015 +0000
Revision:
58:1111619f7cf3
Parent:
57:bd8e064020fc
Child:
59:be7a31cb8cd1
sort of 3.25;

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