void ProtossStrategy::computeActions()
{
	computeActionsBase();

	int cSupply = Broodwar->self()->supplyUsed() / 2;
	int min = Broodwar->self()->minerals();
	int gas = Broodwar->self()->gas();

	//Implement stuff here
}
Exemple #2
0
void TemplarRush::computeActions()
{
	computeActionsBase();

	int cSupply = Broodwar->self()->supplyUsed() / 2;

	if (cSupply >= 15 && stage == 0 && AgentManager::getInstance()->countNoUnits(UnitTypes::Protoss_Cybernetics_Core) > 0)
	{
		mainSquad->addSetup(UnitTypes::Protoss_Zealot, 8);
		stage++;
	}
	if (cSupply >= 24 && stage == 1)
	{
		int no = 1;
		if (Broodwar->getStartLocations().size() > 2) no++;

		sc1->addSetup(UnitTypes::Protoss_Probe, 1);
		sc1->setPriority(1);
		sc1->setActivePriority(1000);
		squads.push_back(sc1);

		//If more than two-player map, use an additional
		//scouting squad.
		if (no > 1)
		{
			sc2->addSetup(UnitTypes::Protoss_Probe, 1);
			sc2->setPriority(1);
			sc2->setActivePriority(1000);
			squads.push_back(sc2);
		}
		stage++;
	}
	if (cSupply >= 30 && stage == 2)
	{
		rushSquad->addSetup(UnitTypes::Protoss_Dark_Templar, 4);
		rushSquad->setBuildup(false);
		rushSquad->setPriority(2);

		stage++;
	}
	if (stage == 3 && rushSquad->isActive())
	{
		buildplan.push_back(BuildplanEntry(UnitTypes::Protoss_Photon_Cannon, cSupply));
		buildplan.push_back(BuildplanEntry(UnitTypes::Protoss_Photon_Cannon, cSupply));

		mainSquad->addSetup(UnitTypes::Protoss_Dragoon, 15);
		mainSquad->addSetup(UnitTypes::Protoss_Zealot, 5);
		mainSquad->addSetup(UnitTypes::Protoss_High_Templar, 4);
		mainSquad->setBuildup(false);

		buildplan.push_back(BuildplanEntry(TechTypes::Psionic_Storm, cSupply));
		buildplan.push_back(BuildplanEntry(UpgradeTypes::Singularity_Charge, cSupply));

		stage++;
	}
	
	int min = Broodwar->self()->minerals();
	int gas = Broodwar->self()->gas();

	if (stage == 4 && min > 400)
	{
		buildplan.push_back(BuildplanEntry(UnitTypes::Protoss_Gateway, cSupply));
		stage++;
	}
	if (stage == 5 && min > 400 && AgentManager::getInstance()->countNoFinishedUnits(UnitTypes::Protoss_Gateway) >= 3)
	{
		buildplan.push_back(BuildplanEntry(UnitTypes::Protoss_Robotics_Facility, cSupply));
		buildplan.push_back(BuildplanEntry(UnitTypes::Protoss_Observatory, cSupply));

		detectorSquad = new Squad(5, Squad::OFFENSIVE, "DetectorSquad", 10);
		detectorSquad->setRequired(false);
		detectorSquad->addSetup(UnitTypes::Protoss_Observer, 2);
		squads.push_back(detectorSquad);

		buildplan.push_back(BuildplanEntry(UpgradeTypes::Protoss_Ground_Weapons, cSupply));
		buildplan.push_back(BuildplanEntry(UpgradeTypes::Protoss_Plasma_Shields, cSupply));
		buildplan.push_back(BuildplanEntry(UpgradeTypes::Protoss_Ground_Weapons, cSupply));
		stage++;
	}
	if (stage == 6 && min > 550)
	{
		buildplan.push_back(BuildplanEntry(UnitTypes::Protoss_Nexus, cSupply));
		noWorkers += 8;
		stage++;
	}
	if (stage == 7 && min > 1200)
	{
		buildplan.push_back(BuildplanEntry(UnitTypes::Protoss_Gateway, cSupply));
		buildplan.push_back(BuildplanEntry(UnitTypes::Protoss_Gateway, cSupply));
		buildplan.push_back(BuildplanEntry(UnitTypes::Protoss_Gateway, cSupply));
		buildplan.push_back(BuildplanEntry(UnitTypes::Protoss_Nexus, cSupply));
		stage++;
	}
}
Exemple #3
0
void MarineRush::computeActions()
{
	computeActionsBase();

	if (stage > 0) noWorkers = 12 * AgentManager::getInstance()->countNoFinishedUnits(UnitTypes::Terran_Command_Center) + 2 * AgentManager::getInstance()->countNoFinishedUnits(UnitTypes::Terran_Refinery);
	if (noWorkers > 30) noWorkers = 30;

	int cSupply = Broodwar->self()->supplyUsed() / 2;
	int min = Broodwar->self()->minerals();
	int gas = Broodwar->self()->gas();

	if (rushSquad->isActive() && stage == 0)
	{
		Broodwar->printf("Sent at: %d.%d", Broodwar->elapsedTime()/60,Broodwar->elapsedTime()%60);
		buildplan.push_back(BuildplanEntry(UnitTypes::Terran_Bunker, cSupply));
		buildplan.push_back(BuildplanEntry(UnitTypes::Terran_Bunker, cSupply+4));

		mainSquad->addSetup(UnitTypes::Terran_Siege_Tank_Tank_Mode, 6);
		mainSquad->addSetup(UnitTypes::Terran_SCV, 1);
		mainSquad->addSetup(UnitTypes::Terran_Marine, 12);
		mainSquad->addSetup(UnitTypes::Terran_Medic, 4);

		stage++;
	}
	if (cSupply >= 30 && min > 200 && stage == 1)
	{
		buildplan.push_back(BuildplanEntry(UnitTypes::Terran_Factory, cSupply));
		buildplan.push_back(BuildplanEntry(UnitTypes::Terran_Armory, cSupply));

		mainSquad->addSetup(UnitTypes::Terran_Goliath, 6);
		mainSquad->setBuildup(false);

		stage++;
	}
	if (cSupply >= 45 && min > 200 && stage == 2)
	{
		buildplan.push_back(BuildplanEntry(UnitTypes::Terran_Barracks, cSupply));
		
		sc1->addSetup(UnitTypes::Terran_SCV, 1);
		sc1->setPriority(1);
		sc1->setActivePriority(1000);
		squads.push_back(sc1);

		stage++;
	}
	if (min > 500 && stage == 3)
	{
		buildplan.push_back(BuildplanEntry(UnitTypes::Terran_Command_Center, cSupply));

		stage++;
	}
	
	if (stage == 4 && AgentManager::getInstance()->countNoBases() >= 2)
	{
		buildplan.push_back(BuildplanEntry(UnitTypes::Terran_Bunker, cSupply));

		stage++;
	}
	if (stage == 5 && min > 500 && gas > 500)
	{
		buildplan.push_back(BuildplanEntry(UpgradeTypes::Terran_Vehicle_Weapons, cSupply));
		buildplan.push_back(BuildplanEntry(UnitTypes::Terran_Starport, cSupply));
		buildplan.push_back(BuildplanEntry(UnitTypes::Terran_Science_Facility, cSupply));
		
		stage++;
	}
	if (stage == 6 && AgentManager::getInstance()->countNoFinishedUnits(UnitTypes::Terran_Science_Facility) > 0)
	{
		mainSquad->addSetup(UnitTypes::Terran_Science_Vessel, 1);

		buildplan.push_back(BuildplanEntry(TechTypes::Cloaking_Field, cSupply));

		backupSquad->addSetup(UnitTypes::Terran_Wraith, 5);
		backupSquad->setBuildup(false);

		sc2->addSetup(UnitTypes::Terran_Wraith, 1);
		sc2->setBuildup(false);

		stage++;
	}
	if (stage == 7 && AgentManager::getInstance()->countNoFinishedUnits(UnitTypes::Terran_Science_Vessel) > 0)
	{
		if (Broodwar->enemy()->getRace().getID() == Races::Protoss.getID())
		{
			buildplan.push_back(BuildplanEntry(TechTypes::EMP_Shockwave, cSupply));
		}
		buildplan.push_back(BuildplanEntry(UpgradeTypes::Terran_Vehicle_Weapons, cSupply));
		
		stage++;
	}
}