Exemple #1
0
//=============================================================================
// 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



}
Exemple #2
0
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;
		}
	}
}