void ProtossStrategy::computeActions() { computeActionsBase(); int cSupply = Broodwar->self()->supplyUsed() / 2; int min = Broodwar->self()->minerals(); int gas = Broodwar->self()->gas(); //Implement stuff here }
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++; } }
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++; } }