예제 #1
0
 public static function processSiege(Army $army, City $city)
 {
     // TODO check if the army has catapult
     // TODO message users about the result
     $attack_point = $army->calculateAttackingPoints();
     $defense_point = $city->calculateDefensePoints();
     if ($attack_point > $defense_point) {
         // attacker wins
         // the city becomes the attacker's city
         $city->update(['owner' => $army->user->id, 'capital' => 0, 'nation' => $army->user->nation]);
         $city->hex->update(['owner' => $army->user->id]);
     } elseif ($attack_point < $defense_point) {
         // defender wins
         $army->destroyArmy();
     }
 }
예제 #2
0
 /**
  * Chooses the winner army based on attack and defense points
  *
  * @param Army $attacking_army
  * @return void
  */
 public function processBattle(Army $attacking_army)
 {
     /**
      * attacking army's attack points
      *
      * @var int $attacking_attack
      */
     $attacking_attack = $attacking_army->calculateAttackingPoints();
     /**
      * attacked army's defense points
      *
      * @var int $attacked_defense
      */
     $attacked_defense = $this->calculateDefensePoints();
     // TODO include hex modifier in the calculation
     /** @var int $point */
     $point = $attacking_attack - $attacked_defense;
     if ($point === 0) {
         // it's a tie
         $point += rand(-1, 1);
         // randomly add or remove 1 so the $point will be 1 or -1
     }
     if ($point > 0) {
         // the attacking army wins
         /** @var Army $winner */
         $winner = $attacking_army;
         /** @var Army $loser */
         $loser = $this;
     } elseif ($point < 0) {
         // the attacked army wins
         /** @var Army $winner */
         $winner = $this;
         /** @var Army $loser */
         $loser = $attacking_army;
     }
     //        TODO $this::calculateCasualties();
     /** @var Army $loser */
     $loser->destroyArmy();
     // TODO a pontok alapján kiszámolni a veszteségeket és ennek megfelelően módosítani a seregeket
     // jelenleg a vesztes sereg teljesen megsemmisül, a győztesnek nincs vesztesége és folytatja az útját
     // TODO a csata eredményét megjeleníteni a felhasználónak
 }