Mais une minute ! Cette simulation de combat entre l'Alliance rebelle et l'armée Impériale ne peut pas être crédible si Luke Skywalker et Darth Vader n'en font pas partis !
Nous ajouterons un combattant de chaque côté avec des super statistiques, comme des héros, qui seront au moins 10 fois plus forts que les autres et avec une défense renforcée. Ces instances seront créées à partir de la classe Fighter mais nous ajusterons les caractéristiques manuellement. En étant plus forts, ils résisteront plus longtemps à la guerre.
Mais d'abord, on modifiera légèrement la classe Fighter pour s'assurer que les méthodes qui permettent de personnaliser les caractéristiques soient présentes plutôt que de conserver celles attribuées par le hasard au moment de la création.
public function setDefense($defense){Dans le fichier champ-de-bataille.php, on ajoutera la création des héros suite à la boucle qui crée les rebels et les stormtroopers.
$this->_defense = $defense;
}
public function setForce($force){
$this->_force = $force;
}
public function setHP($hp){
$this->_hp = $hp;
}
# juste pour rireDans la boucle while, ajouter le bloc de code suivant immédiatement après ces deux lignes :
$showDeclaration = false;
# héros
$luke = new Fighter('Luke Skywalker');
$luke->setDefense(10);
$luke->setForce(10);
$luke->setHP(1000);
$armyRebelAlliance[] = $luke;
$dv = new Fighter('Darth Vader');
$dv->setDefense(10);
$dv->setForce(10);
$dv->setHP(1000);
$armyImperial[] = $dv;
$attacker = array_rand($armies[$armyAttacker]);Ceci permettra de déterminer si le dernier combattant de chaque camp est Luke et Darth Vader. Dès qu'on s'aperçoit qu'ils sont les seuls survivants, on affiche la déclaration de Darth Vader à son fils : Luke, je suis ton père !
$defender = array_rand($armies[$armyDefender]);
# ajouter ici
if( !$showDeclaration && ($fightersLeft[0] == 1 && $fightersLeft[1] == 1) ){
$names = array();
$names[] = $armies[$armyAttacker][$attacker]->getName();
$names[] = $armies[$armyDefender][$defender]->getName();
$heroes = array('Luke Skywalker', 'Darth Vader');
$diff = array_diff($names, $heroes);
if( count($diff) == 0 ){
echo '<h1>LUKE, JE SUIS TON PÈRE !!!</h1>';
$showDeclaration = true;
}
}
Décommentez le bloc if($damage ...) pour voir apparaître la trace du combat (chaque coup porté). Vous verrez qu'il y a des fortes chances pour que Luke et Darth Vader s'affrontent lors du combat final. Un seul survivra.
Bonjour,
J'ai reproduit votre code en java et j'ai trouvé le tout très intéressant !
Je me demandais, si on ne voulais pas que tout le monde meurt durant la bataille, quel piste auriez-vous envisagé ?
Pour des résultats disont.
Attaque 1 .
200 rebels sont mort,
145 impériaux sont mort.
Attaque 2.
190 rebels sont mort,
210 impérieux sont mort,
Darth Vador est mort.
Merci
Comme tu le fais en Java, je tirerais aussi avantage des threads pour générer un combat en parallèle.
Sinon, une solution rapide serait d'obtenir pour chaque round de combat un nombre aléatoire de combattants qui attaqueront leurs adversaires.
Si chaque armée comptait 500 combattants, peut-être qu'au 1er tour, 58 rebels attaqueront pour une réplique de 112 impériaux alors qu'au round suivant, 235 rebels porteront un coup versus 73 répliques. À chaque round, il y aura des bléssés et des morts, ce qui réduira le nombre.
Je suggérerais aussi de mettre un minimum calculé de 10 ou 20% des forces restantes qui combattent pour éviter trop de déséquilibre (exemple irréaliste: 3 attaques contres 489).