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 Gamepad N5110 mbed-rtos
Diff: GameEngine/GameEngine.cpp
- Revision:
- 5:016a7315b75d
- Parent:
- 4:4d673fb2d9dc
- Child:
- 6:1fcfd331c047
--- a/GameEngine/GameEngine.cpp Sun May 05 17:41:46 2019 +0000 +++ b/GameEngine/GameEngine.cpp Mon May 06 18:29:49 2019 +0000 @@ -9,6 +9,8 @@ { } + +// draws the background of the game int backgrounds [48][84] = { {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, @@ -61,6 +63,8 @@ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, }; + +// draws alphabet r in morse code int r [3][13] = { {0,1,0,0,0,0,0,0,0,0,0,1,0}, @@ -69,6 +73,7 @@ }; +// draws alphabet e in morse code int e [3][3] = { {0,1,0}, @@ -77,6 +82,7 @@ }; +// draws alphabet x in morse code int x [3][19] = { {0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0}, @@ -85,6 +91,7 @@ }; +// draws explosion int explosion [23] [23] = { {0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0}, @@ -249,8 +256,6 @@ // 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); } @@ -274,8 +279,6 @@ // 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); } @@ -294,8 +297,6 @@ // 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) @@ -422,66 +423,66 @@ _beam.set_pos(beam_pos); } -void GameEngine::check_playerbeam_collision(Gamepad &pad) +void GameEngine::check_playerbeam_collision(Gamepad &pad) // check if player's spacecraft beam has collided with the edges of screen or enemy { 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((_R == true)|| (_L == true)){ _beam.init(_beam_size,p1_pos.x,p1_pos.y); //Initialise the beam - if (beam_pos.x + _beam_size > WIDTH || (spacebeam == true)){ - _R = false; + if ((beam_pos.x + _beam_size > WIDTH) || (spacebeam == true)){ // if hits the enemy or the wall + _R = false; // Then set the boolean _R and _L to false _L = false; } } } -void GameEngine::check_enemybeam_collisions(Gamepad &pad) +void GameEngine::check_enemybeam_collisions(Gamepad &pad) // check if enemy beam has collided with the edges of screen or spacecraft in stage one { Vector2D enemybeam_pos = _enemybeam.get_pos(); // Get first enemy's beam position - if ((_ebeam == true)||(enemybeam_pos.x - _beam_size < 0)) { - _enemybeam.init(_beam_size,_e1a,_e1b); // Initialise the enemy beam - _ebeam = false; + if ((_ebeam == true)||(enemybeam_pos.x - _beam_size < 0)) { // if hits the speacecraft or the wall + _enemybeam.init(_beam_size,_e1a,_e1b); // Initialise the enemy beam in stage one + _ebeam = false; // Then set the boolean _ebeam to false } } -void GameEngine::check_enemybeam2_collisions(Gamepad &pad) +void GameEngine::check_enemybeam2_collisions(Gamepad &pad) // check if enemy beam has collided with the edges of screen or spacecraft in stage two { - Vector2D enemy21_pos = _e21.get_enemy21_pos(); - Vector2D enemy22_pos = _e22.get_enemy22_pos(); - Vector2D enemybeam21_pos = _enemybeam2.get_pos_21(); - Vector2D enemybeam22_pos = _enemybeam2.get_pos_22(); - // P2 has scored - if ((_ebeam21 == true)||(_ebeam22 == true)||(enemybeam21_pos.x - _beam2_size < 0)||(enemybeam22_pos.x - _beam2_size < 0)) { - _enemybeam2.init(_beam2_size,enemy21_pos.x,enemy21_pos.y,enemy22_pos.x,enemy22_pos.y); - _ebeam21 = false; + Vector2D enemy21_pos = _e21.get_enemy21_pos(); // Get first enemy's position in stage two + Vector2D enemy22_pos = _e22.get_enemy22_pos(); // Get second enemy's position in stage two + Vector2D enemybeam21_pos = _enemybeam2.get_pos_21(); // Get first enemy's beam position in stage two + Vector2D enemybeam22_pos = _enemybeam2.get_pos_22(); // Get second enemy's beam position in stage two + + if ((_ebeam21 == true)||(_ebeam22 == true)||(enemybeam21_pos.x - _beam2_size < 0)||(enemybeam22_pos.x - _beam2_size < 0)) { // if hits the speacecraft or the wall + _enemybeam2.init(_beam2_size,enemy21_pos.x,enemy21_pos.y,enemy22_pos.x,enemy22_pos.y); // Initialise the enemy beam in stage two + _ebeam21 = false; // Then set the boolean _ebeam21 and _ebeam22 to false _ebeam22 = false; } } -void GameEngine::check_enemybeam3_collisions(Gamepad &pad) +void GameEngine::check_enemybeam3_collisions(Gamepad &pad) // check if enemy beam has collided with the edges of screen or spacecraft in stage three { - Vector2D enemyboss_pos = _e3.get_enemyboss_pos(); - Vector2D enemy1_pos = _e3.get_enemy1_pos(); - Vector2D enemy2_pos = _e3.get_enemy2_pos(); + Vector2D enemyboss_pos = _e3.get_enemyboss_pos(); // Get boss enemy's position in stage three + Vector2D enemy1_pos = _e3.get_enemy1_pos(); // Get first regular enemy's position in stage three + Vector2D enemy2_pos = _e3.get_enemy2_pos(); // Get second regular enemy's position in stage three - Vector2D enemybossbeam3_pos = _enemybeam3.get_pos_boss(); - Vector2D enemy1beam3_pos = _enemybeam3.get_pos_enemy1(); - Vector2D enemy2beam3_pos = _enemybeam3.get_pos_enemy2(); - // P2 has scored - if ((_ebeam3boss == true)||(_ebeam31 == true)||(_ebeam32 == true)||(enemybossbeam3_pos.x - _beam_size < 0)||(enemy1beam3_pos.x - _beam_size < 0)||(enemy2beam3_pos.x - _beam_size < 0)) { - _enemybeam3.init(_beam_size,enemyboss_pos.x,enemyboss_pos.y,enemy1_pos.x,enemy1_pos.y,enemy2_pos.x,enemy2_pos.y); - _ebeam3boss = false; + Vector2D enemybossbeam3_pos = _enemybeam3.get_pos_boss(); // Get boss enemy's beam position in stage three + Vector2D enemy1beam3_pos = _enemybeam3.get_pos_enemy1(); // Get first regular enemy's beam position in stage three + Vector2D enemy2beam3_pos = _enemybeam3.get_pos_enemy2(); // Get second regular enemy's beam position in stage three + + if ((_ebeam3boss == true)||(_ebeam31 == true)||(_ebeam32 == true)||(enemybossbeam3_pos.x - _beam_size < 0)||(enemy1beam3_pos.x - _beam_size < 0)||(enemy2beam3_pos.x - _beam_size < 0)) { // if hits the speacecraft or the wall + _enemybeam3.init(_beam_size,enemyboss_pos.x,enemyboss_pos.y,enemy1_pos.x,enemy1_pos.y,enemy2_pos.x,enemy2_pos.y); // Initialise the enemy beam in stage three + _ebeam3boss = false; // Then set boolean _ebeam3boss,_ebeam31, _ebeam32 to false _ebeam31 = false; _ebeam32 = false; } } -void GameEngine::check_spacecraft_collisions(Gamepad &pad) +void GameEngine::check_spacecraft_collisions(Gamepad &pad) // check spacecraft collision with enemy beam in stage one { - Vector2D enemybeam_pos = _enemybeam.get_pos(); - Vector2D p1_pos = _p1.get_pos(); + Vector2D enemybeam_pos = _enemybeam.get_pos(); // Gets the position of the enemy's beam in stage one + Vector2D p1_pos = _p1.get_pos(); // Gets the position of the player's spacecraft // see if beam has hit the enemy by checking for overlaps if ( @@ -490,20 +491,20 @@ (enemybeam_pos.x >= _p1x) && //left (enemybeam_pos.x <= _p1x + 11) //right ) { - _p1.add_health(); - _ebeam = true; - pad.tone(1000.0,0.1); + _p1.add_health(); // adds health + _ebeam = true; // sets boolean to true to initialise beam + pad.tone(1000.0,0.1); // outputs sound if it hits the player's spacecraft } - + // write new attributes _enemybeam.set_pos(enemybeam_pos); } -void GameEngine::check_spacecraft2_collisions(Gamepad &pad) +void GameEngine::check_spacecraft2_collisions(Gamepad &pad) // check spacecraft collision with enemy beam in stage two { - Vector2D enemybeam21_pos = _enemybeam2.get_pos_21(); - Vector2D enemybeam22_pos = _enemybeam2.get_pos_22(); - Vector2D p1_pos = _p1.get_pos(); + Vector2D enemybeam21_pos = _enemybeam2.get_pos_21(); // Gets the position of the first enemy's beam in stage two + Vector2D enemybeam22_pos = _enemybeam2.get_pos_22(); // Gets the position of the second enemy's beam in stage two + Vector2D p1_pos = _p1.get_pos(); // Gets the position of the player's spacecraft // see if beam has hit the enemy by checking for overlaps if ( @@ -512,9 +513,9 @@ (enemybeam21_pos.x >= _p1x) && //left (enemybeam21_pos.x <= _p1x + 11) //right ) { - _p1.add_health(); - _ebeam21 = true; - pad.tone(1000.0,0.1); + _p1.add_health(); // adds health + _ebeam21 = true; // sets boolean to true to initialise beam + pad.tone(1000.0,0.1); // outputs sound if it hits the player's spacecraft } else if ( (enemybeam22_pos.y >= p1_pos.y) && //top @@ -522,22 +523,23 @@ (enemybeam22_pos.x >= _p1x) && //left (enemybeam22_pos.x <= _p1x + 11) //right ) { - _p1.add_health(); - _ebeam22 = true; - pad.tone(1000.0,0.1); + _p1.add_health(); // adds health + _ebeam22 = true; // sets boolean to true to initialise beam + pad.tone(1000.0,0.1); // outputs sound if it hits the player's spacecraft } + // write new attributes _enemybeam2.set_pos_21(enemybeam21_pos); _enemybeam2.set_pos_22(enemybeam22_pos); } -void GameEngine::check_spacecraft3_collisions(Gamepad &pad) +void GameEngine::check_spacecraft3_collisions(Gamepad &pad) // check spacecraft collision with enemy beam in stage three { - Vector2D enemybossbeam_pos = _enemybeam3.get_pos_boss(); - Vector2D enemy1beam_pos = _enemybeam3.get_pos_enemy1(); - Vector2D enemy2beam_pos = _enemybeam3.get_pos_enemy2(); + Vector2D enemybossbeam_pos = _enemybeam3.get_pos_boss(); // Gets the position of the boss enemy's beam in stage three + Vector2D enemy1beam_pos = _enemybeam3.get_pos_enemy1(); // Gets the position of the first enemy's beam in stage three + Vector2D enemy2beam_pos = _enemybeam3.get_pos_enemy2(); // Gets the position of the second enemy's beam in stage three - Vector2D p1_pos = _p1.get_pos(); + Vector2D p1_pos = _p1.get_pos(); // Gets the position of the player's spacecraft // see if beam has hit the enemy by checking for overlaps if ( @@ -546,8 +548,8 @@ (enemybossbeam_pos.x >= _p1x) && //left (enemybossbeam_pos.x <= _p1x + 11) //right ) { - _p1.add_health(); - _ebeam3boss = true; + _p1.add_health(); // adds health + _ebeam3boss = true; // sets boolean to true to initialise beam pad.tone(1000.0,0.1); } else if ( @@ -556,8 +558,8 @@ (enemy1beam_pos.x >= _p1x) && //left (enemy1beam_pos.x <= _p1x + 11) //right ) { - _p1.add_health(); - _ebeam31 = true; + _p1.add_health(); // adds health + _ebeam31 = true; // sets boolean to true to initialise beam pad.tone(1000.0,0.1); } else if ( @@ -566,56 +568,58 @@ (enemy2beam_pos.x >= _p1x) && //left (enemy2beam_pos.x <= _p1x + 11) //right ) { - _p1.add_health(); - _ebeam32 = true; - pad.tone(1000.0,0.1); + _p1.add_health(); // adds health + _ebeam32 = true; // sets boolean to true to initialise beam + pad.tone(1000.0,0.1); // outputs sound if it hits the player's spacecraft } - + // write new attributes _enemybeam3.set_pos_boss(enemybossbeam_pos); _enemybeam3.set_pos_enemy1(enemy1beam_pos); _enemybeam3.set_pos_enemy2(enemy2beam_pos); } -void GameEngine::check_wall_collisions(Gamepad &pad) +void GameEngine::check_wall_collisions(Gamepad &pad) // check wall collision for enemies in stage two { - // read current ball attributes + // read current attributes of the enemies Vector2D enemy21_pos = _e21.get_enemy21_pos(); Vector2D enemy22_pos = _e22.get_enemy22_pos(); Vector2D enemy21_movement = _e21.get_movement(); Vector2D enemy22_movement = _e22.get_movement(); // check if hit top wall + // first enemy if (enemy21_pos.y <= 1) { // 1 due to 1 pixel boundary enemy21_pos.y = 1; // bounce off ceiling without going off screen enemy21_movement.y = -enemy21_movement.y; } + //second enemy + else if (enemy22_pos.y <= 1) { + enemy22_pos.y = 1; + enemy22_movement.y = -enemy22_movement.y; + } // check if hit bottom wall + // first enemy else if (enemy21_pos.y + 7 >= (HEIGHT-1) ) { // bottom pixel is 47 - // hit bottom enemy21_pos.y = (HEIGHT-1) - 7; // stops ball going off screen enemy21_movement.y = -enemy21_movement.y; - // audio feedback - } else if (enemy22_pos.y + 7 >= (HEIGHT-1) ) { // bottom pixel is 47 - // hit bottom - enemy22_pos.y = (HEIGHT-1) - 7; // stops ball going off screen + // second enemy + } else if (enemy22_pos.y + 7 >= (HEIGHT-1) ) { + enemy22_pos.y = (HEIGHT-1) - 7; enemy22_movement.y = -enemy22_movement.y; - // audio feedback - } else if (enemy22_pos.y <= 1) { // 1 due to 1 pixel boundary - enemy22_pos.y = 1; // bounce off ceiling without going off screen - enemy22_movement.y = -enemy22_movement.y; - } + + } - // update ball parameters + // update first and second enemy parameters _e21.set_movement(enemy21_movement); _e22.set_movement(enemy22_movement); _e21.set_enemy21_pos(enemy21_pos); _e22.set_enemy22_pos(enemy22_pos); } -void GameEngine::check_wall2_collisions(Gamepad &pad) +void GameEngine::check_wall2_collisions(Gamepad &pad) // check wall collision for enemies in stage three { - // read current ball attributes + // read current enemy attributes for boss in stage three Vector2D enemyboss_pos = _e3.get_enemyboss_pos(); Vector2D enemyboss_movement = _e3.get_movement(); @@ -626,83 +630,80 @@ } // check if hit bottom wall else if (enemyboss_pos.y + 12 >= (HEIGHT-1) ) { // bottom pixel is 47 - // hit bottom enemyboss_pos.y = (HEIGHT-1) - 12; // stops ball going off screen enemyboss_movement.y = -enemyboss_movement.y; - // audio feedback - }else if (enemyboss_pos.x + 12 >= (WIDTH-1) ) { // bottom pixel is 47 - // hit bottom + // check if hit right wall + }else if (enemyboss_pos.x + 12 >= (WIDTH-1) ) { // right pixel is 83 enemyboss_pos.x = (WIDTH-1) - 12; // stops ball going off screen enemyboss_movement.x = -enemyboss_movement.x; - // audio feedback - }else if (enemyboss_pos.x <= WIDTH/2) { // 1 due to 1 pixel boundary + // check if left right wall + }else if (enemyboss_pos.x <= WIDTH/2) { // half the width (42) enemyboss_pos.x = WIDTH/2; // bounce off ceiling without going halfway enemyboss_movement.x = -enemyboss_movement.x; } - + // update boss enemy parameters _e3.set_movement(enemyboss_movement); _e3.set_enemyboss_pos(enemyboss_pos); } -void GameEngine::enemy_dead(N5110 &lcd, Gamepad &pad){ - int e1_health = _e1.get_health(); - Vector2D e1_pos = _e1.get_enemy_pos(); - if (e1_health == 10){ +void GameEngine::enemy_dead(N5110 &lcd, Gamepad &pad){ // animation when the enemy is dead in stage one + + int e1_health = _e1.get_health(); // Gets the health of the enemy + Vector2D e1_pos = _e1.get_enemy_pos(); // Gets the position of the enemy + + if (e1_health == 10){ + // explodes and outputs sound if the enemy is dead lcd.drawSprite(e1_pos.x-10,e1_pos.y-10,23,23,(int *)explosion); pad.tone(1000.0,0.5); pad.tone(800.0,0.5); pad.tone(600.0,0.5); pad.tone(400.0,0.5); - // lcd.refresh(); wait(0.5); - lcd.drawSprite(e1_pos.x-10,e1_pos.y-10,23,23,(int *)explosion); _e1.update(); - // wait(2.0); - _stage = 2; - _e1.add_health(); + lcd.drawSprite(e1_pos.x-10,e1_pos.y-10,23,23,(int *)explosion); + _stage = 2; // mission one pass lcd.refresh(); } } -void GameEngine::enemy2_dead(N5110 &lcd, Gamepad &pad){ +void GameEngine::enemy2_dead(N5110 &lcd, Gamepad &pad){ // animation when the enemy is dead in stage two - int e21_health = _e21.get_health(); - int e22_health = _e22.get_health(); + int e21_health = _e21.get_health(); // Gets the health of the first enemy + int e22_health = _e22.get_health(); // Gets the health of the second enemy - Vector2D e21_pos = _e21.get_enemy21_pos(); - Vector2D e22_pos = _e22.get_enemy22_pos(); + Vector2D e21_pos = _e21.get_enemy21_pos(); // Gets the position of the first enemy + Vector2D e22_pos = _e22.get_enemy22_pos(); // Gets the position of the second enemy - if ((e21_health >= 10) && (e22_health >= 10)){ + if ((e21_health >= 10) && (e22_health >= 10)){ + // explodes and outputs sound if the enemy is dead lcd.drawSprite(e21_pos.x-10,e21_pos.y-10,23,23,(int *)explosion); lcd.drawSprite(e22_pos.x-10,e22_pos.y-10,23,23,(int *)explosion); pad.tone(1000.0,0.5); pad.tone(800.0,0.5); pad.tone(600.0,0.5); pad.tone(400.0,0.5); - // lcd.refresh(); wait(0.2); lcd.drawSprite(e21_pos.x-10,e21_pos.y-10,23,23,(int *)explosion); lcd.drawSprite(e22_pos.x-10,e22_pos.y-10,23,23,(int *)explosion); - _stage = 4; - _e21.add_health(); - _e22.add_health(); + _stage = 4; // mission two pass lcd.refresh(); } } -void GameEngine::enemy3_dead(N5110 &lcd, Gamepad &pad){ +void GameEngine::enemy3_dead(N5110 &lcd, Gamepad &pad){ // animation when the enemy is dead in stage three + + int e3boss_health = _e3.get_health_boss(); // Gets the health of the boss enemy + int e31_health = _e3.get_health_enemy1(); // Gets the health of the first enemy + int e32_health = _e3.get_health_enemy2(); // Gets the health of the second enemy - int e3boss_health = _e3.get_health_boss(); - int e31_health = _e3.get_health_enemy1(); - int e32_health = _e3.get_health_enemy2(); + Vector2D e3boss_pos = _e3.get_enemyboss_pos(); // Gets the position of the boss enemy + Vector2D e31_pos = _e3.get_enemy1_pos(); // Gets the position of the first enemy + Vector2D e32_pos = _e3.get_enemy2_pos(); // Gets the position of the second enemy - Vector2D e3boss_pos = _e3.get_enemyboss_pos(); - Vector2D e31_pos = _e3.get_enemy1_pos(); - Vector2D e32_pos = _e3.get_enemy2_pos(); - + // explodes and outputs sound if the enemy is dead if ((e3boss_health >= 10) && (e31_health >= 10) && (e32_health >= 10)){ lcd.drawSprite(e3boss_pos.x-10,e3boss_pos.y-10,23,23,(int *)explosion); lcd.drawSprite(e31_pos.x-10,e31_pos.y-10,23,23,(int *)explosion); @@ -711,28 +712,24 @@ pad.tone(800.0,0.5); pad.tone(600.0,0.5); pad.tone(400.0,0.5); - // lcd.refresh(); wait(0.2); lcd.drawSprite(e3boss_pos.x-10,e3boss_pos.y-10,23,23,(int *)explosion); lcd.drawSprite(e31_pos.x-10,e31_pos.y-10,23,23,(int *)explosion); lcd.drawSprite(e32_pos.x-10,e32_pos.y-10,23,23,(int *)explosion); - _stage = 6; - _e3.add_health_boss(); - _e3.add_health_enemy1(); - _e3.add_health_enemy2(); + _stage = 6; // mission three pass lcd.refresh(); } } -void GameEngine::spacecraft_dead(N5110 &lcd, Gamepad &pad) -{ - - int p1_health = _p1.get_health(); - Vector2D p1_pos = _p1.get_pos(); +void GameEngine::spacecraft_dead(N5110 &lcd, Gamepad &pad) // animation when the player's spacecraft is dead in stage one +{ + int p1_health = _p1.get_health(); // Gets the health of the player spacecraft + Vector2D p1_pos = _p1.get_pos(); // Gets the position of the player's spacecraft if (p1_health == 6){ + // explodes and outputs sound if the enemy is dead lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion); pad.tone(1000.0,0.5); pad.tone(800.0,0.5); @@ -743,48 +740,21 @@ wait(0.1); lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion); _p1.update_move(); - // wait(2.0); - _stage = 1; - _p1.add_health(); + _stage = 1; // mission one fail lcd.refresh(); } } -void GameEngine::spacecraft2_dead(N5110 &lcd, Gamepad &pad) +void GameEngine::spacecraft2_dead(N5110 &lcd, Gamepad &pad) // animation when the player's spacecraft is dead in stage two { - int p1_health = _p1.get_health(); - Vector2D p1_pos = _p1.get_pos(); + int p1_health = _p1.get_health(); // Gets the health of the player spacecraft + Vector2D p1_pos = _p1.get_pos(); // Gets the position of the player's spacecraft if (p1_health == 6){ - lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion); - pad.tone(1000.0,0.5); - pad.tone(800.0,0.5); - pad.tone(600.0,0.5); - pad.tone(400.0,0.5); - wait(0.5); - lcd.refresh(); - wait(0.1); - lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion); - _p1.update_move(); - // wait(2.0); - _stage = 3; - _p1.add_health(); - lcd.refresh(); - } - -} - -void GameEngine::spacecraft3_dead(N5110 &lcd, Gamepad &pad) -{ - - int p1_health = _p1.get_health(); - Vector2D p1_pos = _p1.get_pos(); - - if (p1_health == 6){ - + // explodes and outputs sound if the enemy is dead lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion); pad.tone(1000.0,0.5); pad.tone(800.0,0.5); @@ -795,99 +765,34 @@ wait(0.1); lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion); _p1.update_move(); - // wait(2.0); - _stage = 5; - _p1.add_health(); + _stage = 3; // mission two fail lcd.refresh(); } } -void GameEngine::check_mission_one(Gamepad &pad){ - - if (_stage == 1){ - pad.tone(233.0,0.5); - wait(0.5); - pad.tone(184.0,0.5); - wait(0.5); - pad.tone(174.0,2.0); - wait(1.0); - } else if (_stage == 2){ - - pad.leds_off(); - pad.tone(184.0,0.2); - wait(0.5); - pad.tone(233.0,0.2); - wait(0.5); - pad.tone(184.0,0.2); - wait(0.5); - pad.tone(233.0,0.2); - wait(0.5); - pad.tone(184.0,0.2); - wait(0.5); - pad.tone(233.0,0.2); - wait(0.5); - pad.tone(184.0,2.0); - wait(0.5); - } -} - -void GameEngine::check_mission_two(Gamepad &pad){ +void GameEngine::spacecraft3_dead(N5110 &lcd, Gamepad &pad) // animation when the player's spacecraft is dead in stage three +{ + int p1_health = _p1.get_health(); // Gets the health of the player spacecraft + Vector2D p1_pos = _p1.get_pos(); // Gets the position of the player's spacecraft - if (_stage == 3){ - pad.tone(233.0,0.5); - wait(0.5); - pad.tone(184.0,0.5); - wait(0.5); - pad.tone(174.0,2.0); - wait(1.0); - } else if (_stage == 4){ - - pad.leds_off(); - pad.tone(184.0,0.2); - wait(0.5); - pad.tone(233.0,0.2); - wait(0.5); - pad.tone(184.0,0.2); - wait(0.5); - pad.tone(233.0,0.2); - wait(0.5); - pad.tone(184.0,0.2); - wait(0.5); - pad.tone(233.0,0.2); - wait(0.5); - pad.tone(184.0,2.0); - wait(0.5); - } -} - -void GameEngine::check_mission_three(Gamepad &pad){ + if (p1_health == 6){ + + // explodes and outputs sound if the enemy is dead + lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion); + pad.tone(1000.0,0.5); + pad.tone(800.0,0.5); + pad.tone(600.0,0.5); + pad.tone(400.0,0.5); + wait(0.5); + lcd.refresh(); + wait(0.1); + lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion); + _p1.update_move(); + _stage = 5; // mission three fail + lcd.refresh(); + } - if (_stage == 5){ - pad.tone(233.0,0.5); - wait(0.5); - pad.tone(184.0,0.5); - wait(0.5); - pad.tone(174.0,2.0); - wait(1.0); - } else if (_stage == 6 ){ - - pad.leds_off(); - pad.tone(184.0,0.2); - wait(0.5); - pad.tone(233.0,0.2); - wait(0.5); - pad.tone(184.0,0.2); - wait(0.5); - pad.tone(233.0,0.2); - wait(0.5); - pad.tone(184.0,0.2); - wait(0.5); - pad.tone(233.0,0.2); - wait(0.5); - pad.tone(184.0,2.0); - wait(0.5); - } } void GameEngine::draw_enemy_health(N5110 &lcd) @@ -895,7 +800,7 @@ // get health of the enemy int e1_health = _e1.get_health(); - if (e21_health < 10){ + if (e1_health <= 10){ lcd.drawRect(62,42,20,4,FILL_TRANSPARENT); lcd.drawRect(62,42,20-2*e1_health,4,FILL_BLACK); } @@ -911,7 +816,7 @@ // get health of the enemy int e21_health = _e21.get_health(); - if (e21_health < 10){ + if (e21_health <= 10){ lcd.drawRect(2,42,20,4,FILL_TRANSPARENT); lcd.drawRect(2,42,20-2*e21_health,4,FILL_BLACK); } @@ -925,7 +830,7 @@ // get health of the enemy int e22_health = _e22.get_health(); - if (e22_health < 10){ + if (e22_health <= 10){ lcd.drawRect(62,42,20,4,FILL_TRANSPARENT); lcd.drawRect(62,42,20-2*e22_health,4,FILL_BLACK); } @@ -942,21 +847,21 @@ int e3enemy1_health = _e3.get_health_enemy1(); int e3enemy2_health = _e3.get_health_enemy2(); - if (e3boss_health < 10){ + if (e3boss_health <= 10){ lcd.drawRect(62,42,20,4,FILL_TRANSPARENT); lcd.drawRect(62,42,20-2*e3boss_health,4,FILL_BLACK); } else { lcd.drawRect(62,42,20,4,FILL_TRANSPARENT); } - if (e3enemy1_health < 10){ + if (e3enemy1_health <= 10){ lcd.drawRect(2,42,20,4,FILL_TRANSPARENT); lcd.drawRect(2,42,20-2*e3enemy1_health,4,FILL_BLACK); } else { lcd.drawRect(2,42,20,4,FILL_TRANSPARENT); } - if (e3enemy2_health < 10){ + if (e3enemy2_health <= 10){ lcd.drawRect(62,2,20,4,FILL_TRANSPARENT); lcd.drawRect(62,2,20-2*e3enemy2_health,4,FILL_BLACK); } @@ -970,9 +875,10 @@ //get the health of the spacecraft int p1_health = _p1.get_health(); - if (p1_health == 0){ + if (p1_health == 0){ // All the lights are switched on pad.leds_on(); - }else if (p1_health == 1){ + + }else if (p1_health == 1){ // Switches off the left most light pad.led(1,0); pad.led(2,1); pad.led(3,1); @@ -980,14 +886,14 @@ pad.led(5,1); pad.led(6,1); - }else if (p1_health == 2){ + }else if (p1_health == 2){ // Switches of the two left most lights pad.led(1,0); pad.led(2,0); pad.led(3,1); pad.led(4,1); pad.led(5,1); pad.led(6,1); - }else if (p1_health == 3){ + }else if (p1_health == 3){ // Swtiches of the three left most lights pad.led(1,0); pad.led(2,0); pad.led(3,0); @@ -995,7 +901,7 @@ pad.led(5,1); pad.led(6,1); - }else if (p1_health == 4){ + }else if (p1_health == 4){ // Switches off the four left most lights pad.led(1,0); pad.led(2,0); pad.led(3,0); @@ -1003,7 +909,7 @@ pad.led(5,1); pad.led(6,1); - }else if (p1_health == 5){ + }else if (p1_health == 5){ // Switches the five left most light pad.led(1,0); pad.led(2,0); pad.led(3,0); @@ -1012,19 +918,19 @@ pad.led(6,1); } else { - pad.leds_off(); + pad.leds_off(); // Switches all the Led light off } } int GameEngine::get_game_stage() { int stage = _stage; - return stage; + return stage; // Gets the value of the stage } int GameEngine::restart_game_stage() { + int stage = _stage; - - stage = 0; + stage = 0; // sets the stage to be zero return stage; } \ No newline at end of file