ELEC2645 (2017/18) / Mbed 2 deprecated fy15raf

Dependencies:   mbed

Revision:
12:4d7f1349d796
Parent:
11:cb48d596aa3e
Child:
14:cf4a32245152
--- a/GameEngine/GameEngine.cpp	Thu May 03 22:34:03 2018 +0000
+++ b/GameEngine/GameEngine.cpp	Fri May 04 21:19:34 2018 +0000
@@ -10,166 +10,185 @@
 
 }
 
+
 void GameEngine::init()
 {
+    //initialise game objects rocket and 3 asteroids with diffrent speeds
     _rocket.init();
     _asteroid1.init(2);
     _asteroid2.init(3);
     _asteroid3.init(4);
-   // Sec=0;
+
     gameOver=0;
 }
 
+
 void GameEngine::read_input(Gamepad &pad)
 {
     _d = pad.get_direction();
     _mag = pad.get_mag();
 }
 
+
 void GameEngine::draw(N5110 &lcd)
 {
     // draw the game elements in the LCD
     _rocket.draw(lcd);
     _asteroid1.draw(lcd);
-   _asteroid2.draw(lcd);
+    _asteroid2.draw(lcd);
     _asteroid3.draw(lcd);
-    //print_scores(lcd);
-    print_scores1(lcd);
-   // print_sec(lcd);
-  
+
+    //print the 3 hearts life
+    draw_hearts(lcd);
+
+    //print the recorded time in sec
+    print_time(lcd);
 }
 
-void GameEngine::update(Gamepad &pad, N5110 &lcd) 
+
+void GameEngine::update(Gamepad &pad)
 {
-    
-    check_goal(pad);
-    _rocket.update(_d,_mag, lcd);
+
+    //checking collisions with Asteroid 1, 2 and 3
+    check_collision1(pad);
+    check_collision2(pad);
+    check_collision3(pad);
+
+    //updating the display
+    _rocket.update(_d,_mag);
     _asteroid1.update();
     _asteroid2.update();
     _asteroid3.update();
-    //sec();
+
+    //updating the time
+    time_increment();
 }
 
 
-void GameEngine::check_goal(Gamepad &pad)
+void GameEngine::check_collision1(Gamepad &pad)
 {
     Vector2D _asteroid1_pos = _asteroid1.get_pos() ;
-    Vector2D _asteroid2_pos = _asteroid2.get_pos() ;   
-    Vector2D _asteroid3_pos = _asteroid3.get_pos() ;
-    
     Vector2D _rocket_pos = _rocket.get_pos();
 
-    if ((_rocket_pos.x+10 >=_asteroid1_pos.x) &&
-        ( _rocket_pos.x+8 <_asteroid1_pos.x )) {//size //sprint width //float/////////////speed
-        if( ( _asteroid1_pos.y >= _rocket_pos.y) &&
-            ( _asteroid1_pos.y <= _rocket_pos.y+7) || 
-            (_asteroid1_pos.y+6 >= _rocket_pos.y) && 
-            (_asteroid1_pos.y+6 <= _rocket_pos.y+7 )) {
-            _rocket.add_score();
-            pad.tone(1500.0,0.5);
-            pad.leds_on();
+    // check if the collision occers with Asteroid 1
+    if ((_rocket_pos.x+10 >=_asteroid1_pos.x) &&( _rocket_pos.x+8 <_asteroid1_pos.x )) {
+
+        if( ( _asteroid1_pos.y >= _rocket_pos.y) && ( _asteroid1_pos.y <= _rocket_pos.y+7) ||
+                (_asteroid1_pos.y+6 >= _rocket_pos.y) &&(_asteroid1_pos.y+6 <= _rocket_pos.y+7 )) {
+
+            _rocket.add_collisions();
+            pad.tone(1500.0,0.5);        //tone
+            pad.leds_on();               //LEDs flashing
             wait(0.5);
             pad.leds_off();
         }
     }
-    
-    if ((_rocket_pos.x+10 >=_asteroid2_pos.x) &&
-            (_rocket_pos.x+8 <_asteroid2_pos.x )) {
-        //size //sprint width //float/////////////speed
-        if( (_asteroid2_pos.y >= _rocket_pos.y) &&
-                ( _asteroid2_pos.y <= _rocket_pos.y+7) ||
-                (_asteroid2_pos.y+6 >= _rocket_pos.y) &&
-                ( _asteroid2_pos.y+6 <= _rocket_pos.y+7 )) {
-            _rocket.add_score();
-            pad.tone(1500.0,0.5);
-            pad.leds_on();
+}
+
+
+void GameEngine::check_collision2(Gamepad &pad)
+{
+
+    Vector2D _asteroid2_pos = _asteroid2.get_pos();
+    Vector2D _rocket_pos = _rocket.get_pos();
+
+    // check if the collision occers with Asteroid 2
+    if ((_rocket_pos.x+10 >=_asteroid2_pos.x) && (_rocket_pos.x+8 <_asteroid2_pos.x )) {
+
+        if( (_asteroid2_pos.y >= _rocket_pos.y) && ( _asteroid2_pos.y <= _rocket_pos.y+7) ||
+                (_asteroid2_pos.y+6 >= _rocket_pos.y) &&( _asteroid2_pos.y+6 <= _rocket_pos.y+7 )) {
+
+            _rocket.add_collisions();
+            pad.tone(1500.0,0.5);           //tone
+            pad.leds_on();                  //LEDs flashing
             wait(0.5);
             pad.leds_off();
         }
     }
-///////////////////////////////////////
-    if ((_rocket_pos.x+10 >= _asteroid3_pos.x) &&
-        ( _rocket_pos.x+6 < _asteroid3_pos.x )) 
-        {//size //sprint width //float/////////////speed
-            if( (_asteroid3_pos.y >= _rocket_pos.y) &&
-                ( _asteroid3_pos.y <= _rocket_pos.y+7) ||
-                ( _asteroid3_pos.y+6 >= _rocket_pos.y) && 
-                (_asteroid3_pos.y+6 <= _rocket_pos.y+7 )) {
-                _rocket.add_score();
-                pad.tone(1500.0,0.5);
-                pad.leds_on();
-                wait(0.5);
-                pad.leds_off();
+}
+
+
+void GameEngine::check_collision3(Gamepad &pad)
+{
+
+    Vector2D _asteroid3_pos = _asteroid3.get_pos();
+    Vector2D _rocket_pos = _rocket.get_pos();
+
+    // check if the collision occers with Asteroid 3
+    if ((_rocket_pos.x+10 >= _asteroid3_pos.x) &&( _rocket_pos.x+6 < _asteroid3_pos.x )) {
+
+        if( (_asteroid3_pos.y >= _rocket_pos.y) &&( _asteroid3_pos.y <= _rocket_pos.y+7) ||
+                ( _asteroid3_pos.y+6 >= _rocket_pos.y) &&(_asteroid3_pos.y+6 <= _rocket_pos.y+7 )) {
+
+            _rocket.add_collisions();
+            pad.tone(1500.0,0.5);           //tone
+            pad.leds_on();                  //LEDs flashing
+            wait(0.5);
+            pad.leds_off();
         }
     }
-    
 }
 
 
- //////////////////////////////////////////////////////////////////   
-void GameEngine::print_scores(N5110 &lcd) //this function is not used now 
+void GameEngine::draw_hearts(N5110 &lcd)
 {
-    // get the number of hits
-    int _rocket_score = _rocket.get_score();
-
-    // print to LCD i
-    char buffer1[11];
-    sprintf(buffer1,"hits:%2d",_rocket_score);
-    lcd.printString(buffer1,WIDTH/2 - 20, 1);    
-}
-
-void GameEngine::print_scores1(N5110 &lcd)
-{
-    // get scores from Rocket
-    int _rocket_score = _rocket.get_score();
-    // get_score();
-    if (_rocket_score ==1) {
+    // get collision from Rocket class
+    int _rocket_collisions= _rocket.get_collisions();
+    
+    // reduce the hearts with each collision till the third collision the game ends   
+    if (_rocket_collisions==0) {
+        _rocket.drawFullHearts(lcd);
+        
+    } else if (_rocket_collisions ==1) {
         _rocket.drawTwoHearts(lcd);
-    } else if (_rocket_score==0) {
-        _rocket.drawFullHearts(lcd);
-    } else if (_rocket_score == 2) {
+        
+    } else if (_rocket_collisions == 2) {
         _rocket.drawOneHeart(lcd);
+        
     } else {
         gameOver=1;
+        
     }
 }
 
-int GameEngine::get_gameOver1()
+
+int GameEngine::check_gameOver()
 {
+    //stop the time and return if game over
+    time.stop ();
     return gameOver;
 }
-/*void GameEngine::sec(){
-    //Sec=timer_isr();
-    
-    Sec++;
-    }
-//int GameEngine::get_time()
-//{
-    //return sec;
-   // }
-    
-void GameEngine::print_sec(N5110 &lcd)
+
+
+void GameEngine::time_increment()
 {
-    // get scores from paddles
-    //int R1_sec = _R1.get_score();
+    //start and incrementing the time and read it
+    time.start();
+    _time = time.read();
+}
 
-    // print to LCD i
-    char buffer1[11];
-    sprintf(buffer1,"%3d",Sec);
-    lcd.printString(buffer1, 40, 0);  // font is 8 wide, so leave 4 pixel gape from middle assuming two digits    
+
+void GameEngine::time_stop()
+{
+    //stop the time
+    time.stop();
 }
 
-void GameEngine::print_sec_over(N5110 &lcd)
-{
-    // get scores from paddles
-    //int R1_sec = _R1.get_score();
 
-    // print to LCD i
-    char buffer2[11];
-    sprintf(buffer2," time: %3d s",Sec);
-    lcd.printString(buffer2, 0, 5);  // font is 8 wide, so leave 4 pixel gape from middle assuming two digits    
+void GameEngine::print_time(N5110 &lcd)
+{   
+    // print the time
+    char buffer1[11];
+    sprintf(buffer1,"%4d",_time); //maximum time 9999
+    lcd.printString(buffer1,60, 0);
 }
 
-void timer_isr(){
-    g_timer_flag=1;
-    }*/
\ No newline at end of file
+
+void GameEngine::print_travel_time(N5110 &lcd)
+{
+    // print the time at the end of the game
+    char buffer1[11];
+    sprintf(buffer1,"  %4d sec",_time); //maximum time 9999
+    lcd.printString(buffer1,0, 3);
+}
+