JianWei Lee
/
project_game
Meteor defense project
Diff: GameEngine/GameEngine.cpp
- 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