Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed 4DGL-uLCD-SE PinDetect
main.cpp
00001 #include "mbed.h" 00002 #include "MMA8452.h" 00003 #include "uLCD_4DGL.h" 00004 #include "PinDetect.h" 00005 #include "Speaker.h" 00006 #include <ctime> 00007 00008 /*-----Define Statements-----*/ 00009 00010 #define ASTEROID_HEIGHT 12 00011 #define ASTEROID_WIDTH 15 00012 #define SPRITE_MAX 15 00013 #define EARTH_WIDTH 10 00014 #define EARTH_HEIGHT 10 00015 #define EXPLOSION1_WIDTH 20 00016 #define SCREEN_MAX 125 00017 #define SCREEN_MIN 1 00018 #define NUM_ASTEROIDS 4 00019 #define Q 0x808000 //OLIVE 00020 #define I 0x008000 //GREEN 00021 #define S 0xC0C0C0 //SILVER 00022 #define C 0x17202A //UFO GLASS 00023 #define D 0x797D7F //DARK GREY 00024 #define L 0x00FF00 //LIME 00025 #define P 0xFF00FF //PINK 00026 #define R 0xF1C40F //YELLOW 00027 #define O 0xF39C12 //ORANGE 00028 #define G 0xAAB7B8 //GREY 00029 #define _ 0x000000 //BLACK 00030 #define X 0xFFFFFF //WHITE 00031 #define B 0x0000FF //BLUE 00032 #define r 0xFF0000 //RED 00033 00034 00035 /*-----Sprites------*/ 00036 00037 int spaceship_earth1[EARTH_WIDTH * EARTH_HEIGHT] = 00038 { 00039 _,_,S,S,S,S,S,S,_,_, 00040 _,S,I,I,I,I,I,I,S,_, 00041 S,I,I,I,I,I,I,I,I,S, 00042 S,I,I,I,I,I,I,I,I,S, 00043 S,I,I,I,I,I,I,I,I,S, 00044 S,I,I,I,I,I,I,I,I,S, 00045 S,I,I,I,I,I,I,I,I,S, 00046 S,I,I,I,I,I,I,I,I,S, 00047 S,I,I,I,I,I,I,I,S,_, 00048 _,S,S,S,S,S,S,S,_,_ 00049 }; 00050 00051 int earth_blank[EARTH_WIDTH * EARTH_HEIGHT] = 00052 { 00053 _,_,_,_,_,_,_,_,_,_, 00054 _,_,_,_,_,_,_,_,_,_, 00055 _,_,_,_,_,_,_,_,_,_, 00056 _,_,_,_,_,_,_,_,_,_, 00057 _,_,_,_,_,_,_,_,_,_, 00058 _,_,_,_,_,_,_,_,_,_, 00059 _,_,_,_,_,_,_,_,_,_, 00060 _,_,_,_,_,_,_,_,_,_, 00061 _,_,_,_,_,_,_,_,_,_, 00062 _,_,_,_,_,_,_,_,_,_ 00063 }; 00064 00065 00066 int earth_destroy[EARTH_WIDTH * EARTH_HEIGHT] = 00067 { 00068 R,R,R,R,R,R,R,R,R,R, 00069 R,R,r,_,_,r,_,_,r,R, 00070 R,R,_,r,_,r,_,r,_,R, 00071 R,R,_,_,r,r,r,_,_,R, 00072 R,R,r,r,r,r,r,r,r,R, 00073 R,R,_,_,r,r,r,_,_,R, 00074 R,R,_,r,_,r,_,r,_,R, 00075 R,R,r,_,_,r,_,_,r,R, 00076 R,R,R,R,R,R,R,R,R,R, 00077 R,R,R,R,R,R,R,R,R,R 00078 }; 00079 00080 int asteroid_sprite_1[ASTEROID_HEIGHT * ASTEROID_WIDTH] = { 00081 _,_,_,_,X,X,X,X,X,X,X,X,_,_,_, 00082 _,_,_,X,_,_,_,_,_,_,_,_,X,_,_, 00083 _,_,X,_,_,_,_,_,_,_,_,_,X,_,_, 00084 _,X,_,_,_,_,_,_,_,_,_,_,X,_,_, 00085 X,X,X,X,_,_,_,_,_,_,_,_,_,X,_, 00086 _,_,_,X,_,_,_,_,_,_,_,_,_,X,_, 00087 _,_,X,_,_,_,_,_,_,_,_,_,_,X,_, 00088 _,X,_,_,_,_,_,X,_,_,_,_,_,X,_, 00089 X,_,_,_,_,_,X,X,_,_,_,_,X,_,_, 00090 _,X,_,_,_,X,_,X,_,_,_,_,X,_,_, 00091 _,_,X,_,X,_,_,X,_,_,_,X,_,_,_, 00092 _,_,_,X,_,_,_,X,X,X,X,_,_,_,_ 00093 }; 00094 00095 00096 int asteroid_sprite_2[ASTEROID_HEIGHT * ASTEROID_WIDTH] = { 00097 _,_,X,X,X,X,X,X,X,X,_,_,_,_,_, 00098 _,_,_,X,_,_,_,_,_,_,X,X,_,_,_, 00099 _,_,_,_,X,_,_,_,_,_,_,_,X,_,_, 00100 X,X,X,X,X,X,_,_,_,_,_,_,_,X,_, 00101 X,_,_,_,_,_,_,_,_,_,_,_,_,_,X, 00102 X,_,_,_,_,_,_,_,_,_,_,_,_,X,X, 00103 X,_,_,_,_,_,_,_,_,_,_,X,X,_,_, 00104 _,X,_,_,_,_,_,_,_,_,X,_,_,_,_, 00105 _,_,X,_,_,_,_,_,_,_,_,X,X,_,_, 00106 _,_,_,X,_,_,_,_,X,_,_,_,_,X,X, 00107 _,_,_,_,X,_,X,X,_,X,X,_,_,X,_, 00108 _,_,_,_,_,X,_,_,_,_,_,X,X,_,_ 00109 }; 00110 00111 00112 int asteroid_sprite_3[ASTEROID_HEIGHT * ASTEROID_WIDTH] = { 00113 _,_,X,X,X,_,_,_,_,_,_,X,X,_,_, 00114 _,X,_,_,_,X,X,_,_,_,X,_,_,X,_, 00115 X,_,_,_,_,_,_,X,X,X,_,_,_,_,X, 00116 _,X,_,_,_,_,_,_,_,_,_,_,_,X,_, 00117 _,_,X,_,_,_,_,_,_,_,X,X,X,_,_, 00118 _,_,_,X,_,_,_,_,_,_,X,X,_,_,_, 00119 _,_,X,_,_,_,_,_,_,_,_,_,X,_,_, 00120 _,X,_,_,_,_,_,_,_,_,_,_,_,X,_, 00121 X,_,_,_,_,_,_,_,_,_,_,_,_,_,X, 00122 _,X,_,_,_,X,X,X,_,_,_,_,_,X,_, 00123 _,_,X,_,X,_,_,_,X,X,_,X,X,_,_, 00124 _,_,_,X,_,_,_,_,_,_,X,X,X,_,_ 00125 }; 00126 00127 00128 int asteroid_sprite_4[ASTEROID_HEIGHT * ASTEROID_WIDTH] = { 00129 _,_,_,X,X,_,_,_,_,_,X,_,_,_,_, 00130 _,_,X,_,_,X,_,_,_,X,_,X,X,_,_, 00131 _,X,_,_,_,_,X,_,X,_,_,_,_,X,_, 00132 X,_,_,_,_,_,_,X,_,_,_,_,_,_,X, 00133 X,_,_,_,_,_,_,_,_,_,_,_,_,X,_, 00134 X,_,_,_,_,_,_,_,_,_,_,_,X,_,_, 00135 X,_,_,_,_,_,_,_,_,_,_,_,_,X,_, 00136 X,_,_,_,_,_,_,_,_,_,_,_,_,_,X, 00137 X,_,_,_,_,_,_,_,_,_,_,_,_,X,_, 00138 _,X,_,_,_,_,_,_,_,_,_,_,X,_,_, 00139 _,_,X,_,_,_,_,_,_,_,_,X,_,_,_, 00140 _,_,_,X,X,X,X,X,X,X,X,_,_,_,_ 00141 }; 00142 00143 00144 int asteroid_blank[ASTEROID_WIDTH * ASTEROID_HEIGHT] = 00145 { 00146 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, 00147 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, 00148 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, 00149 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, 00150 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, 00151 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, 00152 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, 00153 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, 00154 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, 00155 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, 00156 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_, 00157 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_ 00158 }; 00159 00160 00161 00162 //Instantiate Accelerometer Object 00163 00164 Serial pc(USBTX,USBRX); //not used in this program 00165 MMA8452 acc(p9, p10, 40000); //instantiate an acc object! 00166 double x, y, z; 00167 00168 //Instantiate uLCD Object 00169 00170 DigitalOut myled(LED1); 00171 uLCD_4DGL uLCD(p28, p27, p29); // create a global uLCD object 00172 Speaker mySpeaker(p21); 00173 00174 //Setup pushbutton for bomb 00175 PinDetect pb1(p16); 00176 00177 int factor = 50; 00178 int offset = 63; 00179 bool BombUsed = false; 00180 bool ExplodeAllAsteroids = false; 00181 00182 00183 void pb1_hit_callback (void) 00184 { 00185 if (!BombUsed ) 00186 { 00187 ExplodeAllAsteroids = true; 00188 BombUsed = true; 00189 } 00190 } 00191 00192 /*-----ScreenObject Class------*/ 00193 00194 class ScreenObject 00195 { 00196 public: 00197 //ScreenObject(); 00198 //setter functions 00199 00200 /*void setXPos(int x) 00201 { 00202 x_pos = x; 00203 } 00204 00205 void setYPos(int y) 00206 { 00207 y_pos = y; 00208 } */ 00209 00210 //getter functions 00211 // int getXPos(); 00212 // int getYPos(); 00213 00214 //pure virtual 00215 virtual void draw() = 0; 00216 virtual void update() = 0; 00217 virtual bool boundaryCheck() = 0; 00218 virtual void reset() = 0; 00219 00220 friend bool overlap(ScreenObject & objectA, ScreenObject & objectB) 00221 { 00222 bool rangeX = (objectA.x_pos <= objectB.x_pos + 7) && (objectA.x_pos + 8 >= objectB.x_pos); 00223 bool rangeY = (objectA.y_pos <= objectB.y_pos + 7) && (objectA.y_pos + 7 >= objectB.y_pos); 00224 return (rangeX && rangeY); 00225 } 00226 //you put stuff in here! 00227 00228 protected: 00229 int x_pos; 00230 int y_pos; 00231 }; 00232 00233 00234 /*-----SpaceShipEarth Class------*/ 00235 00236 class SpaceShipEarth: public ScreenObject 00237 { 00238 public: 00239 SpaceShipEarth() { 00240 x_pos = 63; 00241 y_pos = 63; 00242 } 00243 00244 void draw() { 00245 uLCD.BLIT(x_pos, y_pos, EARTH_WIDTH, EARTH_HEIGHT,spaceship_earth1); 00246 } 00247 00248 void update() { 00249 00250 uLCD.BLIT(x_pos, y_pos, EARTH_WIDTH, EARTH_HEIGHT,earth_blank); 00251 00252 if(!acc.isXYZReady()) { 00253 wait(0.02); 00254 } 00255 00256 else { 00257 acc.readXYZGravity(&x,&y,&z); //notice this is passed by reference use pointers 00258 x_pos = -1*x*factor + offset; 00259 y_pos = -1*y*factor + offset; 00260 00261 } //end else 00262 }//end if 00263 00264 void explode() { 00265 uLCD.BLIT(x_pos, y_pos, EARTH_WIDTH, EARTH_HEIGHT,earth_blank); 00266 uLCD.BLIT(x_pos, y_pos, EARTH_WIDTH, EARTH_HEIGHT,earth_destroy); 00267 } 00268 00269 bool boundaryCheck() 00270 { 00271 if(((x_pos == 0) || (x_pos == 126)) || ((y_pos == 0) || (y_pos == 126))) 00272 return true; 00273 else 00274 return false; 00275 } 00276 00277 void reset() 00278 { 00279 x_pos = 63; 00280 y_pos = 63; 00281 } 00282 00283 /* 00284 bool boundaryCheck(* ScreenObject asteroid) 00285 { 00286 //compare the four corners of the Earth and asteroid sprites 00287 bool c1 = (asteroid->x_pos) <= 00288 } 00289 */ 00290 00291 }; 00292 00293 00294 00295 /*-----AbstractAsteroid Class-----*/ 00296 00297 00298 class AbstractAsteroid: public ScreenObject 00299 { 00300 public: 00301 void pickCorner(int corner) 00302 { 00303 switch (corner) 00304 { 00305 case 1: //top left 00306 x_pos = 2; 00307 y_pos = 2; 00308 deltaX = rand() % 3 + 1; 00309 deltaY = rand() % 3 + 1; 00310 break; 00311 case 2: //top right 00312 x_pos = 124 - ASTEROID_WIDTH; 00313 y_pos = 2; 00314 deltaX = -1*(rand() % 3 + 1); 00315 deltaY = rand() % 3 + 1; 00316 break; 00317 case 3: //bottom left 00318 x_pos = 2; 00319 y_pos = 124 - ASTEROID_HEIGHT; 00320 deltaX = rand() % 3 + 1; 00321 deltaY = -1*(rand() % 3 + 1); 00322 break; 00323 case 4: //bottom right 00324 x_pos = 124 - ASTEROID_WIDTH; 00325 y_pos = 124 - ASTEROID_HEIGHT; 00326 deltaX = -1*(rand() % 3 + 1); 00327 deltaY = -1*(rand() % 3 + 1); 00328 break; 00329 } 00330 } 00331 00332 void pickEdge() 00333 { 00334 int edge = rand() % 4 + 1; 00335 00336 switch (edge) 00337 { 00338 case 1: //top 00339 x_pos = rand() % 2 + (120 - ASTEROID_WIDTH); 00340 y_pos = 2; 00341 if((rand() % 1)) 00342 deltaX = rand() % 3 + 1; 00343 else 00344 deltaX = -1*(rand() % 3 + 1); 00345 deltaY = rand() % 3 + 1; 00346 break; 00347 case 2: //bottom 00348 x_pos = rand() % 2 + (120 - ASTEROID_WIDTH); 00349 y_pos = 120 - ASTEROID_HEIGHT; 00350 if((rand() % 1)) 00351 deltaX = rand() % 3 + 1; 00352 else 00353 deltaX = -1*(rand() % 3 + 1); 00354 deltaY = -1*(rand() % 3 + 1); 00355 break; 00356 case 3: //left 00357 x_pos = 2; 00358 y_pos = rand() % 1 + (120 - ASTEROID_HEIGHT); 00359 deltaX = rand() % 3 + 1; 00360 if((rand() % 1)) 00361 deltaY = rand() % 3 + 1; 00362 else 00363 deltaY = -1*(rand() % 3 + 1); 00364 break; 00365 case 4: //right 00366 x_pos = 120 - ASTEROID_WIDTH; 00367 y_pos = rand() % 1 + (120 - ASTEROID_HEIGHT); 00368 deltaX = -1*(rand() % 3 + 1); 00369 if((rand() % 1)) 00370 deltaY = rand() % 3 + 1; 00371 else 00372 deltaY = -1*(rand() % 3 + 1); 00373 break; 00374 } 00375 } 00376 00377 00378 bool boundaryCheck() 00379 { 00380 bool c1 = x_pos + ASTEROID_WIDTH > 124; //if moving towards right side of screen 00381 bool c2 = x_pos <= 0; //if moving towards left side of screen 00382 bool c3 = y_pos + ASTEROID_HEIGHT > 124; //if moving towards bottom of screen 00383 bool c4 = y_pos <= 0; //if moving towards top of screen 00384 00385 if(c1 || c2 || c3 || c4) 00386 return true; 00387 else 00388 return false; 00389 } 00390 00391 protected: 00392 int deltaX; 00393 int deltaY; 00394 }; 00395 00396 00397 00398 //-----Concrete Asteroids-----// 00399 00400 //-----Asteroid1-----// 00401 class Asteroid1: public AbstractAsteroid 00402 { 00403 public: 00404 Asteroid1(int corner) 00405 { 00406 pickCorner(corner); 00407 startTime = time(0); 00408 } 00409 00410 void reset() 00411 { 00412 pickEdge(); 00413 startTime = time(0); 00414 } 00415 00416 void draw() 00417 { 00418 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_sprite_1); 00419 } 00420 00421 void update() 00422 { 00423 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_blank); 00424 wait(0.02); 00425 time_t timeElapsed = time(0)-startTime; 00426 x_pos = x_pos + (deltaX * timeElapsed); 00427 y_pos = y_pos + (deltaY * timeElapsed); 00428 } 00429 00430 00431 protected: 00432 time_t startTime; 00433 }; 00434 00435 00436 //-----Asteroid2-----// 00437 class Asteroid2: public AbstractAsteroid 00438 { 00439 public: 00440 Asteroid2(int corner) 00441 { 00442 pickCorner(corner); 00443 startTime = time(0); 00444 } 00445 00446 void reset() 00447 { 00448 pickEdge(); 00449 startTime = time(0); 00450 } 00451 00452 void draw() 00453 { 00454 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_sprite_2); 00455 } 00456 00457 void update() 00458 { 00459 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_blank); 00460 wait(0.02); 00461 time_t timeElapsed = time(0)-startTime; 00462 x_pos = x_pos + (deltaX * timeElapsed); 00463 y_pos = y_pos + (deltaY * timeElapsed); 00464 } 00465 00466 protected: 00467 time_t startTime; 00468 }; 00469 00470 00471 00472 00473 //-----Asteroid3-----// 00474 class Asteroid3: public AbstractAsteroid 00475 { 00476 public: 00477 Asteroid3(int corner) 00478 { 00479 pickCorner(corner); 00480 startTime = time(0); 00481 } 00482 00483 void reset() 00484 { 00485 pickEdge(); 00486 startTime = time(0); 00487 } 00488 00489 void draw() 00490 { 00491 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_sprite_3); 00492 } 00493 00494 void update() 00495 { 00496 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_blank); 00497 wait(0.02); 00498 time_t timeElapsed = time(0)-startTime; 00499 x_pos = x_pos + (deltaX * timeElapsed); 00500 y_pos = y_pos + (deltaY * timeElapsed); 00501 } 00502 00503 00504 protected: 00505 time_t startTime; 00506 }; 00507 00508 00509 00510 //-----Asteroid4-----// 00511 class Asteroid4: public AbstractAsteroid 00512 { 00513 public: 00514 Asteroid4(int corner) 00515 { 00516 pickCorner(corner); 00517 startTime = time(0); 00518 } 00519 00520 void reset() 00521 { 00522 pickEdge(); 00523 startTime = time(0); 00524 } 00525 00526 void draw() 00527 { 00528 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_sprite_4); 00529 } 00530 00531 void update() 00532 { 00533 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_blank); 00534 wait(0.02); 00535 time_t timeElapsed = time(0)-startTime; 00536 x_pos = x_pos + (deltaX * timeElapsed); 00537 y_pos = y_pos + (deltaY * timeElapsed); 00538 } 00539 00540 00541 protected: 00542 time_t startTime; 00543 }; 00544 00545 00546 00547 00548 //Program Start 00549 00550 int main() 00551 { 00552 uLCD.baudrate(300000); 00553 wait(0.2); 00554 srand(time(0)); // do this srand call here ONLY... no where else in the code! 00555 ScreenObject * ActiveAsteroids[NUM_ASTEROIDS]; 00556 SpaceShipEarth ship; //instantiate a SpaceShipEarth object 00557 00558 pb1.mode(PullUp); 00559 wait(0.01); 00560 pb1.attach_deasserted(&pb1_hit_callback); 00561 pb1.setSampleFrequency(); 00562 00563 00564 double bar = 127; 00565 00566 Asteroid1 rock1(1); 00567 Asteroid2 rock2(2); 00568 Asteroid3 rock3(3); 00569 Asteroid4 rock4(4); 00570 00571 ActiveAsteroids[0] = &rock1; 00572 ActiveAsteroids[1] = &rock2; 00573 ActiveAsteroids[2] = &rock3; 00574 ActiveAsteroids[3] = &rock4; 00575 00576 //set parameters -- use these and don't change 00577 acc.setBitDepth(MMA8452::BIT_DEPTH_12); 00578 acc.setDynamicRange(MMA8452::DYNAMIC_RANGE_4G); 00579 acc.setDataRate(MMA8452::RATE_100); 00580 00581 00582 time_t startTime; 00583 time_t timeElapsed; 00584 startTime = time(0); 00585 00586 int dur = 30; 00587 00588 while(1) { 00589 //check winning condition 00590 if((time(0)-startTime) > dur) 00591 { 00592 uLCD.printf("YOU WIN!"); 00593 return 1; 00594 } 00595 00596 else 00597 { 00598 timeElapsed = time(0)-startTime; 00599 bar = 127 - (timeElapsed*(127/dur)); 00600 uLCD.filled_rectangle(1, 1,127,1,R); 00601 uLCD.filled_rectangle(1, 1,127-bar,1,_); 00602 } 00603 00604 ship.update(); 00605 00606 ship.draw(); 00607 00608 00609 ActiveAsteroids[0]->update(); 00610 00611 if(ActiveAsteroids[0]->boundaryCheck()) 00612 ActiveAsteroids[0]->reset(); 00613 00614 ActiveAsteroids[0]->draw(); 00615 00616 ActiveAsteroids[1]->update(); 00617 00618 if(ActiveAsteroids[1]->boundaryCheck()) 00619 ActiveAsteroids[1]->reset(); 00620 00621 ActiveAsteroids[1]->draw(); 00622 00623 ActiveAsteroids[2]->update(); 00624 00625 if(ActiveAsteroids[2]->boundaryCheck()) 00626 ActiveAsteroids[2]->reset(); 00627 00628 ActiveAsteroids[2]->draw(); 00629 00630 ActiveAsteroids[3]->update(); 00631 00632 if(ActiveAsteroids[3]->boundaryCheck()) 00633 ActiveAsteroids[3]->reset(); 00634 00635 ActiveAsteroids[3]->draw(); 00636 00637 00638 //check to see if the pushbutton has activated the bomb 00639 if(ExplodeAllAsteroids) 00640 { 00641 for(int i = 0; i < 4; i++) 00642 { 00643 ActiveAsteroids[i]->update(); 00644 wait(0.25); 00645 ActiveAsteroids[i]->reset(); 00646 } 00647 ExplodeAllAsteroids = false; 00648 } 00649 00650 00651 //check for overlap between Asteroids and Earth 00652 //return 1 and end game 00653 if(overlap(ship,rock1)) { 00654 ship.explode(); 00655 mySpeaker.PlayNote(500.0,0.25,0.1); 00656 mySpeaker.PlayNote(450.0,0.25,0.1); 00657 mySpeaker.PlayNote(400.0,0.25,0.1); 00658 mySpeaker.PlayNote(300.0,0.25,0.1); 00659 uLCD.printf("GAME OVER"); 00660 wait(3); 00661 return 1; 00662 } 00663 00664 else if(overlap(ship,rock2)) { 00665 ship.explode(); 00666 mySpeaker.PlayNote(500.0,0.25,0.1); 00667 mySpeaker.PlayNote(450.0,0.25,0.1); 00668 mySpeaker.PlayNote(400.0,0.25,0.1); 00669 mySpeaker.PlayNote(300.0,0.25,0.1); 00670 uLCD.printf("GAME OVER"); 00671 wait(3); 00672 return 1; 00673 } 00674 00675 else if(overlap(ship,rock3)) { 00676 ship.explode(); 00677 mySpeaker.PlayNote(500.0,0.25,0.1); 00678 mySpeaker.PlayNote(450.0,0.25,0.1); 00679 mySpeaker.PlayNote(400.0,0.25,0.1); 00680 mySpeaker.PlayNote(300.0,0.25,0.1); 00681 uLCD.printf("GAME OVER"); 00682 wait(3); 00683 return 1; 00684 } 00685 00686 else if(overlap(ship,rock4)) { 00687 ship.explode(); 00688 mySpeaker.PlayNote(500.0,0.25,0.1); 00689 mySpeaker.PlayNote(450.0,0.25,0.1); 00690 mySpeaker.PlayNote(400.0,0.25,0.1); 00691 mySpeaker.PlayNote(300.0,0.25,0.1); 00692 uLCD.printf("GAME OVER"); 00693 wait(3); 00694 return 1; 00695 } 00696 00697 00698 //check to see if the game is over 00699 00700 } //end infinite while loop 00701 } //end main 00702
Generated on Sun Jul 24 2022 12:38:47 by
1.7.2