示例#1
0
 /** Cette fonction transfert les unités en attaque au stock et efface le combat
  * elle retourne la nouvelle armée pour l'affichage en ajax
  * @return array new updated Army_owned list
  */
 public function reset_army()
 {
     $army_mobile = new Army($this->attacker_id, $this->id);
     $army_owned = new Army($this->attacker_id);
     if (count($army_mobile->troops) > 0 && $army_mobile->total_units > 0) {
         foreach ($army_mobile->troops as $unit_id => $troop) {
             if ($troop->quantity > 0) {
                 $army_owned->add_troop($unit_id, $troop->quantity);
             }
             $troop = new Troop($troop->id);
             $troop->delete();
         }
     }
     $this->delete();
     return $army_owned->get_troops();
 }
示例#2
0
 /** permet de répartir aléatoirement les dégats sur les différentes unités
  * @param $damage int quantité totale de dégats infligés ce tour
  * @return string le résultat de cette escarmouche
  */
 public function split_damage($damage)
 {
     //on range les unités de la plus nombreuse à la moins nombreuse
     $troops = $this->sort_troops_by_quantities($this->troops);
     // on limite à 99% pour éviter les division par 0 si jammais rand = 100
     $percent_left = 99;
     $damage_left = $damage;
     $nb_fleet = count($troops);
     $result = '';
     $i = 0;
     foreach ($troops as $unit_id => $troop) {
         $i++;
         // si on a déjà plus d'unités, on reporte les dommages aux unités suivantes
         if (intval($troop->quantity) <= 0) {
             continue;
         }
         $unit_life = $troop->life * $troop->quantity;
         switch ($i) {
             case $nb_fleet:
                 // la dernière encaise tous les dommages restants
                 $rand = 100;
                 break;
             case 0:
                 //la première encaisse au moins 20%
                 $rand = rand(20, $percent_left);
                 break;
             default:
                 // les autres encaissent entre 1 et le % restant
                 $rand = rand(1, $percent_left);
         }
         // mise à jour des probabilités pour le tour suivant
         $percent_left -= $rand;
         // dégats infligés ce tour çi
         $cur_damage = $damage_left * $rand / 100;
         // calcul du nombre d'unités qui vont mourir
         $losses = round($troop->quantity * $cur_damage / $unit_life);
         // dégats restants
         $damage_left -= $cur_damage;
         // cas particulier si toutes les unités sont détruites (noter que les dégats sont alors gaspillés)
         if ($troop->quantity - $losses <= 0) {
             $losses = $troop->quantity;
             $this->troops[$unit_id]->quantity = 0;
         } else {
             $this->troops[$unit_id]->quantity -= $losses;
         }
         // log
         $result .= $troop->name . ' : ' . $troop->quantity;
         if ($losses > 0) {
             $result .= '(-' . $losses . ')';
         }
         // affiche les pertes
         if ($i != $nb_fleet) {
             $result .= ', ';
         }
         // ajoute une virgule entre les unités
         // suppression des unités dans la base
         $fleet = new Troop($troop->id);
         //todo : j'en étais là, des fois la quantité semble "nulle"
         $fleet->update_value('quantity', $this->troops[$unit_id]->quantity);
         // mise à jour des propriétés
         $this->total_units -= $losses;
         $this->total_damage -= $troop->damage * $losses;
         $this->total_life -= $troop->life * $losses;
     }
     return $result . '<br>Dégats reçu :' . $damage;
 }
示例#3
0
 /**
  * @param \AppBundle\Manager\User $user
  * @param \AppBundle\Manager\Troop $troop
  * @return bool
  */
 public function isUserInTroop(User $user, Troop $troop)
 {
     if ($this->em->getRepository(Troop::class)->isUserInTroop($user->getId(), $troop->getId())) {
         return 'joined';
     }
     if ($this->em->getRepository(MembershipRequest::class)->isUserJoiningTroop($user->getId(), $troop->getId())) {
         return 'requested_membership';
     }
     return 'no';
 }
 public function createTroopMock(User $user, Troop $troop)
 {
     $troop->setId(1);
 }