//============================================================================= // Update all game items //============================================================================= void Spacewar::update() { if(input->isKeyDown(ESC_KEY)) { exitGame(); } if(ship.getActive()) { ship.update(frameTime, shoot); if(powerupActive) { shootTime += 3*frameTime; powerupTime += frameTime; if(powerupTime >= POWERUP_DURATION) { powerupActive = false; } } else { shootTime += frameTime; } if(shoot && shootTime >= SHIP_SHOOT_DELAY) { spawnBullet(VECTOR2(ship.getX()+(shipNS::SCALE*ship.getWidth()*3)/4, ship.getY()+(shipNS::SCALE*ship.getHeight()/2)), VECTOR2(bulletNS::SPEED,0)); audio->playCue(PEW); shootTime = 0; } } if(timeSincePowerupSpawn >= POWERUP_FREQUENCY) { spawnPowerup(VECTOR2(GAME_WIDTH,(GAME_HEIGHT/4)+rand()%(GAME_HEIGHT/2)),VECTOR2(-1*powerNS::SPEED,0)); timeSincePowerupSpawn = 0; } timeSincePowerupSpawn += frameTime; for(int i=0; i<MAX_GUNS; i++) { if(guns[i].getActive()) { guns[i].update(frameTime, shoot); if(shoot) { spawnEnemyBullet(VECTOR2(guns[i].getX()+(gunNS::SCALE*guns[i].getWidth()*3)/4, guns[i].getY()+(gunNS::SCALE*guns[i].getHeight()*3)/8), VECTOR2(enemyBulletNS::SPEED,0)); audio->playCue(PEW); } } } for(int i=0; i<MAX_BULLETS; i++) { if(bullets[i].getActive()) bullets[i].update(frameTime); } for(int i=0; i<MAX_ENEMY_BULLETS; i++) { if(enemyBullets[i].getActive()) enemyBullets[i].update(frameTime); } if(power.getActive()) { power.update(frameTime); } seconds_since_start = difftime( time(0), start); //Begin Unarmed Asteroid spawning if(seconds_since_start == 10) asterGroupSize = 3; if(seconds_since_start == 20) asterGroupSize = 5; if(seconds_since_start == 30) asterGroupSize = 8; if(seconds_since_start == 40) asterGroupSize = 10; if(seconds_since_start == 60) asterGroupSize = 20; asteroidSpawnTime += frameTime; if(asteroidCounter < asterGroupSize && asteroidCounter < MAX_ASTEROIDS && asteroidSpawnTime > ASTEROID_SPAWN_DELAY) { VECTOR2 newpos = VECTOR2(GAME_WIDTH, rand() % ((GAME_HEIGHT*7)/8+asteroidNS::HEIGHT)-GAME_HEIGHT/8-asteroidNS::HEIGHT); VECTOR2 newdir = VECTOR2(GAME_WIDTH/6, rand() % GAME_HEIGHT) - newpos; D3DXVec2Normalize(&newdir,&newdir); spawnAsteroid(newpos,newdir*asteroidNS::SPEED); asteroidCounter++; asteroidSpawnTime = 0; } for(int i = 0; i < asteroidCounter; i++) { if(!asteroids[i].getActive()) asteroidCounter--; } for(int i=0; i<MAX_ASTEROIDS; i++) { if(asteroids[i].getActive()) asteroids[i].update(frameTime); if(i%2) asteroids[i].setRadians(asteroids[i].getRadians() + ASTEROID_ROTATION_SPEED);//if an even index of the asteroids array, then rotate clockwise else asteroids[i].setRadians(asteroids[i].getRadians() - ASTEROID_ROTATION_SPEED);//if an odd index of the asteroids array, then rotate counter clockwise } //End Unarmed Asteroid spawning }
void render() { // Clears the buffer with this colour attribute clearBuffer(0x00); // Set up sample colours, and output shadings const WORD colors[] = { 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6 }; COORD c; // displays the framerate std::ostringstream ss; ss << std::fixed << std::setprecision(3); ss << 1.0 / deltaTime << "fps"; c.X = ConsoleSize.X-9; c.Y = 0; writeToBuffer(c, ss.str()); // displays the elapsed time ss.str(""); ss << elapsedTime << "secs"; c.X = 0; c.Y = ConsoleSize.Y - 1; writeToBuffer(c, ss.str(), 0x59); if (!levelStart) levelStart = initLevel(); renderShip(); moveBullets(); checkBulletCollision(enemyArr, levelInfo.number); renderBullets(); if (!spawnBufferCount && enemiesSpawned < levelInfo.number) { if (spawnEnemy(enemyArr, levelInfo.number)) { spawnBufferCount += levelInfo.spawnBuffer; enemiesSpawned++; } } else if (spawnBufferCount) spawnBufferCount--; moveEnemy(enemyArr, levelInfo.number); checkBulletCollision(enemyArr, levelInfo.number); checkEnemyCollision(enemyArr, levelInfo.number); renderEnemy(enemyArr, levelInfo.number); if (levelInfo.bullets) { if (spawnEnemyBullet(enemyArr)) { spawnBufferCount += bulletInfo.spawnBuffer; } moveEnemy(enemyBulletArr, bulletInfo.number); checkEnemyCollision(enemyBulletArr, bulletInfo.number); renderEnemy(enemyBulletArr, bulletInfo.number); } // Writes the buffer to the console, hence you will see what you have written flushBufferToConsole(); if (enemiesSpawned == levelInfo.number) { if (checkClear(enemyArr, levelInfo.number)) { levelStart = false; enemiesSpawned = 0; spawnBufferCount = 0; delete[] enemyArr; delete[] enemyBulletArr; levelInfo.level = levelInfo.nextLevel; } } }