Rex Raj / Mbed 2 deprecated el17rrrs

Dependencies:   mbed Gamepad N5110 mbed-rtos

Revision:
2:b5c1bb7a39de
Parent:
1:45493d1d0689
Child:
3:bf9624e5b0c3
--- a/GameEngine/GameEngine.cpp	Fri Apr 19 13:43:22 2019 +0000
+++ b/GameEngine/GameEngine.cpp	Sat Apr 20 00:08:00 2019 +0000
@@ -115,193 +115,206 @@
 
 void GameEngine::init(int spacecraft_xpos,int spacecraft_ypos,int enemy_xpos, int enemy_ypos,int enemy2_xpos, int enemy2_ypos,int enemy3_xpos, int enemy3_ypos,int beam_size,int beam2_size, int speed)
 {
-    // initialise the game parameters
-    _spacecraft_xpos = spacecraft_xpos;
-    _spacecraft_ypos = spacecraft_ypos;
+     // initialise the game parameters
+     _spacecraft_xpos = spacecraft_xpos;
+     _spacecraft_ypos = spacecraft_ypos;
     
-    _enemy_xpos = enemy_xpos;
-    _enemy_ypos = enemy_ypos;
+     _enemy_xpos = enemy_xpos;
+     _enemy_ypos = enemy_ypos;
     
-    _enemy2_xpos = enemy2_xpos;
-    _enemy2_ypos = enemy2_ypos;
+     _enemy2_xpos = enemy2_xpos;
+     _enemy2_ypos = enemy2_ypos;
     
-    _enemy3_xpos = enemy3_xpos;
-    _enemy3_ypos = enemy3_ypos;
+     _enemy3_xpos = enemy3_xpos;
+     _enemy3_ypos = enemy3_ypos;
   
     
-    _beam_size = beam_size;
-    _beam2_size = beam2_size;
-    _speed = speed;
+     _beam_size = beam_size;    // beam size for 1st and 3rd enemy
+     _beam2_size = beam2_size;  // beam size for 2nd enemy
+     _speed = speed;            // Speed of the enemy travelling
     
     
-    _p1x = GAP;
+     _p1x = GAP;
     // x position on screen - WIDTH is defined in N5110.h
-     _e1a = WIDTH-_enemy_xpos; //12
-     _e1b = HEIGHT/2-_enemy_ypos;//4
+     _e1a = WIDTH-_enemy_xpos;    //enemy_xpos = 12
+     // y position on screen - HEIGHT is defined in N5110.h
+     _e1b = HEIGHT/2-_enemy_ypos; //enemy_ypos = 4  
      
-     _e2a = WIDTH-_enemy2_xpos; //12
-     _e21b = HEIGHT/2 +_enemy2_ypos;
-     _e22b = HEIGHT/2 -_enemy2_ypos;//4
+     _e2a = WIDTH-_enemy2_xpos;       //enemy2_xpos = 12
+     _e21b = HEIGHT/2 +_enemy2_ypos;  //enemy2_ypos = 10
+     _e22b = HEIGHT/2 -_enemy2_ypos;
      
-     _e3a = WIDTH-_enemy3_xpos; //20
-     _e3b = HEIGHT/2 -_enemy3_ypos;//7
+     _e3a = WIDTH-_enemy3_xpos;       //enemy3_xpos = 20
+     _e3b = HEIGHT/2 -_enemy3_ypos;   //enemy3_ypos = 7
      _e3c = WIDTH-_enemy3_xpos - 12;
      _e3d = HEIGHT/2 + _enemy3_ypos;;
      _e3f = HEIGHT/2 - _enemy3_ypos;;
      
-    // puts spacecraft and enemy in middle
-    _p1.init(_spacecraft_xpos,_spacecraft_ypos);
-    _e1.init(_e1a,_e1b);
-    _e21.init(_e2a,_e21b,_speed);
-    _e22.init(_e2a,_e22b,_speed);
-    _e3.init(_e3a,_e3b,_e3c,_e3d,_e3c,_e3f,_speed); 
-    _stage = 0;
-    //_enemybeam.init(_beam_size,_e1a,_e1b);
+     // Initialising the player's spacecraft and all enemy spacecrafts
+     _p1.init(_spacecraft_xpos,_spacecraft_ypos);
+     _e1.init(_e1a,_e1b);
+     _e21.init(_e2a,_e21b,_speed);
+     _e22.init(_e2a,_e22b,_speed);
+     _e3.init(_e3a,_e3b,_e3c,_e3d,_e3c,_e3f,_speed); 
+     // Initialising the stage of the game
+     _stage = 0; 
 
 }
 
 void GameEngine::read_input(Gamepad &pad)
 {
-    _d = pad.get_direction();
-    _mag = pad.get_mag();
-    _R = pad.check_event(Gamepad::R_PRESSED);
+    _d = pad.get_direction();                 // Get the direction of the joystick
+    _mag = pad.get_mag();                     // Get the magnitude value
+    _R = pad.check_event(Gamepad::R_PRESSED); // Check if the R button is being pressed
+    _L = pad.check_event(Gamepad::R_PRESSED); // Check if the L button is being pressed
     
 }
 
-void GameEngine::draw(Gamepad &pad,N5110 &lcd)
+void GameEngine::draw_mission_one(Gamepad &pad,N5110 &lcd)
 {
     // draw the background of the game
     lcd.drawSprite(0,0,48,84,(int *)backgrounds);
+    // draw the easter egg of the game
     lcd.drawSprite(6,4,3,13,(int *)r);
     //health
     draw_enemy_health(lcd);
     draw_spacecraft_health(pad);
-    // spacecraft
+    // player spacecraft
     _p1.character(lcd);
-    // enemy 1
+    // first enemy 
     _e1.enemy(lcd);
-    // spacecraft beam
+    // player spacecraft beam
     _beam.draw(lcd);
-    // enemy beam
+    // enemy spacecraft beam
     _enemybeam.draw(lcd);
-    // level one completion
-  //  mission_one_complete(lcd);
-    // level one fail
-   // mission_one_fail(lcd,pad);
-    
     
 }
-void GameEngine::draw2(Gamepad &pad,N5110 &lcd)
+void GameEngine::draw_mission_two(Gamepad &pad,N5110 &lcd)
 {
+    // draw the background of the game
     lcd.drawSprite(0,0,48,84,(int *)backgrounds);
+    // draw the easter egg of the game
     lcd.drawSprite(6,4,3,3,(int *)e);
+    //health
     draw_spacecraft_health(pad);
     draw_enemy21_health(lcd);
     draw_enemy22_health(lcd);
-    // spacecraft
+    // player spacecraft
     _p1.character(lcd);
+    // second enemy 
     _e21.enemy2(lcd);
     _e22.enemy2(lcd);
+    // player spacecraft beam
     _beam.draw(lcd);
+    // second enemy spacecraft beam
     _enemybeam2.draw(lcd);
     
 } 
 
-void GameEngine::draw3(Gamepad &pad,N5110 &lcd)
+void GameEngine::draw_mission_three(Gamepad &pad,N5110 &lcd)
 {
+    // draw the background of the game
     lcd.drawSprite(0,0,48,84,(int *)backgrounds);
-    lcd.drawSprite(6,4,3,3,(int *)x);
+    // draw the easter egg of the game
+    lcd.drawSprite(6,4,3,19,(int *)x);
+    //health
     draw_spacecraft_health(pad);
     draw_enemyboss_health(lcd);
-    // spacecraft
+    // player spacecraft
     _p1.character(lcd);
+    // third and final enemy 
     _e3.enemyboss(lcd);
+    // player spacecraft beam
     _beam.draw(lcd);
+    // third enemy spacecraft beam
     _enemybeam3.draw(lcd);
     
 }
 
-void GameEngine::update(Gamepad &pad,N5110 &lcd)
+void GameEngine::update_mission_one(Gamepad &pad,N5110 &lcd)
 {
-    check_goal(pad);
-    check_enemybeam_collisions(pad);
-   // check_beam_pressed(pad,lcd);
-    // important to update paddles and ball before checking collisions so can
-    // correct for it before updating the display
-    _p1.update(_d,_mag);
-    _beam.update();
-    _enemybeam.update();
-    check_enemy_collisions(pad);
-    check_spacecraft_collisions(pad);
+    check_playerbeam_collision(pad); // Check if L/R is being pressed to initiate the player beam
+    check_enemybeam_collisions(pad); // Check if first enemy's beam has passed the wall to initiate a new beam
+    // updating spacecraft and enemy before checking collisions so that
+    // it displays the right value
+    _p1.update(_d,_mag); // Player spacecraft movement update
+    _beam.update();      // Player spacecraft's beam update 
+    
+    // The enemy spacecraft is stationery in mission one 
+    _enemybeam.update(); // Enemy spacecraft's beam update 
+    
+    check_enemy_collisions(pad);      // Check if the player spacecraft beam collides with the enemy spacecraft
+    check_spacecraft_collisions(pad); // Check if the enemy spacecraft beam collides with the player spacecraft
+    
+    // Animations and sound effect for the both the player's and enemy' spacecraft when they are dead
     spacecraft_dead(lcd,pad);
     enemy_dead(lcd,pad);
+    // Check if mission one had been failed or pass to provide appropriate animation and sound effect
     check_mission_one(pad);
-   // if (_second_mission == true){
-   // _p1.update(_d,_mag);    
-   // _e21.update();
-   // _e22.update();
+    
 }
 
-void GameEngine::update2(Gamepad &pad,N5110 &lcd)
+void GameEngine::update_mission_two(Gamepad &pad,N5110 &lcd)
 {
-    check_goal(pad);
-    check_enemybeam2_collisions(pad);
-   // check_beam_pressed(pad,lcd);
-    // important to update paddles and ball before checking collisions so can
-    // correct for it before updating the display
-    _p1.update(_d,_mag);
-    _beam.update();
-    _enemybeam2.update();
-    _e21.update();
-    _e22.update();
-    check_enemy2_collisions(pad);
-    check_spacecraft2_collisions(pad);
-    check_wall_collisions(pad);
+    check_playerbeam_collision(pad);  // Check if L/R is being pressed to initiate the player beam
+    check_enemybeam2_collisions(pad); // Check if first enemy's beam has passed the wall to initiate a new beam
+    // updating spacecraft and enemy before checking collisions so that
+    // it displays the right value
+    _p1.update(_d,_mag);  // Player spacecraft movement update
+    _beam.update();       // Player spacecraft's beam update
+    
+    _enemybeam2.update(); // Enemy spacecraft's beam update
+    _e21.update();        // Second-one enemy spacecraft movement update
+    _e22.update();        // Second-two enemy spacecraft movement update
+    
+    check_enemy2_collisions(pad); // Check if the player spacecraft beam collides with the enemy spacecraft
+    check_spacecraft2_collisions(pad); // Check if the enemy spacecraft beam collides with the player spacecraft
+    check_wall_collisions(pad);   // Check if enemy spacecraft hits the top and bottom wall to bounce off
+    
+    // Animations and sound effect for the both the player's and enemy' spacecraft when they are dead
     spacecraft2_dead(lcd,pad);
     enemy2_dead(lcd,pad);
+    // Check if mission two had been failed or pass to provide appropriate animation and sound effect
     check_mission_two(pad);
 
 }
 
-void GameEngine::update3(Gamepad &pad,N5110 &lcd)
+void GameEngine::update_mission_three(Gamepad &pad,N5110 &lcd)
 {
-    check_goal(pad);
+    check_playerbeam_collision(pad);
     check_enemybeam3_collisions(pad);
-   // check_beam_pressed(pad,lcd);
-    // important to update paddles and ball before checking collisions so can
-    // correct for it before updating the display
-    _p1.update(_d,_mag);
-    _beam.update();
-    _enemybeam3.update();
-    _e3.update();
-    check_enemy3_collisions(pad);
-    check_spacecraft3_collisions(pad);
-    check_wall2_collisions(pad);
+  
+    _p1.update(_d,_mag);                // Player spacecraft movement update
+    _beam.update();                     // Player spacecraft beam update
+    _enemybeam3.update();               // Third enemy's spacecraft's beam update
+    _e3.update();                       // Third enemy spacecraft movement update
+    check_enemy3_collisions(pad);       // Check if the player spacecraft beam collides with the third enemy spacecraft
+    check_spacecraft3_collisions(pad);  // Check if the third enemy spacecraft beam collides with the player spacecraft
+    check_wall2_collisions(pad); // Check if enemy spacecraft hits the top,bottom, wall to bounce off
+    // Animations and sound effect for the both the player's and enemy' spacecraft
     spacecraft3_dead(lcd,pad);
     enemy3_dead(lcd,pad);
+    // Check if mission three had been failed or pass to provide appropriate animation and sound effect
     check_mission_three(pad);
 
 }
 void GameEngine::check_enemy_collisions(Gamepad &pad)
 {
-    Vector2D p1_pos = _p1.get_pos();
+    // read current enemy spacecraft's and player spacecraft's beam attributes
     Vector2D beam_pos = _beam.get_pos();
-    // check e1 next
     Vector2D e1_pos = _e1.get_enemy_pos();
 
-    // see if ball has hit the paddle by checking for overlaps
+    // see if player's spacecraft beam has hit the enemy's spacecraft by checking for overlaps
     if (
         (beam_pos.y >= e1_pos.y) && //top
         (beam_pos.y <= e1_pos.y + 7) && //bottom
         (beam_pos.x + _beam_size >= _e1a) && //left
         (beam_pos.x + _beam_size <= _e1a + 8)  //right
     ) {
-        // if it has, fix position and reflect x velocity
-       // beam_pos.x = _e1a - _beam_size;
-       // beam_velocity.x = -beam_velocity.x;
-        // audio feedback
+        // add first enemy health
         _e1.add_health();
         spacebeam = true;
+        // audio feedback
         pad.tone(1000.0,0.1);
     }
     
@@ -311,109 +324,115 @@
 
 void GameEngine::check_enemy2_collisions(Gamepad &pad)
 {
-    Vector2D p1_pos = _p1.get_pos();
+    // read curent player spacecraft's beam attributes
     Vector2D beam_pos = _beam.get_pos();
-    // check e1 next
+    // check e21 first
     Vector2D e21_pos = _e21.get_enemy21_pos();
-    Vector2D e22_pos = _e22.get_enemy22_pos();
     
-    // see if ball has hit the paddle by checking for overlaps
+    // see if player's spacecraft beam has hit the enemy's spacecraft by checking for overlaps
     if (
         (beam_pos.y >= e21_pos.y) && //top
         (beam_pos.y <= e21_pos.y + 7) && //bottom
         (beam_pos.x + _beam_size >= _e2a) && //left
         (beam_pos.x + _beam_size <= _e2a + 7)  //right
     ) {
-        // if it has, fix position and reflect x velocity
-       // beam_pos.x = _e1a - _beam_size;
-       // beam_velocity.x = -beam_velocity.x;
+        // add health to first second level enemy
+        _e21.add_health();
+        // set boolean spacebeam true
+        spacebeam = true;
         // audio feedback
-        _e21.add_health();
-        spacebeam = true;
         pad.tone(1000.0,0.1);
     }
+    // check e22 next
+    Vector2D e22_pos = _e22.get_enemy22_pos();
+    
     if (
         (beam_pos.y >= e22_pos.y) && //top
         (beam_pos.y <= e22_pos.y + 7) && //bottom
         (beam_pos.x + _beam_size >= _e2a) && //left
         (beam_pos.x + _beam_size <= _e2a + 7)  //right
     ) {
-        // if it has, fix position and reflect x velocity
-       // beam_pos.x = _e1a - _beam_size;
-       // beam_velocity.x = -beam_velocity.x;
+        // add health to second, second level enemy
+        _e22.add_health();
+        // set boolean spacebeam true
+        spacebeam = true;
         // audio feedback
-        _e22.add_health();
-        spacebeam = true;
         pad.tone(1000.0,0.1);
     }
+    
     // write new attributes
-   
     _beam.set_pos(beam_pos);
 }
 
 void GameEngine::check_enemy3_collisions(Gamepad &pad)
 {
-    Vector2D p1_pos = _p1.get_pos();
+    // read curent player's spacecraft beam attributes
     Vector2D beam_pos = _beam.get_pos();
-    // check e1 next
     
+    // check e3boss first
     Vector2D e3boss_pos = _e3.get_enemyboss_pos();
-    Vector2D e3enemy1_pos = _e3.get_enemy1_pos();
-    Vector2D e3enemy2_pos = _e3.get_enemy2_pos();
     
-    // see if ball has hit the paddle by checking for overlaps
+    // see if player's spacecraft beam has hit the enemy's spacecraft by checking for overlaps
     if (
         (beam_pos.y >= e3boss_pos.y) && //top
         (beam_pos.y <= e3boss_pos.y + 12) && //bottom
         (beam_pos.x + _beam_size >= _e3a) && //left
         (beam_pos.x + _beam_size <= _e3a + 12)  //right
     ) {
-        // if it has, fix position and reflect x velocity
-       // beam_pos.x = _e1a - _beam_size;
-       // beam_velocity.x = -beam_velocity.x;
+        // add health to enemy boss
+        _e3.add_health_boss();
+        // set boolean spacebeam true
+        spacebeam = true;
         // audio feedback
-        _e3.add_health_boss();
-        spacebeam = true;
         pad.tone(1000.0,0.1);
     }
+    // check e3enemy1 next
+    Vector2D e3enemy1_pos = _e3.get_enemy1_pos();
+    
     if (
         (beam_pos.y >= e3enemy1_pos.y) && //top
         (beam_pos.y <= e3enemy1_pos.y + 6) && //bottom
         (beam_pos.x + _beam_size >= _e3c) && //left
         (beam_pos.x + _beam_size <= _e3c + 7)  //right
     ) {
-        // if it has, fix position and reflect x velocity
-       // beam_pos.x = _e1a - _beam_size;
-       // beam_velocity.x = -beam_velocity.x;
+        // add health to first third level enemy
+        _e3.add_health_enemy1();
+        // set boolean spacebeam true
+        spacebeam = true;
         // audio feedback
-        _e3.add_health_enemy1();
-        spacebeam = true;
         pad.tone(1000.0,0.1);
     }
+    // check e3enemy2 next
+    Vector2D e3enemy2_pos = _e3.get_enemy2_pos();
+    
     if (
         (beam_pos.y >= e3enemy2_pos.y) && //top
         (beam_pos.y <= e3enemy2_pos.y + 6) && //bottom
         (beam_pos.x + _beam_size >= _e3c) && //left
         (beam_pos.x + _beam_size <= _e3c + 7)  //right
     ) {
+        // add health to second third level enemy
         _e3.add_health_enemy2();
+        // set boolean spacebeam true
         spacebeam = true;
-       // audio feedback
+        // audio feedback
         pad.tone(1000.0,0.1);
     }
     // write new attributes
     _beam.set_pos(beam_pos);
 }
 
-void GameEngine::check_goal(Gamepad &pad)
+void GameEngine::check_playerbeam_collision(Gamepad &pad)
 {
-    Vector2D p1_pos = _p1.get_pos();
-    Vector2D beam_pos = _beam.get_pos();
-    // P2 has scored
-        if(_R == true){
-            if (beam_pos.x + _beam_size > WIDTH || (spacebeam == true)){
+    Vector2D p1_pos = _p1.get_pos(); // Get player's spacecraft position
+    Vector2D beam_pos = _beam.get_pos(); // Get player's spacecraft beam position
+    
+        if((_R == true)|| (_L == true)){ // 
+          //  if (beam_pos.x + _beam_size > WIDTH || (spacebeam == true)){
                 _beam.init(_beam_size,p1_pos.x,p1_pos.y);
-    }
+                _R = false;
+                _L = false;
+   // }
 }
 }