JianWei Lee
/
project_game
Meteor defense project
GameEngine/GameEngine.cpp
- Committer:
- jasper0712
- Date:
- 2017-04-18
- Revision:
- 30:2e2d48cbfec3
- Parent:
- 29:6632dd9c48d8
- Child:
- 31:1c0e47931e84
File content as of revision 30:2e2d48cbfec3:
#include "GameEngine.h" GameEngine::GameEngine() { } GameEngine::~GameEngine() { } void GameEngine::init(int w) { _d1.droneInit(20, 46, 0, 42); //drone1 is taking left side pixel 0 to 42. _d2.droneInit(62, 46, 42, 84); //drone2 is taking right side pixel 42 to 84; weap.init(); spa.init(w); //printf("init completed \n"); } void GameEngine::update(Gamepad &pad, N5110 &lcd) { _d1.droneScan(Array2, charArray2, lcd); _d2.droneScan(Array2, charArray2, lcd); drawSpawn(lcd); drawLaserPlayer(pad, lcd); bombAndShield(pad, lcd); } void GameEngine::weapUpgrade(Gamepad &pad, N5110 &lcd) { if (pad.check_event(Gamepad::START_PRESSED)) { _gui.upgrading = 1; _gui.preventDoubleClick(pad); while (_gui.upgrading == 1) { _gui.main_Upgrades(pad, lcd); //go to the main upgrade page if (_gui.saveTheData == 1) { Data _upgrades = _gui.savedata(); //saving data //_gui.testingtest(_upgrades); //code used to test the struct weap.setVar(_upgrades.up, _upgrades.up1); weap.setVar(_upgrades.u1p, _upgrades.u1p1); //weap.testtest(); //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 } lcd.refresh(); wait(0.2); lcd.clear(); } done = 1; //remember to re-initialise everything after a wave. } } void GameEngine::drawSpawn(N5110 &lcd){ updateArray(); //clean up & update the array after the spawn took damage. if (drawit == 0) { //DONT FORGET TO CHANGE THIS TO TICKER. MORE EFFICIENT. drawit = 30; spa.randomizeSpawn(Array, charArray); spa.moveSpawnABC(Array, Array2, charArray, charArray2); spa.moveSpawnDE(Array, Array2, charArray, charArray2); } else { drawit -= 0.5; spa.moveSpawnDE(Array, Array2, charArray, charArray2); spa.moveSpawnB(Array, Array2, charArray, charArray2); //printf("moving spawn abcde \n"); } spa.updateSpawn(Array, Array2, charArray, charArray2, lcd); //checkGameRule(lcd); } void GameEngine::drawLaserPlayer(Gamepad &pad, N5110 &lcd) { weap.drawPlayer(pad, 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.drawLaser(Array2, charArray2, lcd); } } void GameEngine::checkGameRule(N5110 &lcd) { //the only way to lose is when the spawn reaches y = 46. for ( int x = 0; x < 84; x ++) { if (Array[x][46] > 0) { while (1) { lcd.clear(); lcd.printString("Game Over",10,3); lcd.refresh(); wait(1.0); } } } } void GameEngine::bombAndShield(Gamepad &pad, N5110 &lcd) { weap.bombCooldown(Array2, pad, lcd); if (pad.check_event(Gamepad::X_PRESSED)) { //to prevent from detonating the bomb at instant when button X is ay1identally pressed } 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.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); } } }