Ejemplo n.º 1
0
 /**
  * résolution des combats (chargé depuis index.php)
  **/
 public function solve_combats()
 {
     // identification de l'attaquant et du défenseur
     $attacker = new User($this->attacker_id);
     $defender = new User($this->target_id);
     // ... et de leur armée
     $army_att = new Army($this->attacker_id, $this->id);
     $army_def = new Army($this->target_id);
     // affichage de l'armée attaquante
     $mess_att = '';
     foreach ($army_att->troops as $unit) {
         if ($unit->quantity > 0) {
             $mess_att .= '<li>' . $unit->quantity . ' ' . $unit->name . '</li>';
         }
     }
     // affichage de l'armée en défence
     $mess_def = '';
     if ($army_def->total_units > 0) {
         foreach ($army_def->troops as $unit) {
             $mess_def .= '<li>' . $unit->quantity . ' ' . $unit->name . '</li>';
         }
     } else {
         $mess_def .= "<li>Il n'y avait personne pour défendre cet empire</li>";
     }
     $message = "<table><tr>" . "<th style=\"width:50%\">Attaquant : {$attacker->pseudo}<br>flotte : {$army_att->total_units} unité(s)</th>" . "<th style=\"width:50%\">Défenseur : {$defender->pseudo}<br>flotte : {$army_def->total_units} unité(s)</th>" . "</tr><tr><td><ul>{$mess_att}</ul></td><td><ul>{$mess_def}</ul></td></tr>";
     if ($army_def->total_units > 0) {
         // résolution du combat en 6 tours (on boucle tant qu'il reste des unités à un joueur
         $i = 0;
         while ($i < 6 && $army_att->total_units > 0 && $army_def->total_units > 0) {
             $i++;
             // il faut temporiser les dégats de l'attaquant pour qu'il puisse attaquer de toute sa force
             // car va lui détruire des unités dès sa première attaque
             $dommages = $army_def->total_damage;
             $def_res = $army_def->split_damage($army_att->total_damage);
             $att_res = $army_att->split_damage($dommages);
             $message .= "<tbody><tr><th colspan=\"2\">Tour {$i}</th></tr><tr><td>{$att_res}</td><td>{$def_res}</td></tr></tbody>";
         }
     }
     // résultat du combat
     if ($army_def->total_units <= 0) {
         $available = round($defender->ressources / 3);
         $can_take = round($army_att->total_life);
         $amount = $available - $can_take > 0 ? $can_take : $available;
         $attacker->increase_ressource($amount);
         $defender->increase_ressource(-$amount);
         $result = 'Vainqueur : ' . $attacker->pseudo . '<br>Ressources pillées : ' . $amount;
     } elseif ($army_att->total_units <= 0) {
         $result = 'Vainqueur : ' . $defender->pseudo;
     } else {
         $result = 'Aucun vainqueur';
     }
     $message .= "<tr><td colspan='2'>{$result}</td></tr></table>";
     $this->reset_army();
     // envoi les rapports de combats
     $mail = new Mail();
     $mail->send_mail($attacker->id, $message, 'Rapport de combat (' . $defender->pseudo . ')');
     // on changer uniquement le destinataire et on le renvoi
     $mail->recipient = $defender->id;
     $mail->add();
 }