Game Project by Mauro Aguiar/el14mma

Dependencies:   N5110 mbed

Committer:
el14mma
Date:
Thu May 05 15:15:14 2016 +0000
Revision:
1:32905b0858ac
Parent:
0:026fa541af7a
Mauro Aguiar el14mma : Game Project "Maze Escape"

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el14mma 1:32905b0858ac 1 /* Maze Escape
eencae 0:026fa541af7a 2
el14mma 1:32905b0858ac 3 Mauro Aguiar
eencae 0:026fa541af7a 4 */
eencae 0:026fa541af7a 5
eencae 0:026fa541af7a 6 #include "mbed.h"
el14mma 1:32905b0858ac 7 #include "N5110.h"
eencae 0:026fa541af7a 8
eencae 0:026fa541af7a 9 // change this to alter tolerance of joystick direction
eencae 0:026fa541af7a 10 #define DIRECTION_TOLERANCE 0.05
eencae 0:026fa541af7a 11
eencae 0:026fa541af7a 12 // connections for joystick
el14mma 1:32905b0858ac 13 DigitalIn button(PTB11);
el14mma 1:32905b0858ac 14 AnalogIn xPot(PTB2);
el14mma 1:32905b0858ac 15 AnalogIn yPot(PTB3);
el14mma 1:32905b0858ac 16
el14mma 1:32905b0858ac 17 N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3);
eencae 0:026fa541af7a 18
eencae 0:026fa541af7a 19 // timer to regularly read the joystick
eencae 0:026fa541af7a 20 Ticker pollJoystick;
el14mma 1:32905b0858ac 21
el14mma 1:32905b0858ac 22 // timer to move the obstacle
el14mma 1:32905b0858ac 23 Ticker ticker;
el14mma 1:32905b0858ac 24
el14mma 1:32905b0858ac 25 // timer to increase score and discharge energy
el14mma 1:32905b0858ac 26 Ticker ticker2;
el14mma 1:32905b0858ac 27
eencae 0:026fa541af7a 28 // Serial for debug
eencae 0:026fa541af7a 29 Serial serial(USBTX,USBRX);
eencae 0:026fa541af7a 30
el14mma 1:32905b0858ac 31 // menu is on mode
el14mma 1:32905b0858ac 32
el14mma 1:32905b0858ac 33 int loading = 0;
el14mma 1:32905b0858ac 34
el14mma 1:32905b0858ac 35 // origin coordinates for the cercle
el14mma 1:32905b0858ac 36 int a = 41;
el14mma 1:32905b0858ac 37 int b = 23;
el14mma 1:32905b0858ac 38
el14mma 1:32905b0858ac 39 // Save variables
el14mma 1:32905b0858ac 40
el14mma 1:32905b0858ac 41 int save1 = 1;
el14mma 1:32905b0858ac 42 int save2 = 1;
el14mma 1:32905b0858ac 43 int save3 = 1;
el14mma 1:32905b0858ac 44 int save4 = 1;
el14mma 1:32905b0858ac 45 int save5 = 1;
el14mma 1:32905b0858ac 46
el14mma 1:32905b0858ac 47 // Initial obstacle speed
el14mma 1:32905b0858ac 48
el14mma 1:32905b0858ac 49 float speed = 0.5;
el14mma 1:32905b0858ac 50 // Game Score
el14mma 1:32905b0858ac 51
el14mma 1:32905b0858ac 52 int score = 0;
el14mma 1:32905b0858ac 53
el14mma 1:32905b0858ac 54 // origin coordinates for obstacles
el14mma 1:32905b0858ac 55
el14mma 1:32905b0858ac 56 int d1 = 1;
el14mma 1:32905b0858ac 57
el14mma 1:32905b0858ac 58 int d2 = 1;
el14mma 1:32905b0858ac 59
el14mma 1:32905b0858ac 60 int d3 = 1;
el14mma 1:32905b0858ac 61
el14mma 1:32905b0858ac 62 int d4 = 83;
el14mma 1:32905b0858ac 63
el14mma 1:32905b0858ac 64 int d5;
el14mma 1:32905b0858ac 65
el14mma 1:32905b0858ac 66 int d6;
el14mma 1:32905b0858ac 67
el14mma 1:32905b0858ac 68 int b1;
el14mma 1:32905b0858ac 69
el14mma 1:32905b0858ac 70 int b2;
el14mma 1:32905b0858ac 71
el14mma 1:32905b0858ac 72 int b3 = 0;
el14mma 1:32905b0858ac 73
el14mma 1:32905b0858ac 74 int b4 = 47;
el14mma 1:32905b0858ac 75
el14mma 1:32905b0858ac 76 // Energy needed for the player to use slow mode (must discharge to one)
el14mma 1:32905b0858ac 77
el14mma 1:32905b0858ac 78 int energy = 20;
el14mma 1:32905b0858ac 79
el14mma 1:32905b0858ac 80 // Random Obstacle decision by random variable and obstacles states
el14mma 1:32905b0858ac 81
el14mma 1:32905b0858ac 82 int r = 0;
el14mma 1:32905b0858ac 83
el14mma 1:32905b0858ac 84 int state1 = 0;
el14mma 1:32905b0858ac 85 int state2 = 0;
el14mma 1:32905b0858ac 86 int state3 = 0;
el14mma 1:32905b0858ac 87 int state4 = 0;
el14mma 1:32905b0858ac 88 int state5 = 0;
el14mma 1:32905b0858ac 89 int state6 = 0;
el14mma 1:32905b0858ac 90
el14mma 1:32905b0858ac 91 // Variables used to check if the player touched an obstacle
el14mma 1:32905b0858ac 92
el14mma 1:32905b0858ac 93 int hit = 0;
el14mma 1:32905b0858ac 94 int hit1 = 0;
el14mma 1:32905b0858ac 95 int hit2 = 0;
el14mma 1:32905b0858ac 96 int hit3 = 0;
el14mma 1:32905b0858ac 97 int hit4 = 0;
el14mma 1:32905b0858ac 98 int hit5 = 0;
el14mma 1:32905b0858ac 99 int hit6 = 0;
el14mma 1:32905b0858ac 100 int hit7 = 0;
el14mma 1:32905b0858ac 101 int hit8 = 0;
el14mma 1:32905b0858ac 102
el14mma 1:32905b0858ac 103
eencae 0:026fa541af7a 104 // create enumerated type (0,1,2,3 etc. for direction)
eencae 0:026fa541af7a 105 // could be extended for diagonals etc.
eencae 0:026fa541af7a 106 enum DirectionName {
eencae 0:026fa541af7a 107 UP,
eencae 0:026fa541af7a 108 DOWN,
eencae 0:026fa541af7a 109 LEFT,
eencae 0:026fa541af7a 110 RIGHT,
eencae 0:026fa541af7a 111 CENTRE,
el14mma 1:32905b0858ac 112 DIAGONAL_RIGHT_UP,
el14mma 1:32905b0858ac 113 DIAGONAL_RIGHT_DOWN,
el14mma 1:32905b0858ac 114 DIAGONAL_LEFT_UP,
el14mma 1:32905b0858ac 115 DIAGONAL_LEFT_DOWN,
el14mma 1:32905b0858ac 116 UNKNOWN,
eencae 0:026fa541af7a 117 };
eencae 0:026fa541af7a 118
eencae 0:026fa541af7a 119 // struct for Joystick
eencae 0:026fa541af7a 120 typedef struct JoyStick Joystick;
eencae 0:026fa541af7a 121 struct JoyStick {
eencae 0:026fa541af7a 122 float x; // current x value
eencae 0:026fa541af7a 123 float x0; // 'centred' x value
eencae 0:026fa541af7a 124 float y; // current y value
eencae 0:026fa541af7a 125 float y0; // 'centred' y value
eencae 0:026fa541af7a 126 int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
eencae 0:026fa541af7a 127 DirectionName direction; // current direction
eencae 0:026fa541af7a 128 };
eencae 0:026fa541af7a 129 // create struct variable
eencae 0:026fa541af7a 130 Joystick joystick;
eencae 0:026fa541af7a 131
eencae 0:026fa541af7a 132 int printFlag = 0;
eencae 0:026fa541af7a 133
eencae 0:026fa541af7a 134 // function prototypes
eencae 0:026fa541af7a 135 void calibrateJoystick();
eencae 0:026fa541af7a 136 void updateJoystick();
el14mma 1:32905b0858ac 137 void obstacle();
el14mma 1:32905b0858ac 138 void lost();
el14mma 1:32905b0858ac 139 void erase();
el14mma 1:32905b0858ac 140 void erase2();
el14mma 1:32905b0858ac 141 void erase3();
el14mma 1:32905b0858ac 142 void erase4();
el14mma 1:32905b0858ac 143 void erase5();
el14mma 1:32905b0858ac 144 void update();
el14mma 1:32905b0858ac 145 void menu();
eencae 0:026fa541af7a 146
eencae 0:026fa541af7a 147 int main()
el14mma 1:32905b0858ac 148 {
eencae 0:026fa541af7a 149 calibrateJoystick(); // get centred values of joystick
el14mma 1:32905b0858ac 150 pollJoystick.attach(&updateJoystick,1.0/11.0); // read joystick 12 times per second (faster than obstacle max speed )
el14mma 1:32905b0858ac 151 lcd.init();
el14mma 1:32905b0858ac 152
el14mma 1:32905b0858ac 153 lcd.printString("Welcome to",0,1);
el14mma 1:32905b0858ac 154 lcd.printString("Maze Escape",0,2);
el14mma 1:32905b0858ac 155 lcd.printString("Press Button",0,3);
el14mma 1:32905b0858ac 156 lcd.printString("to Play",0,4);
el14mma 1:32905b0858ac 157
el14mma 1:32905b0858ac 158 while ( button == 0 ) {
el14mma 1:32905b0858ac 159
el14mma 1:32905b0858ac 160 sleep();
el14mma 1:32905b0858ac 161 }
el14mma 1:32905b0858ac 162
el14mma 1:32905b0858ac 163 lcd.clear();
el14mma 1:32905b0858ac 164 lcd.drawCircle(a,b,2,0);
el14mma 1:32905b0858ac 165
el14mma 1:32905b0858ac 166 // draw a line across the display at y = 47 pixels
el14mma 1:32905b0858ac 167 for (int i = 0; i < WIDTH; i++) {
el14mma 1:32905b0858ac 168 lcd.setPixel(i,47);
el14mma 1:32905b0858ac 169 }
el14mma 1:32905b0858ac 170
el14mma 1:32905b0858ac 171 // draw a line across the display at x = 0 pixels
el14mma 1:32905b0858ac 172 for (int i = 0; i < WIDTH; i++) {
el14mma 1:32905b0858ac 173 lcd.setPixel(0,i);
el14mma 1:32905b0858ac 174 }
el14mma 1:32905b0858ac 175
el14mma 1:32905b0858ac 176 // draw a line across the display at y = 0 pixels
el14mma 1:32905b0858ac 177 for (int i = 0; i < WIDTH; i++) {
el14mma 1:32905b0858ac 178 lcd.setPixel(i,0);
el14mma 1:32905b0858ac 179 }
el14mma 1:32905b0858ac 180
el14mma 1:32905b0858ac 181 // draw a line across the display at x = 83 pixels
el14mma 1:32905b0858ac 182 for (int i = 0; i < WIDTH; i++) {
el14mma 1:32905b0858ac 183 lcd.setPixel(83,i);
el14mma 1:32905b0858ac 184 }
el14mma 1:32905b0858ac 185
el14mma 1:32905b0858ac 186 ticker.attach(&obstacle,speed); // Obstacle speed
el14mma 1:32905b0858ac 187 ticker2.attach(&update,1); // points gain and energy discharge speed
el14mma 1:32905b0858ac 188
el14mma 1:32905b0858ac 189 lcd.refresh();
el14mma 1:32905b0858ac 190
eencae 0:026fa541af7a 191
eencae 0:026fa541af7a 192 while(1) {
el14mma 1:32905b0858ac 193
el14mma 1:32905b0858ac 194 if (button == energy) { // Button pressed <=> Slow mode activated
el14mma 1:32905b0858ac 195
el14mma 1:32905b0858ac 196 speed = 2;
el14mma 1:32905b0858ac 197
el14mma 1:32905b0858ac 198 ticker.detach();
el14mma 1:32905b0858ac 199
el14mma 1:32905b0858ac 200 ticker.attach(&obstacle,speed); // New Obstacle speed
el14mma 1:32905b0858ac 201
el14mma 1:32905b0858ac 202 energy = 20; // energy is recharged so the slow mode can only be used in 20 seconds.
el14mma 1:32905b0858ac 203
el14mma 1:32905b0858ac 204 // reset saves
el14mma 1:32905b0858ac 205 save1 = 1;
el14mma 1:32905b0858ac 206 save2 = 1;
el14mma 1:32905b0858ac 207 save3 = 1;
el14mma 1:32905b0858ac 208 save4 = 1;
el14mma 1:32905b0858ac 209 save5 = 1;
el14mma 1:32905b0858ac 210 }
eencae 0:026fa541af7a 211
eencae 0:026fa541af7a 212 if (printFlag) { // if flag set, clear flag and print joystick values to serial port
eencae 0:026fa541af7a 213 printFlag = 0;
eencae 0:026fa541af7a 214 serial.printf("x = %f y = %f button = %d ",joystick.x,joystick.y,joystick.button);
eencae 0:026fa541af7a 215
eencae 0:026fa541af7a 216 // check joystick direction
el14mma 1:32905b0858ac 217 if (joystick.direction == DOWN)
el14mma 1:32905b0858ac 218 {
el14mma 1:32905b0858ac 219 if (loading == 0) {
el14mma 1:32905b0858ac 220 serial.printf(" DOWN\n");
el14mma 1:32905b0858ac 221 erase();
el14mma 1:32905b0858ac 222 b=b-2;
el14mma 1:32905b0858ac 223 lost();
el14mma 1:32905b0858ac 224 if (hit ==0) {
el14mma 1:32905b0858ac 225 lcd.drawCircle(a,b,2,0);
el14mma 1:32905b0858ac 226 }
el14mma 1:32905b0858ac 227 lcd.refresh();}}
el14mma 1:32905b0858ac 228
eencae 0:026fa541af7a 229 if (joystick.direction == UP)
el14mma 1:32905b0858ac 230 {
el14mma 1:32905b0858ac 231 if (loading == 0) {
eencae 0:026fa541af7a 232 serial.printf(" UP\n");
el14mma 1:32905b0858ac 233 erase();
el14mma 1:32905b0858ac 234 b=b+2;
el14mma 1:32905b0858ac 235 lost();
el14mma 1:32905b0858ac 236 if (hit ==0) {
el14mma 1:32905b0858ac 237 lcd.drawCircle(a,b,2,0);
el14mma 1:32905b0858ac 238 }
el14mma 1:32905b0858ac 239 lcd.refresh();}}
el14mma 1:32905b0858ac 240
el14mma 1:32905b0858ac 241 if (joystick.direction == RIGHT)
el14mma 1:32905b0858ac 242 {
el14mma 1:32905b0858ac 243 if (loading == 0) {
el14mma 1:32905b0858ac 244 serial.printf(" RIGHT\n");
el14mma 1:32905b0858ac 245 erase();
el14mma 1:32905b0858ac 246 a=a+2;
el14mma 1:32905b0858ac 247 lost();
el14mma 1:32905b0858ac 248 if (hit ==0) {
el14mma 1:32905b0858ac 249 lcd.drawCircle(a,b,2,0);
el14mma 1:32905b0858ac 250 }
el14mma 1:32905b0858ac 251 lcd.refresh();}}
el14mma 1:32905b0858ac 252
eencae 0:026fa541af7a 253 if (joystick.direction == LEFT)
el14mma 1:32905b0858ac 254 {
el14mma 1:32905b0858ac 255 if (loading == 0) {
eencae 0:026fa541af7a 256 serial.printf(" LEFT\n");
el14mma 1:32905b0858ac 257 erase();
el14mma 1:32905b0858ac 258 a=a-2;
el14mma 1:32905b0858ac 259 lost();
el14mma 1:32905b0858ac 260 if (hit ==0) {
el14mma 1:32905b0858ac 261 lcd.drawCircle(a,b,2,0);
el14mma 1:32905b0858ac 262 }
el14mma 1:32905b0858ac 263 lcd.refresh();}}
el14mma 1:32905b0858ac 264
el14mma 1:32905b0858ac 265 if (joystick.direction == DIAGONAL_RIGHT_UP)
el14mma 1:32905b0858ac 266 {
el14mma 1:32905b0858ac 267 if (loading == 0) {
el14mma 1:32905b0858ac 268 serial.printf(" DIAGONAL-RIGHT-UP\n");
el14mma 1:32905b0858ac 269 erase();
el14mma 1:32905b0858ac 270 a=a+2;
el14mma 1:32905b0858ac 271 b=b+2;
el14mma 1:32905b0858ac 272 lost();
el14mma 1:32905b0858ac 273 if (hit ==0) {
el14mma 1:32905b0858ac 274 lcd.drawCircle(a,b,2,0);
el14mma 1:32905b0858ac 275 }
el14mma 1:32905b0858ac 276 lcd.refresh();}}
el14mma 1:32905b0858ac 277
el14mma 1:32905b0858ac 278 if (joystick.direction == DIAGONAL_RIGHT_DOWN)
el14mma 1:32905b0858ac 279 {
el14mma 1:32905b0858ac 280 if (loading == 0) {
el14mma 1:32905b0858ac 281 serial.printf(" DIAGONAL-RIGHT-DOWN\n");
el14mma 1:32905b0858ac 282 erase();
el14mma 1:32905b0858ac 283 a=a+2;
el14mma 1:32905b0858ac 284 b=b-2;
el14mma 1:32905b0858ac 285 lost();
el14mma 1:32905b0858ac 286 if (hit ==0) {
el14mma 1:32905b0858ac 287 lcd.drawCircle(a,b,2,0);
el14mma 1:32905b0858ac 288 }
el14mma 1:32905b0858ac 289 lcd.refresh();}}
el14mma 1:32905b0858ac 290
el14mma 1:32905b0858ac 291 if (joystick.direction == DIAGONAL_LEFT_UP)
el14mma 1:32905b0858ac 292 {
el14mma 1:32905b0858ac 293 if (loading == 0) {
el14mma 1:32905b0858ac 294 serial.printf(" DIAGONAL-LEFT-UP\n");
el14mma 1:32905b0858ac 295 erase();
el14mma 1:32905b0858ac 296 a=a-2;
el14mma 1:32905b0858ac 297 b=b+2;
el14mma 1:32905b0858ac 298 lost();
el14mma 1:32905b0858ac 299 if (hit ==0) {
el14mma 1:32905b0858ac 300 lcd.drawCircle(a,b,2,0);
el14mma 1:32905b0858ac 301 }
el14mma 1:32905b0858ac 302 lcd.refresh();}}
el14mma 1:32905b0858ac 303
el14mma 1:32905b0858ac 304 if (joystick.direction == DIAGONAL_LEFT_DOWN)
el14mma 1:32905b0858ac 305 {
el14mma 1:32905b0858ac 306 if (loading == 0) {
el14mma 1:32905b0858ac 307 serial.printf(" DIAGONAL-RIGHT-UP\n");
el14mma 1:32905b0858ac 308 erase();
el14mma 1:32905b0858ac 309 a=a-2;
el14mma 1:32905b0858ac 310 b=b-2;
el14mma 1:32905b0858ac 311 lost();
el14mma 1:32905b0858ac 312 if (hit ==0) {
el14mma 1:32905b0858ac 313 lcd.drawCircle(a,b,2,0);
el14mma 1:32905b0858ac 314 }
el14mma 1:32905b0858ac 315 lcd.refresh();}}
el14mma 1:32905b0858ac 316
eencae 0:026fa541af7a 317 if (joystick.direction == CENTRE)
el14mma 1:32905b0858ac 318 {
el14mma 1:32905b0858ac 319 if (loading == 0) {
eencae 0:026fa541af7a 320 serial.printf(" CENTRE\n");
el14mma 1:32905b0858ac 321 erase();
el14mma 1:32905b0858ac 322 b=b-1;
el14mma 1:32905b0858ac 323 lost();
el14mma 1:32905b0858ac 324 if (hit ==0) {
el14mma 1:32905b0858ac 325 lcd.drawCircle(a,b,2,0);
el14mma 1:32905b0858ac 326 }
el14mma 1:32905b0858ac 327 lcd.refresh();
el14mma 1:32905b0858ac 328 }}
el14mma 1:32905b0858ac 329
el14mma 1:32905b0858ac 330
eencae 0:026fa541af7a 331 if (joystick.direction == UNKNOWN)
el14mma 1:32905b0858ac 332 {serial.printf(" Unsupported direction\n");}
el14mma 1:32905b0858ac 333
eencae 0:026fa541af7a 334
eencae 0:026fa541af7a 335 }
el14mma 1:32905b0858ac 336
el14mma 1:32905b0858ac 337 }
eencae 0:026fa541af7a 338
eencae 0:026fa541af7a 339 }
eencae 0:026fa541af7a 340
eencae 0:026fa541af7a 341 // read default positions of the joystick to calibrate later readings
eencae 0:026fa541af7a 342 void calibrateJoystick()
eencae 0:026fa541af7a 343 {
eencae 0:026fa541af7a 344 button.mode(PullDown);
eencae 0:026fa541af7a 345 // must not move during calibration
eencae 0:026fa541af7a 346 joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
eencae 0:026fa541af7a 347 joystick.y0 = yPot;
eencae 0:026fa541af7a 348 }
eencae 0:026fa541af7a 349 void updateJoystick()
eencae 0:026fa541af7a 350 {
eencae 0:026fa541af7a 351 // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
eencae 0:026fa541af7a 352 joystick.x = xPot - joystick.x0;
eencae 0:026fa541af7a 353 joystick.y = yPot - joystick.y0;
eencae 0:026fa541af7a 354 // read button state
eencae 0:026fa541af7a 355 joystick.button = button;
eencae 0:026fa541af7a 356
el14mma 1:32905b0858ac 357 // calculate direction depending on x,y values
eencae 0:026fa541af7a 358 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
eencae 0:026fa541af7a 359 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el14mma 1:32905b0858ac 360 joystick.direction = CENTRE;
el14mma 1:32905b0858ac 361
eencae 0:026fa541af7a 362 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el14mma 1:32905b0858ac 363 joystick.direction = DOWN; // inverted because of screen
el14mma 1:32905b0858ac 364
eencae 0:026fa541af7a 365 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el14mma 1:32905b0858ac 366 joystick.direction = UP; // inverted because of screen
el14mma 1:32905b0858ac 367
eencae 0:026fa541af7a 368 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el14mma 1:32905b0858ac 369 joystick.direction = LEFT;
el14mma 1:32905b0858ac 370
eencae 0:026fa541af7a 371 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el14mma 1:32905b0858ac 372 joystick.direction = RIGHT;
el14mma 1:32905b0858ac 373
el14mma 1:32905b0858ac 374 } else if ( joystick.x < DIRECTION_TOLERANCE && joystick.y < DIRECTION_TOLERANCE) {
el14mma 1:32905b0858ac 375 joystick.direction = DIAGONAL_RIGHT_UP;
el14mma 1:32905b0858ac 376
el14mma 1:32905b0858ac 377 } else if ( joystick.x < DIRECTION_TOLERANCE && joystick.y > DIRECTION_TOLERANCE) {
el14mma 1:32905b0858ac 378 joystick.direction = DIAGONAL_RIGHT_DOWN;
el14mma 1:32905b0858ac 379
el14mma 1:32905b0858ac 380 } else if ( joystick.x > DIRECTION_TOLERANCE && joystick.y < DIRECTION_TOLERANCE) {
el14mma 1:32905b0858ac 381 joystick.direction = DIAGONAL_LEFT_UP;
el14mma 1:32905b0858ac 382 }
el14mma 1:32905b0858ac 383
el14mma 1:32905b0858ac 384 else if ( joystick.x > DIRECTION_TOLERANCE && joystick.y > DIRECTION_TOLERANCE) {
el14mma 1:32905b0858ac 385 joystick.direction = DIAGONAL_LEFT_DOWN;
el14mma 1:32905b0858ac 386 }
el14mma 1:32905b0858ac 387
el14mma 1:32905b0858ac 388 else {
el14mma 1:32905b0858ac 389 joystick.direction = UNKNOWN; // In case the reading is not accurate
eencae 0:026fa541af7a 390 }
eencae 0:026fa541af7a 391
eencae 0:026fa541af7a 392 // set flag for printing
eencae 0:026fa541af7a 393 printFlag = 1;
el14mma 1:32905b0858ac 394 }
el14mma 1:32905b0858ac 395 void obstacle()
el14mma 1:32905b0858ac 396 {
el14mma 1:32905b0858ac 397 if (score > 15 && score <= 30 ) {
el14mma 1:32905b0858ac 398
el14mma 1:32905b0858ac 399 if (save1 == 1) { // only happens once
el14mma 1:32905b0858ac 400
el14mma 1:32905b0858ac 401 save1 = 0;
el14mma 1:32905b0858ac 402
el14mma 1:32905b0858ac 403 speed = 0.4;
el14mma 1:32905b0858ac 404
el14mma 1:32905b0858ac 405 ticker.detach();
el14mma 1:32905b0858ac 406
el14mma 1:32905b0858ac 407 ticker.attach(&obstacle,speed); // New Obstacle speed
el14mma 1:32905b0858ac 408
el14mma 1:32905b0858ac 409 }
el14mma 1:32905b0858ac 410
el14mma 1:32905b0858ac 411 }
el14mma 1:32905b0858ac 412
el14mma 1:32905b0858ac 413 else if (score >30 && score<=50) {
el14mma 1:32905b0858ac 414
el14mma 1:32905b0858ac 415 if (save2 == 1) {
el14mma 1:32905b0858ac 416
el14mma 1:32905b0858ac 417 save2 = 0;
el14mma 1:32905b0858ac 418
el14mma 1:32905b0858ac 419 speed = 0.3;
el14mma 1:32905b0858ac 420
el14mma 1:32905b0858ac 421 ticker.detach();
el14mma 1:32905b0858ac 422
el14mma 1:32905b0858ac 423 ticker.attach(&obstacle,speed); // New Obstacle speed
el14mma 1:32905b0858ac 424
el14mma 1:32905b0858ac 425 }
el14mma 1:32905b0858ac 426 }
el14mma 1:32905b0858ac 427
el14mma 1:32905b0858ac 428 else if (score>50 && score<=80) {
el14mma 1:32905b0858ac 429
el14mma 1:32905b0858ac 430 if (save3 == 1); {
el14mma 1:32905b0858ac 431
el14mma 1:32905b0858ac 432 save3 = 0;
el14mma 1:32905b0858ac 433
el14mma 1:32905b0858ac 434 speed = 0.2;
el14mma 1:32905b0858ac 435
el14mma 1:32905b0858ac 436 ticker.detach();
el14mma 1:32905b0858ac 437
el14mma 1:32905b0858ac 438 ticker.attach(&obstacle,speed); // New Obstacle speed
el14mma 1:32905b0858ac 439
el14mma 1:32905b0858ac 440 }
el14mma 1:32905b0858ac 441 }
el14mma 1:32905b0858ac 442
el14mma 1:32905b0858ac 443 else if (score>80 && score<=110) {
el14mma 1:32905b0858ac 444
el14mma 1:32905b0858ac 445 if (save4 == 1) {
el14mma 1:32905b0858ac 446
el14mma 1:32905b0858ac 447 save4 = 0;
el14mma 1:32905b0858ac 448
el14mma 1:32905b0858ac 449 speed = 0.15;
el14mma 1:32905b0858ac 450
el14mma 1:32905b0858ac 451 ticker.detach();
el14mma 1:32905b0858ac 452
el14mma 1:32905b0858ac 453 ticker.attach(&obstacle,speed); // New Obstacle speed
el14mma 1:32905b0858ac 454
el14mma 1:32905b0858ac 455 }
el14mma 1:32905b0858ac 456 }
el14mma 1:32905b0858ac 457 else if (score>110) { // Fastest mode
el14mma 1:32905b0858ac 458
el14mma 1:32905b0858ac 459 if (save5 == 1) {
el14mma 1:32905b0858ac 460
el14mma 1:32905b0858ac 461 save5 = 0;
el14mma 1:32905b0858ac 462
el14mma 1:32905b0858ac 463 speed = 0.1;
el14mma 1:32905b0858ac 464
el14mma 1:32905b0858ac 465 ticker.detach();
el14mma 1:32905b0858ac 466
el14mma 1:32905b0858ac 467 ticker.attach(&obstacle,speed); // New Obstacle speed
el14mma 1:32905b0858ac 468
el14mma 1:32905b0858ac 469 }
el14mma 1:32905b0858ac 470
el14mma 1:32905b0858ac 471 }
el14mma 1:32905b0858ac 472
el14mma 1:32905b0858ac 473 if (d2-d1>10 || d1-d2>10) { // minimun distance
el14mma 1:32905b0858ac 474
el14mma 1:32905b0858ac 475 r = rand() %6; // generate random number between 0 and 5 for obstacle
el14mma 1:32905b0858ac 476
el14mma 1:32905b0858ac 477 }
el14mma 1:32905b0858ac 478
el14mma 1:32905b0858ac 479 if (r == 0 || state1 == 1) { // obstacle 1
el14mma 1:32905b0858ac 480
el14mma 1:32905b0858ac 481 if (state1 == 0) { // once
el14mma 1:32905b0858ac 482
el14mma 1:32905b0858ac 483 // draw a line across the display at y = 0 pixels
el14mma 1:32905b0858ac 484 for (int i = 0; i < WIDTH; i++) {
el14mma 1:32905b0858ac 485 lcd.setPixel(i,0);
el14mma 1:32905b0858ac 486 }
el14mma 1:32905b0858ac 487
el14mma 1:32905b0858ac 488 }
el14mma 1:32905b0858ac 489
el14mma 1:32905b0858ac 490 if (d1<47) { // less than maximun vertical pixels
el14mma 1:32905b0858ac 491
el14mma 1:32905b0858ac 492 state1 = 1; // on
el14mma 1:32905b0858ac 493
el14mma 1:32905b0858ac 494 // erase previous line
el14mma 1:32905b0858ac 495 for (int i = 41; i < 83; i++) {
el14mma 1:32905b0858ac 496 lcd.clearPixel(i,d1);
el14mma 1:32905b0858ac 497 }
el14mma 1:32905b0858ac 498
el14mma 1:32905b0858ac 499 d1=d1+1;
el14mma 1:32905b0858ac 500
el14mma 1:32905b0858ac 501 lcd.drawLine(83,d1,41,d1,1);
el14mma 1:32905b0858ac 502
el14mma 1:32905b0858ac 503 lcd.refresh();
el14mma 1:32905b0858ac 504
el14mma 1:32905b0858ac 505
el14mma 1:32905b0858ac 506 }
el14mma 1:32905b0858ac 507
el14mma 1:32905b0858ac 508 else {
el14mma 1:32905b0858ac 509
el14mma 1:32905b0858ac 510 d1 = 1;
el14mma 1:32905b0858ac 511
el14mma 1:32905b0858ac 512 state1 = 0; // off
el14mma 1:32905b0858ac 513
el14mma 1:32905b0858ac 514 }
el14mma 1:32905b0858ac 515 }
el14mma 1:32905b0858ac 516
el14mma 1:32905b0858ac 517 if (r==1 || state2 == 1) { // obstacle 2
el14mma 1:32905b0858ac 518
el14mma 1:32905b0858ac 519 if (d2<47) { // less than maximun vertical pixels
el14mma 1:32905b0858ac 520
el14mma 1:32905b0858ac 521 state2 = 1; // on
el14mma 1:32905b0858ac 522
el14mma 1:32905b0858ac 523 // erase previous line
el14mma 1:32905b0858ac 524 for (int i = 1; i < 42; i++) {
el14mma 1:32905b0858ac 525 lcd.clearPixel(i,d2);
el14mma 1:32905b0858ac 526 }
el14mma 1:32905b0858ac 527
el14mma 1:32905b0858ac 528 d2=d2+1;
el14mma 1:32905b0858ac 529
el14mma 1:32905b0858ac 530 lcd.drawLine(41,d2,0,d2,1);
el14mma 1:32905b0858ac 531
el14mma 1:32905b0858ac 532 lcd.refresh();
el14mma 1:32905b0858ac 533
el14mma 1:32905b0858ac 534
el14mma 1:32905b0858ac 535 }
el14mma 1:32905b0858ac 536
el14mma 1:32905b0858ac 537 else {
el14mma 1:32905b0858ac 538
el14mma 1:32905b0858ac 539 d2 = 1;
el14mma 1:32905b0858ac 540
el14mma 1:32905b0858ac 541 state2 = 0; // off
el14mma 1:32905b0858ac 542
el14mma 1:32905b0858ac 543 }
el14mma 1:32905b0858ac 544 }
el14mma 1:32905b0858ac 545
el14mma 1:32905b0858ac 546 if (r==2 || state3 == 1) { // obstacle 3
el14mma 1:32905b0858ac 547
el14mma 1:32905b0858ac 548 if (state3 == 0) { // Only happens once inside the loop
el14mma 1:32905b0858ac 549
el14mma 1:32905b0858ac 550 b1 = b;
el14mma 1:32905b0858ac 551 }
el14mma 1:32905b0858ac 552
el14mma 1:32905b0858ac 553 if (d3<84) { // less than maximun horizontal pixels
el14mma 1:32905b0858ac 554
el14mma 1:32905b0858ac 555 state3 = 1; // on
el14mma 1:32905b0858ac 556
el14mma 1:32905b0858ac 557 // erase previous circle
el14mma 1:32905b0858ac 558 erase2();
el14mma 1:32905b0858ac 559
el14mma 1:32905b0858ac 560 d3=d3+2;
el14mma 1:32905b0858ac 561
el14mma 1:32905b0858ac 562 lcd.drawCircle(d3,b1,2,0);
el14mma 1:32905b0858ac 563
el14mma 1:32905b0858ac 564 lcd.refresh();
el14mma 1:32905b0858ac 565
el14mma 1:32905b0858ac 566
el14mma 1:32905b0858ac 567 }
el14mma 1:32905b0858ac 568
el14mma 1:32905b0858ac 569 else {
el14mma 1:32905b0858ac 570
el14mma 1:32905b0858ac 571 d3 = 1;
el14mma 1:32905b0858ac 572
el14mma 1:32905b0858ac 573 state3 = 0; // off
el14mma 1:32905b0858ac 574
el14mma 1:32905b0858ac 575 }
el14mma 1:32905b0858ac 576
el14mma 1:32905b0858ac 577 }
el14mma 1:32905b0858ac 578
el14mma 1:32905b0858ac 579 if (r==3 || state4 == 1) { // obstacle 4
el14mma 1:32905b0858ac 580
el14mma 1:32905b0858ac 581 if (state4 == 0) { // Only happens once inside the loop
el14mma 1:32905b0858ac 582
el14mma 1:32905b0858ac 583 b2 = b;
el14mma 1:32905b0858ac 584 }
el14mma 1:32905b0858ac 585
el14mma 1:32905b0858ac 586 if (d4>=0) { // minimun horizontal pixels
el14mma 1:32905b0858ac 587
el14mma 1:32905b0858ac 588 state4 = 1; // on
el14mma 1:32905b0858ac 589
el14mma 1:32905b0858ac 590 // erase previous circle
el14mma 1:32905b0858ac 591 erase3();
el14mma 1:32905b0858ac 592
el14mma 1:32905b0858ac 593 d4=d4-2;
el14mma 1:32905b0858ac 594
el14mma 1:32905b0858ac 595 lcd.drawCircle(d4,b2,2,0);
el14mma 1:32905b0858ac 596
el14mma 1:32905b0858ac 597 lcd.refresh();
el14mma 1:32905b0858ac 598
el14mma 1:32905b0858ac 599
el14mma 1:32905b0858ac 600 }
el14mma 1:32905b0858ac 601
el14mma 1:32905b0858ac 602 else {
el14mma 1:32905b0858ac 603
el14mma 1:32905b0858ac 604 d4 = 83;
el14mma 1:32905b0858ac 605
el14mma 1:32905b0858ac 606 state4 = 0; // off
el14mma 1:32905b0858ac 607
el14mma 1:32905b0858ac 608 }
el14mma 1:32905b0858ac 609
el14mma 1:32905b0858ac 610 }
el14mma 1:32905b0858ac 611
el14mma 1:32905b0858ac 612 if (r==4 || state5 == 1) { // obstacle 5
el14mma 1:32905b0858ac 613
el14mma 1:32905b0858ac 614 if (state5 == 0) { // Only happens once inside the loop
el14mma 1:32905b0858ac 615
el14mma 1:32905b0858ac 616 d5 = a;
el14mma 1:32905b0858ac 617 }
el14mma 1:32905b0858ac 618
el14mma 1:32905b0858ac 619 if (b3<47) { // minimun vertical pixels
el14mma 1:32905b0858ac 620
el14mma 1:32905b0858ac 621 state5 = 1; // on
el14mma 1:32905b0858ac 622
el14mma 1:32905b0858ac 623 // erase previous circle
el14mma 1:32905b0858ac 624 erase4();
el14mma 1:32905b0858ac 625
el14mma 1:32905b0858ac 626 b3=b3+2;
el14mma 1:32905b0858ac 627
el14mma 1:32905b0858ac 628 lcd.drawCircle(d5,b3,2,0);
el14mma 1:32905b0858ac 629
el14mma 1:32905b0858ac 630 lcd.refresh();
el14mma 1:32905b0858ac 631
el14mma 1:32905b0858ac 632
el14mma 1:32905b0858ac 633 }
el14mma 1:32905b0858ac 634
el14mma 1:32905b0858ac 635 else {
el14mma 1:32905b0858ac 636
el14mma 1:32905b0858ac 637 b3 = 0;
el14mma 1:32905b0858ac 638
el14mma 1:32905b0858ac 639 state5 = 0; // off
el14mma 1:32905b0858ac 640
el14mma 1:32905b0858ac 641 }
el14mma 1:32905b0858ac 642
el14mma 1:32905b0858ac 643 }
el14mma 1:32905b0858ac 644
el14mma 1:32905b0858ac 645 if (r==5 || state6 == 1) { // obstacle 6
el14mma 1:32905b0858ac 646
el14mma 1:32905b0858ac 647 if (state6 == 0) { // Only happens once inside the loop
el14mma 1:32905b0858ac 648
el14mma 1:32905b0858ac 649 d6 = a;
el14mma 1:32905b0858ac 650 }
el14mma 1:32905b0858ac 651
el14mma 1:32905b0858ac 652 if (b4>=0) {
el14mma 1:32905b0858ac 653
el14mma 1:32905b0858ac 654 state6 = 1; // on
el14mma 1:32905b0858ac 655
el14mma 1:32905b0858ac 656 // erase previous circle
el14mma 1:32905b0858ac 657 erase5();
el14mma 1:32905b0858ac 658
el14mma 1:32905b0858ac 659 b4=b4-2;
el14mma 1:32905b0858ac 660
el14mma 1:32905b0858ac 661 lcd.drawCircle(d6,b4,2,0);
el14mma 1:32905b0858ac 662
el14mma 1:32905b0858ac 663 lcd.refresh();
el14mma 1:32905b0858ac 664
el14mma 1:32905b0858ac 665
el14mma 1:32905b0858ac 666 }
el14mma 1:32905b0858ac 667
el14mma 1:32905b0858ac 668 else {
el14mma 1:32905b0858ac 669
el14mma 1:32905b0858ac 670 b4 = 47;
el14mma 1:32905b0858ac 671
el14mma 1:32905b0858ac 672 state6 = 0; // off
el14mma 1:32905b0858ac 673
el14mma 1:32905b0858ac 674 }
el14mma 1:32905b0858ac 675
el14mma 1:32905b0858ac 676 }
el14mma 1:32905b0858ac 677
el14mma 1:32905b0858ac 678 }
el14mma 1:32905b0858ac 679
el14mma 1:32905b0858ac 680
el14mma 1:32905b0858ac 681
el14mma 1:32905b0858ac 682 void lost() // Check if player lost
el14mma 1:32905b0858ac 683 {
el14mma 1:32905b0858ac 684 int x = 2;
el14mma 1:32905b0858ac 685
el14mma 1:32905b0858ac 686 int y = 0;
el14mma 1:32905b0858ac 687
el14mma 1:32905b0858ac 688 int radiusError = 1-x;
el14mma 1:32905b0858ac 689
el14mma 1:32905b0858ac 690 while(x >= y) {
el14mma 1:32905b0858ac 691
el14mma 1:32905b0858ac 692 // Check if the pixels where the player move to are clear
el14mma 1:32905b0858ac 693
el14mma 1:32905b0858ac 694 hit1 = lcd.getPixel( x + a, y + b);
el14mma 1:32905b0858ac 695 hit2 = lcd.getPixel(-x + a, y + b);
el14mma 1:32905b0858ac 696 hit3 = lcd.getPixel( y + a, x + b);
el14mma 1:32905b0858ac 697 hit4 = lcd.getPixel(-y + a, x + b);
el14mma 1:32905b0858ac 698 hit5 = lcd.getPixel(-y + a, -x + b);
el14mma 1:32905b0858ac 699 hit6 = lcd.getPixel( y + a, -x + b);
el14mma 1:32905b0858ac 700 hit7 = lcd.getPixel( x + a, -y + b);
el14mma 1:32905b0858ac 701 hit8 = lcd.getPixel(-x + a, -y + b);
el14mma 1:32905b0858ac 702
el14mma 1:32905b0858ac 703
el14mma 1:32905b0858ac 704 y++;
el14mma 1:32905b0858ac 705
el14mma 1:32905b0858ac 706 if (radiusError<0) {
el14mma 1:32905b0858ac 707 radiusError += 2 * y + 1;
el14mma 1:32905b0858ac 708 } else {
el14mma 1:32905b0858ac 709 x--;
el14mma 1:32905b0858ac 710 radiusError += 2 * (y - x) + 1;
el14mma 1:32905b0858ac 711 }
el14mma 1:32905b0858ac 712
el14mma 1:32905b0858ac 713 }
el14mma 1:32905b0858ac 714
el14mma 1:32905b0858ac 715 hit = hit1+hit2+hit3+hit4+hit5+hit6+hit7+hit8;
el14mma 1:32905b0858ac 716
el14mma 1:32905b0858ac 717 if (hit != 0) { // touched obstacle
el14mma 1:32905b0858ac 718
el14mma 1:32905b0858ac 719 ticker.detach();
el14mma 1:32905b0858ac 720 ticker2.detach();
el14mma 1:32905b0858ac 721
el14mma 1:32905b0858ac 722 loading = 1;
el14mma 1:32905b0858ac 723
el14mma 1:32905b0858ac 724 lcd.clear();
el14mma 1:32905b0858ac 725
el14mma 1:32905b0858ac 726 lcd.printString("Game Over",0,1);
el14mma 1:32905b0858ac 727 lcd.printString("Press Button",0,3);
el14mma 1:32905b0858ac 728 lcd.printString("to exit",0,4);
el14mma 1:32905b0858ac 729
el14mma 1:32905b0858ac 730 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
el14mma 1:32905b0858ac 731
el14mma 1:32905b0858ac 732 int length = sprintf(buffer,"Score %2d",score);
el14mma 1:32905b0858ac 733 lcd.printString(buffer,0,2);
el14mma 1:32905b0858ac 734 lcd.refresh();
el14mma 1:32905b0858ac 735
el14mma 1:32905b0858ac 736 while (button == 0) { // button not pressed
el14mma 1:32905b0858ac 737
el14mma 1:32905b0858ac 738 sleep();
el14mma 1:32905b0858ac 739
el14mma 1:32905b0858ac 740 }
el14mma 1:32905b0858ac 741
el14mma 1:32905b0858ac 742 menu();
el14mma 1:32905b0858ac 743
el14mma 1:32905b0858ac 744 }
el14mma 1:32905b0858ac 745
el14mma 1:32905b0858ac 746
el14mma 1:32905b0858ac 747 }
el14mma 1:32905b0858ac 748
el14mma 1:32905b0858ac 749 void erase()
el14mma 1:32905b0858ac 750 {
el14mma 1:32905b0858ac 751 int x = 2;
el14mma 1:32905b0858ac 752
el14mma 1:32905b0858ac 753 int y = 0;
el14mma 1:32905b0858ac 754
el14mma 1:32905b0858ac 755 int radiusError = 1-x;
el14mma 1:32905b0858ac 756
el14mma 1:32905b0858ac 757 while(x >= y) {
el14mma 1:32905b0858ac 758
el14mma 1:32905b0858ac 759 lcd.clearPixel( x + a, y + b);
el14mma 1:32905b0858ac 760 lcd.clearPixel(-x + a, y + b);
el14mma 1:32905b0858ac 761 lcd.clearPixel( y + a, x + b);
el14mma 1:32905b0858ac 762 lcd.clearPixel(-y + a, x + b);
el14mma 1:32905b0858ac 763 lcd.clearPixel(-y + a, -x + b);
el14mma 1:32905b0858ac 764 lcd.clearPixel( y + a, -x + b);
el14mma 1:32905b0858ac 765 lcd.clearPixel( x + a, -y + b);
el14mma 1:32905b0858ac 766 lcd.clearPixel(-x + a, -y + b);
el14mma 1:32905b0858ac 767
el14mma 1:32905b0858ac 768
el14mma 1:32905b0858ac 769 y++;
el14mma 1:32905b0858ac 770
el14mma 1:32905b0858ac 771 if (radiusError<0) {
el14mma 1:32905b0858ac 772 radiusError += 2 * y + 1;
el14mma 1:32905b0858ac 773 } else {
el14mma 1:32905b0858ac 774 x--;
el14mma 1:32905b0858ac 775 radiusError += 2 * (y - x) + 1;
el14mma 1:32905b0858ac 776 }
el14mma 1:32905b0858ac 777
el14mma 1:32905b0858ac 778 }
el14mma 1:32905b0858ac 779
el14mma 1:32905b0858ac 780 lcd.refresh();
el14mma 1:32905b0858ac 781 }
el14mma 1:32905b0858ac 782
el14mma 1:32905b0858ac 783 void erase2() {
el14mma 1:32905b0858ac 784
el14mma 1:32905b0858ac 785 int x = 2;
el14mma 1:32905b0858ac 786
el14mma 1:32905b0858ac 787 int y = 0;
el14mma 1:32905b0858ac 788
el14mma 1:32905b0858ac 789 int radiusError = 1-x;
el14mma 1:32905b0858ac 790
el14mma 1:32905b0858ac 791 while(x >= y) {
el14mma 1:32905b0858ac 792
el14mma 1:32905b0858ac 793 lcd.clearPixel( x + d3, y + b1);
el14mma 1:32905b0858ac 794 lcd.clearPixel(-x + d3, y + b1);
el14mma 1:32905b0858ac 795 lcd.clearPixel( y + d3, x + b1);
el14mma 1:32905b0858ac 796 lcd.clearPixel(-y + d3, x + b1);
el14mma 1:32905b0858ac 797 lcd.clearPixel(-y + d3, -x + b1);
el14mma 1:32905b0858ac 798 lcd.clearPixel( y + d3, -x + b1);
el14mma 1:32905b0858ac 799 lcd.clearPixel( x + d3, -y + b1);
el14mma 1:32905b0858ac 800 lcd.clearPixel(-x + d3, -y + b1);
el14mma 1:32905b0858ac 801
el14mma 1:32905b0858ac 802
el14mma 1:32905b0858ac 803 y++;
el14mma 1:32905b0858ac 804
el14mma 1:32905b0858ac 805 if (radiusError<0) {
el14mma 1:32905b0858ac 806 radiusError += 2 * y + 1;
el14mma 1:32905b0858ac 807 } else {
el14mma 1:32905b0858ac 808 x--;
el14mma 1:32905b0858ac 809 radiusError += 2 * (y - x) + 1;
el14mma 1:32905b0858ac 810 }
el14mma 1:32905b0858ac 811
el14mma 1:32905b0858ac 812 }
el14mma 1:32905b0858ac 813
el14mma 1:32905b0858ac 814 lcd.refresh();
el14mma 1:32905b0858ac 815 }
el14mma 1:32905b0858ac 816
el14mma 1:32905b0858ac 817 void erase3(){
el14mma 1:32905b0858ac 818
el14mma 1:32905b0858ac 819 int x = 2;
el14mma 1:32905b0858ac 820
el14mma 1:32905b0858ac 821 int y = 0;
el14mma 1:32905b0858ac 822
el14mma 1:32905b0858ac 823 int radiusError = 1-x;
el14mma 1:32905b0858ac 824
el14mma 1:32905b0858ac 825 while(x >= y) {
el14mma 1:32905b0858ac 826
el14mma 1:32905b0858ac 827 lcd.clearPixel( x + d4, y + b2);
el14mma 1:32905b0858ac 828 lcd.clearPixel(-x + d4, y + b2);
el14mma 1:32905b0858ac 829 lcd.clearPixel( y + d4, x + b2);
el14mma 1:32905b0858ac 830 lcd.clearPixel(-y + d4, x + b2);
el14mma 1:32905b0858ac 831 lcd.clearPixel(-y + d4, -x + b2);
el14mma 1:32905b0858ac 832 lcd.clearPixel( y + d4, -x + b2);
el14mma 1:32905b0858ac 833 lcd.clearPixel( x + d4, -y + b2);
el14mma 1:32905b0858ac 834 lcd.clearPixel(-x + d4, -y + b2);
el14mma 1:32905b0858ac 835
el14mma 1:32905b0858ac 836
el14mma 1:32905b0858ac 837 y++;
el14mma 1:32905b0858ac 838
el14mma 1:32905b0858ac 839 if (radiusError<0) {
el14mma 1:32905b0858ac 840 radiusError += 2 * y + 1;
el14mma 1:32905b0858ac 841 } else {
el14mma 1:32905b0858ac 842 x--;
el14mma 1:32905b0858ac 843 radiusError += 2 * (y - x) + 1;
el14mma 1:32905b0858ac 844 }
el14mma 1:32905b0858ac 845
el14mma 1:32905b0858ac 846 }
el14mma 1:32905b0858ac 847
el14mma 1:32905b0858ac 848 lcd.refresh();
el14mma 1:32905b0858ac 849 }
el14mma 1:32905b0858ac 850
el14mma 1:32905b0858ac 851 void erase4(){
el14mma 1:32905b0858ac 852
el14mma 1:32905b0858ac 853 int x = 2;
el14mma 1:32905b0858ac 854
el14mma 1:32905b0858ac 855 int y = 0;
el14mma 1:32905b0858ac 856
el14mma 1:32905b0858ac 857 int radiusError = 1-x;
el14mma 1:32905b0858ac 858
el14mma 1:32905b0858ac 859 while(x >= y) {
el14mma 1:32905b0858ac 860
el14mma 1:32905b0858ac 861 lcd.clearPixel( x + d5, y + b3);
el14mma 1:32905b0858ac 862 lcd.clearPixel(-x + d5, y + b3);
el14mma 1:32905b0858ac 863 lcd.clearPixel( y + d5, x + b3);
el14mma 1:32905b0858ac 864 lcd.clearPixel(-y + d5, x + b3);
el14mma 1:32905b0858ac 865 lcd.clearPixel(-y + d5, -x + b3);
el14mma 1:32905b0858ac 866 lcd.clearPixel( y + d5, -x + b3);
el14mma 1:32905b0858ac 867 lcd.clearPixel( x + d5, -y + b3);
el14mma 1:32905b0858ac 868 lcd.clearPixel(-x + d5, -y + b3);
el14mma 1:32905b0858ac 869
el14mma 1:32905b0858ac 870
el14mma 1:32905b0858ac 871 y++;
el14mma 1:32905b0858ac 872
el14mma 1:32905b0858ac 873 if (radiusError<0) {
el14mma 1:32905b0858ac 874 radiusError += 2 * y + 1;
el14mma 1:32905b0858ac 875 } else {
el14mma 1:32905b0858ac 876 x--;
el14mma 1:32905b0858ac 877 radiusError += 2 * (y - x) + 1;
el14mma 1:32905b0858ac 878 }
el14mma 1:32905b0858ac 879
el14mma 1:32905b0858ac 880 }
el14mma 1:32905b0858ac 881
el14mma 1:32905b0858ac 882 lcd.refresh();
el14mma 1:32905b0858ac 883 }
el14mma 1:32905b0858ac 884
el14mma 1:32905b0858ac 885 void erase5(){
el14mma 1:32905b0858ac 886
el14mma 1:32905b0858ac 887 int x = 2;
el14mma 1:32905b0858ac 888
el14mma 1:32905b0858ac 889 int y = 0;
el14mma 1:32905b0858ac 890
el14mma 1:32905b0858ac 891 int radiusError = 1-x;
el14mma 1:32905b0858ac 892
el14mma 1:32905b0858ac 893 while(x >= y) {
el14mma 1:32905b0858ac 894
el14mma 1:32905b0858ac 895 lcd.clearPixel( x + d6, y + b4);
el14mma 1:32905b0858ac 896 lcd.clearPixel(-x + d6, y + b4);
el14mma 1:32905b0858ac 897 lcd.clearPixel( y + d6, x + b4);
el14mma 1:32905b0858ac 898 lcd.clearPixel(-y + d6, x + b4);
el14mma 1:32905b0858ac 899 lcd.clearPixel(-y + d6, -x + b4);
el14mma 1:32905b0858ac 900 lcd.clearPixel( y + d6, -x + b4);
el14mma 1:32905b0858ac 901 lcd.clearPixel( x + d6, -y + b4);
el14mma 1:32905b0858ac 902 lcd.clearPixel(-x + d6, -y + b4);
el14mma 1:32905b0858ac 903
el14mma 1:32905b0858ac 904
el14mma 1:32905b0858ac 905 y++;
el14mma 1:32905b0858ac 906
el14mma 1:32905b0858ac 907 if (radiusError<0) {
el14mma 1:32905b0858ac 908 radiusError += 2 * y + 1;
el14mma 1:32905b0858ac 909 } else {
el14mma 1:32905b0858ac 910 x--;
el14mma 1:32905b0858ac 911 radiusError += 2 * (y - x) + 1;
el14mma 1:32905b0858ac 912 }
el14mma 1:32905b0858ac 913
el14mma 1:32905b0858ac 914 }
el14mma 1:32905b0858ac 915
el14mma 1:32905b0858ac 916 lcd.refresh();
el14mma 1:32905b0858ac 917 }
el14mma 1:32905b0858ac 918
el14mma 1:32905b0858ac 919 void update() {
el14mma 1:32905b0858ac 920
el14mma 1:32905b0858ac 921 score = score+1;
el14mma 1:32905b0858ac 922
el14mma 1:32905b0858ac 923 if (energy > 1) {
el14mma 1:32905b0858ac 924
el14mma 1:32905b0858ac 925 energy = energy-1;
el14mma 1:32905b0858ac 926
el14mma 1:32905b0858ac 927 }
el14mma 1:32905b0858ac 928
el14mma 1:32905b0858ac 929 }
el14mma 1:32905b0858ac 930
el14mma 1:32905b0858ac 931 void menu() { // reset game
el14mma 1:32905b0858ac 932
el14mma 1:32905b0858ac 933 // origin coordinates for the cercle
el14mma 1:32905b0858ac 934 a = 41;
el14mma 1:32905b0858ac 935 b = 23;
el14mma 1:32905b0858ac 936
el14mma 1:32905b0858ac 937 // Save variables
el14mma 1:32905b0858ac 938
el14mma 1:32905b0858ac 939 save1 = 1;
el14mma 1:32905b0858ac 940 save2 = 1;
el14mma 1:32905b0858ac 941 save3 = 1;
el14mma 1:32905b0858ac 942 save4 = 1;
el14mma 1:32905b0858ac 943 save5 = 1;
el14mma 1:32905b0858ac 944
el14mma 1:32905b0858ac 945 // Initial obstacle speed
el14mma 1:32905b0858ac 946
el14mma 1:32905b0858ac 947 speed = 0.5;
el14mma 1:32905b0858ac 948 // Game Score
el14mma 1:32905b0858ac 949
el14mma 1:32905b0858ac 950 score = 0;
el14mma 1:32905b0858ac 951
el14mma 1:32905b0858ac 952 // origin coordinates for obstacles
el14mma 1:32905b0858ac 953
el14mma 1:32905b0858ac 954 d1 = 1;
el14mma 1:32905b0858ac 955
el14mma 1:32905b0858ac 956 d2 = 1;
el14mma 1:32905b0858ac 957
el14mma 1:32905b0858ac 958 d3 = 1;
el14mma 1:32905b0858ac 959
el14mma 1:32905b0858ac 960 d4 = 83;
el14mma 1:32905b0858ac 961
el14mma 1:32905b0858ac 962 d5 = 0;
el14mma 1:32905b0858ac 963
el14mma 1:32905b0858ac 964 d6 = 0;
el14mma 1:32905b0858ac 965
el14mma 1:32905b0858ac 966 b1 = 0;
el14mma 1:32905b0858ac 967
el14mma 1:32905b0858ac 968 b2 = 0;
el14mma 1:32905b0858ac 969
el14mma 1:32905b0858ac 970 b3 = 0;
el14mma 1:32905b0858ac 971
el14mma 1:32905b0858ac 972 b4 = 47;
el14mma 1:32905b0858ac 973
el14mma 1:32905b0858ac 974 // Energy needed for the player to use slow mode (must discharge to one)
el14mma 1:32905b0858ac 975
el14mma 1:32905b0858ac 976 energy = 20;
el14mma 1:32905b0858ac 977
el14mma 1:32905b0858ac 978 // Random Obstacle decision by random variable and obstacles states
el14mma 1:32905b0858ac 979
el14mma 1:32905b0858ac 980 r = 0;
el14mma 1:32905b0858ac 981
el14mma 1:32905b0858ac 982 state1 = 0;
el14mma 1:32905b0858ac 983 state2 = 0;
el14mma 1:32905b0858ac 984 state3 = 0;
el14mma 1:32905b0858ac 985 state4 = 0;
el14mma 1:32905b0858ac 986 state5 = 0;
el14mma 1:32905b0858ac 987 state6 = 0;
el14mma 1:32905b0858ac 988
el14mma 1:32905b0858ac 989 // Variables used to check if the player touched an obstacle
el14mma 1:32905b0858ac 990
el14mma 1:32905b0858ac 991 hit = 0;
el14mma 1:32905b0858ac 992 hit1 = 0;
el14mma 1:32905b0858ac 993 hit2 = 0;
el14mma 1:32905b0858ac 994 hit3 = 0;
el14mma 1:32905b0858ac 995 hit4 = 0;
el14mma 1:32905b0858ac 996 hit5 = 0;
el14mma 1:32905b0858ac 997 hit6 = 0;
el14mma 1:32905b0858ac 998 hit7 = 0;
el14mma 1:32905b0858ac 999 hit8 = 0;
el14mma 1:32905b0858ac 1000
el14mma 1:32905b0858ac 1001 lcd.clear();
el14mma 1:32905b0858ac 1002
el14mma 1:32905b0858ac 1003 wait(1);
el14mma 1:32905b0858ac 1004
el14mma 1:32905b0858ac 1005 loading = 0;
el14mma 1:32905b0858ac 1006
el14mma 1:32905b0858ac 1007 main();
el14mma 1:32905b0858ac 1008
eencae 0:026fa541af7a 1009 }