コード例 #1
0
ファイル: main.cpp プロジェクト: Fraaaan14/christopherthorne
// Draw the ship's bullet (if it exists)
void RenderShipBullet()
{
	if ( !firing && GetAsyncKeyState( VK_SPACE ) )
	{
		bulletx = ScrW() / 2 + shipx;
		bullety = ScrH() - 110;

		firing = true;
	}

	if ( firing )
	{
		render.SetDrawColor( 255, 255, 255 );
		render.DrawLine( bulletx, bullety, bulletx, bullety + 10 );

		bullety -= BULLETSPEED;

		if ( bullety <= 0 )
			firing = false;
		else
			CheckShipBulletCollision();
	}
}
コード例 #2
0
ファイル: GameManager.cpp プロジェクト: pedert/PG430
void GameManager::RunCollisionCheck()
{
	for (vector<CBullet*>::iterator bulletIter = shipObj->BulletList.begin(); bulletIter != shipObj->BulletList.end();)
	{
		bool killBullet = false;

		if ((*bulletIter)->fireByPlayer == true) // if bullets fired by player
		{
			//Check if enemies are hit
			for (vector<CEnemyShip*>::iterator eShipIter = enemyList.begin(); eShipIter != enemyList.end(); )
			{
				bool kill = false;
				if (CheckShipBulletCollision(*eShipIter, *bulletIter) && ((*bulletIter)->fireByPlayer == true)) //Player hit enemy
				{
					kill = true;
					particleObj->ExplosionAt((*eShipIter)->getPos());

					score += static_cast<int>(100 * (shipObj->getHp() * 0.5));
				}
				else if((*eShipIter)->getZPos() > 10)//ship Out of screen
				{
					kill = true;
				}

				if (kill)
				{
					killBullet = true;
					if ((*eShipIter))
					{
						delete (*eShipIter);
						(*eShipIter) = 0;
					}
					eShipIter = enemyList.erase(eShipIter);
				}
				else
				{
					++eShipIter;
				}
			}
		}
		else //Bullets fired by enemies
		{
			if ((*bulletIter)->getPosPtr()->z > -10.0f) //Bullets are close to player
			{
				if (CheckShipBulletCollision(shipObj, *bulletIter))
				{
					particleObj->ExplosionAt((*shipObj).getPos());
					shipObj->subtractHP();
					killBullet = true;
				}
			}
		}

		if (killBullet) //Erase bullet if it has collided
		{
			if ((*bulletIter))
			{
				delete (*bulletIter);
				(*bulletIter) = 0;
			}	
			bulletIter = shipObj->BulletList.erase(bulletIter);
		}
		else
		{
			++bulletIter;
		}
	}

	//Check if ships have collided with player
	for (vector<CEnemyShip*>::iterator eShipIter = enemyList.begin(); eShipIter != enemyList.end(); )
	{
		bool shipCollision = false;
		if ((*eShipIter)->getEnemyType() == 0)
		{
			if ((*eShipIter)->getZPos() > -10.0f)
			{
				if (CheckShipShipCollision((*eShipIter), shipObj))
				{
					shipCollision = true;
					shipObj->subtractHP();
					particleObj->ExplosionAt((*eShipIter)->getPos());

					if ((*eShipIter))
					{
						delete (*eShipIter);
						(*eShipIter) = 0;
					}
					eShipIter = enemyList.erase(eShipIter);
				}
				else
				{
					++eShipIter;
					continue;
				}
			}
			++eShipIter;
			continue;
		}
		else
		{
			++eShipIter;
		}
	}
}