Nydrel Jack / Mbed 2 deprecated WorldInTheBalance22

Dependencies:   mbed 4DGL-uLCD-SE PinDetect

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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