Meteor defense project

Dependencies:   N5110 mbed

Revision:
40:3a0c66a0e10e
Parent:
39:f92b93efbc72
Child:
41:1b396334256b
--- a/GameEngine/GameEngine.cpp	Tue Apr 25 22:26:14 2017 +0000
+++ b/GameEngine/GameEngine.cpp	Sat Apr 29 19:27:20 2017 +0000
@@ -32,30 +32,30 @@
 }
 void GameEngine::update(Gamepad &pad, N5110 &lcd) {
     weap.init();
-    _d1.droneScan(Array2, charArray2, lcd);
-    _d2.droneScan(Array2, charArray2, lcd);
+    _d1.drone_main(scnd.Arr, scnd.cArr, lcd);
+    _d2.drone_main(scnd.Arr, scnd.cArr, lcd);
     drawSpawn(lcd); 
-    laser_and_bomb(pad, lcd);
-    bombAndShield(pad, lcd);
+    laser_and_cannon(pad, lcd);
+    bomb_And_Shield(pad, lcd);
     checkGameRule(pad, lcd);
 }
 void GameEngine::weapUpgrade(Gamepad &pad, N5110 &lcd) {
     if (pad.check_event(Gamepad::START_PRESSED)) { 
-        _gui.upgrading = 1;
+        _gui.upgrading_flag = 1;
         _gui.preventDoubleClick(pad);
-        while (_gui.upgrading == 1) {
+        while (_gui.upgrading_flag == 1) {
             //printf("laserDamage = %i \n",weap._laserDamage);
-            //go to the main upgrade page with all the values (from Weapon) as reference.
+            //go to the upgrade page with all the values (from Weapon) as reference.
             _gui.upgrades(weap._laserDamage, weap._bombDamage, weap._bombRange, weap._bombCooldown, weap._droneDamage, weap._droneRange, weap._shieldCapacity, weap._shieldRegenRate, weap._cannonDamage, weap._cannonCapacity, weap._cannonRegenRate, pad, lcd); 
             //printf("_gui.saveTheData = %d",_gui.saveTheData);
-            if (_gui.saveTheData == 1) {
-                Data _upgrades = _gui.savedata(); //saving data
+            if (_gui.saveTheData_flag == 1) {
+                Data _upgrades = _gui.get_data(); //saving data
                 //_gui.testingtest(_upgrades);  //code used to test the struct
                 weap.setVar(_upgrades.up, _upgrades.up1);
                 weap.setVar(_upgrades.u1p, _upgrades.u1p1);
                 //printf("TESTING up = %d, up1 = %d, u1p = %d, u1p1 = %d \n",_upgrades.up,_upgrades.up1,_upgrades.u1p,_upgrades.u1p1); 
-                _gui.saveTheData = 0;
-                _gui.upgrading = 0; //get out of while loop after done upgrading
+                _gui.saveTheData_flag = 0;
+                _gui.upgrading_flag = 0; //get out of while loop after done upgrading
             }
             lcd.refresh();
             wait(0.2);
@@ -66,33 +66,33 @@
     }
 }
 void GameEngine::drawSpawn(N5110 &lcd){
-    updateArray(); //clean up & update the array after the spawn took damage.
+    updateArray(); //clean up & update the main.Arr after the spawn took damage.
     if (drawit == 0) { //
         drawit = 30;
-        spa.randomizeSpawn(Array, charArray);
-        spa.moveSpawnABC(Array, Array2, charArray, charArray2);
-        spa.moveSpawnDE(Array, Array2, charArray, charArray2);
+        spa.summon_spawn(main.Arr, main.cArr);
+        spa.moveSpawnABC(main.Arr, scnd.Arr, main.cArr, scnd.cArr);
+        spa.moveSpawnDE(main.Arr, scnd.Arr, main.cArr, scnd.cArr);
         //printf("why u do this to cannon_Firing?? cannon_Firing = %d \n",weap.cannon_Firing);
         if ( fireInTheHole_flag ==1) { //this code because whenever spawn ABCDE moves, weap.cannon_Firing goes to 0 automatically (NO IDEA WHY)
             weap.cannon_Firing = 1;    
         }
     } else {
         drawit -= 0.5;
-        spa.moveSpawnDE(Array, Array2, charArray, charArray2);
-        spa.moveSpawnB(Array, Array2, charArray, charArray2);
+        spa.moveSpawnDE(main.Arr, scnd.Arr, main.cArr, scnd.cArr);
+        spa.moveSpawnB(main.Arr, scnd.Arr, main.cArr, scnd.cArr);
         //printf("moving spawn b \n");
     }
-    spa.updateSpawn(Array, Array2, charArray, charArray2, lcd); 
+    spa.updateSpawn(main.Arr, scnd.Arr, main.cArr, scnd.cArr, lcd); 
 }
-void GameEngine::laser_and_bomb(Gamepad &pad, N5110 &lcd) {
+void GameEngine::laser_and_cannon(Gamepad &pad, N5110 &lcd) {
     weap.drawPlayer(pad, lcd);
-    weap.cannon_Cooldown();
+    weap.cannon_recharge();
     weap.cannon_Meter(lcd);
     //draw a line for the laser when button is pressed
     if (pad.buttonhold_A == 1) {
         //printf("hi, button is working \n");
         weap.weaponMath(pad);
-        weap.laser_Main(Array2, charArray2, lcd);
+        weap.laser_Main(scnd.Arr, scnd.cArr, lcd);
         
         //cannon can only be fired when the laser is switched on.
         if ( weap._cannon > 320) { //when sufficient cost, check for button Y.
@@ -102,7 +102,7 @@
         }
     }
     if ( fireInTheHole_flag == 1) {
-        weap.cannon_main(Array2, charArray2, lcd);    
+        weap.cannon_main(scnd.Arr, scnd.cArr, lcd);    
     }
     if ( weap.cannon_Firing == 0) { //clear flag when cannon is done 
         fireInTheHole_flag = 0;
@@ -112,30 +112,46 @@
     //the only way to lose a life is when a spawn reaches y = 46.
     numberOfLife_leds(pad);
     for ( int x = 0; x < 84; x ++) {
-        if (Array[x][46] > 0) { //if anything reaches line y=46
+        if (main.Arr[x][46] > 0) { //if anything reaches line y=46
             NumberOfLife --;
-            printf("opps you lost a life. NumberOfLife = %d \n",NumberOfLife);
+            //printf("opps you lost a life. NumberOfLife = %d \n",NumberOfLife);
             if (NumberOfLife == 0) {
-                while (1) {
-                    lcd.clear();
-                    lcd.printString("Game Over",10,3);
-                    lcd.refresh();   
-                    pad.leds_on();
-                    wait(0.1);
-                    pad.leds_off();
-                    wait(0.1);
-                }
+                gameOver(pad, lcd);
             }
         }
     }       
 }
+void GameEngine::gameOver(Gamepad &pad, N5110 &lcd) {
+    while (retry_flag == 0 && gameMenu_flag == 0) { //while both are 0
+        lcd.clear();
+        lcd.printString("Game Over",10,3);
+        lcd.printString("GivUp   Retry",0,5);
+        lcd.refresh();   
+        pad.leds_on();
+        wait(0.1);
+        pad.leds_off();
+        wait(0.1);
+        printf("press a button pls. you lost retry_flag = %d gameMenu_flag = %d\n",retry_flag,gameMenu_flag);
+        //must click atleast one button to continue
+        if (pad.check_event(Gamepad::START_PRESSED)) {
+            retry_flag = 1;
+            printf("retry pressed \n");
+            update_RetryToMain();
+        }
+        if (pad.check_event(Gamepad::BACK_PRESSED)) {
+            gameMenu_flag = 1; //bring the player to game menu
+            printf("player surrendered \n");
+        }  
+                      
+    } 
+}
 void GameEngine::numberOfLife_leds(Gamepad &pad) { 
     //light up LEDs depends on number of lifes left.
     if (NumberOfLife == 3) {
-        pad.leds_on();
+        pad.leds_on(); //turn on all leds
     }
     if (NumberOfLife == 2) {
-        pad.led(1, 1.0);
+        pad.led(1, 1.0); //turn on led 1, 2, 5 and 6
         pad.led(2, 1.0);
         pad.led(3, 0.0);
         pad.led(4, 0.0);
@@ -143,7 +159,7 @@
         pad.led(6, 1.0);
     }
     if (NumberOfLife == 1) {
-        pad.led(1, 1.0);
+        pad.led(1, 1.0); //turn on led 1 and 6
         pad.led(2, 0.0);
         pad.led(3, 0.0);
         pad.led(4, 0.0);
@@ -151,35 +167,44 @@
         pad.led(6, 1.0);   
     }
 }
-void GameEngine::bombAndShield(Gamepad &pad, N5110 &lcd) { 
-    weap.bombCooldown(Array2, pad, lcd);
+void GameEngine::bomb_And_Shield(Gamepad &pad, N5110 &lcd) { 
+    weap.bomb_main(scnd.Arr, pad, lcd);
     if (pad.check_event(Gamepad::X_PRESSED)) {
         //to prevent from detonating the bomb at instant when button X is accidentally pressed 
+        //printf("instant bomb detonate prevented");
     }
-    if (pad.buttonhold_B == 1) { //if B pressed, generate shield. Shield doesnt have to be fully charged to be activated
-        if (weap._shield > 0) { //shield will only activate if the shield has not depleted.
-            weap.energyShield(Array, Array2, charArray, charArray2, lcd);
-        } else { //or else, deactivate the shield and recharge the shield.
-            pad.buttonhold_B = 0;
-        }    
-    } 
-    if (pad.buttonhold_B == 0) { // recharge shield 
-        if (weap._shield < weap._shieldCapacity ) {
-            weap._shield = weap._shield + weap._shieldRegenRate;
-            //printf("current shield = %d \n",weap._shield); 
-            //printf("shield regen rate = %d \n",weap._shieldRegenRate);
-        } else { //when the shield is fully charged. It will automatically activate the shield.
-                pad.buttonhold_B = 1;
-        }
+    weap.shield_main(scnd.Arr, scnd.cArr, pad, lcd);
+    if (pad.check_event(Gamepad::B_PRESSED)) {
+        //to prevent the button from clicking twice
+        printf("shield double click prevented");
     }
-    weap.shieldMeter(lcd); 
 }
 void GameEngine::updateArray() { //clean up tool
     for (int x = 0; x < Cols; x++) {
         for (int y = 0; y < Rows; y++) {
-            Array[x][y] = Array2[x][y];
-            //printf(" Array[%d][%d] = %d \n",x,y,Array2[x][y]);
-            spa.deleteChar(x, y, Array, charArray2);
+            main.Arr[x][y] = scnd.Arr[x][y];
+            //printf(" main.Arr[%d][%d] = %d \n",x,y,scnd.Arr[x][y]);
+            spa.deleteChar(x, y, main.Arr, scnd.cArr);
         }
     }    
+}
+void GameEngine::update_MainToRetry() {
+    for (int x = 0; x < Cols; x ++) {
+        for (int y = 0; y < Rows; y ++) {
+            retry.Arr[x][y] = main.Arr[x][y];
+            retry.cArr[x][y]= main.cArr[x][y];
+        }
+    }  
+    printf("main to retry array updated \n");  
+}
+void GameEngine::update_RetryToMain() {
+    for (int x = 0; x < Cols; x ++) {
+        for (int y = 0; y < Rows; y ++) {
+            main.Arr[x][y] = retry.Arr[x][y];
+            main.cArr[x][y] = retry.cArr[x][y];
+            scnd.Arr[x][y] = retry.Arr[x][y];
+            scnd.cArr[x][y] = retry.cArr[x][y];
+        }
+    }  
+    printf("retry to main array updated \n");
 }
\ No newline at end of file