/** * @param Army $oAttackedArmy * @return array */ public function act(Army $oAttackedArmy) { if ($oAttackedArmy->countAlive()) { return $this->shoot($oAttackedArmy->getRandomAliveUnit()); } return array(); }
/** * When a unit acts, he performs his default action. * A soldier will aim and fire, a tank might move and fire, a medic will heal, and so on. * @param Army $oAttackedArmy * @return array */ public function act(Army $oAttackedArmy) { $aResults = array(); $oResult = new BattleResult(); $oResult->attacker = $this; $oResult->amount = 0; // Insanity if (rand(1, 1000000) == 1) { $oResult->type = BattleLogger::TYPE_INSANE; switch (rand(0, 2)) { case 0: // Suicidal $this->iHealth = 0; $oResult->defender = $this; $oResult->message = $this->getRandomElement($this->aSuicideMessages); $oResult->amount = 1000; break; case 1: // Idle $oResult->defender = $this; $oResult->message = $this->getRandomElement($this->aIdleMessages); break; case 2: // Friendly fire $aResults[] = $this . ' ' . $this->getRandomElement($this->aFriendlyFireMessages) . '!'; $oAttackedUnit = $this->getArmy()->getRandomAliveUnit($this); $aResults = array_merge($aResults, $this->shoot($oAttackedUnit)); break; default: break; } } else { // No insanity, continue as planned $oAttackedUnit = $oAttackedArmy->getRandomAliveUnit(); if ($oAttackedUnit) { return $this->shoot($oAttackedUnit); } else { return array(); } } $aResults[] = $oResult; return $aResults; }
case 'cli': $sMsg .= 'Maybe try this (each number represents the'; $sMsg .= ' size of one army): index.php 50 50' . PHP_EOL; break; default: $sMsg .= '<br />Maybe try this link: <a href="/?army1=50&army2=50" >Army 1 = Army 2 = 50</a>'; break; } echo $sMsg; } else { /** * Register available unit types */ Army::addUnitType(new \autofight\Infantry()); Army::addUnitType(new \autofight\Tank()); /** * Build armies */ $oArmy1 = new Army($iArmy1); $oArmy2 = new Army($iArmy2); $oWar = new \autofight\War(); /** * Register appropriate logger, depending on context */ $oWar->setLogger(PHP_SAPI == 'cli' ? new \autofight\Loggers\LoggerCli() : new \autofight\Loggers\LoggerWeb()); /** * Start the war */ //$oWar->addArmy($oArmy1->setLabel('Blue'))->addArmy($oArmy2->setLabel('Red')); $oWar->addArmy($oArmy1)->addArmy($oArmy2);
/** * Returns a random army that is NOT the army in the $oArmy argument. * Only armies with still living units can be returned * @param Army $oArmy * @return mixed */ protected function findAttackableArmy(Army $oArmy) { $aAttackable = array(); /** @var Army $oAvailableArmy */ foreach ($this->aArmies as $oAvailableArmy) { if ($oAvailableArmy->getLabel() != $oArmy->getLabel() && $oAvailableArmy->countAlive()) { $aAttackable[] = $oAvailableArmy; } } if (isset($aAttackable[rand(0, count($aAttackable) - 1)])) { return $aAttackable[rand(0, count($aAttackable) - 1)]; } else { die('Could not find any attackable army. Looks like ' . $oArmy->getLabel() . ' wins.'); } }