Exemple #1
0
 /**
  * @param Army $oAttackedArmy
  * @return array
  */
 public function act(Army $oAttackedArmy)
 {
     if ($oAttackedArmy->countAlive()) {
         return $this->shoot($oAttackedArmy->getRandomAliveUnit());
     }
     return array();
 }
Exemple #2
0
 /**
  * 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;
 }
Exemple #3
0
        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);
Exemple #4
0
 /**
  * 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.');
     }
 }