Au menu ce soir, poursuivons le petit jeu de combat que j'ai débuté hier. Comme on crée un jeu de combat complètement aléatoire, quoi de mieux que d'ajouter encore plus de hasard. On a vu que chaque combattant possédait un nombre de points de vie déterminé arbitairement, de même que chaque coup porté à son adversaire comptait entre 1 et 10 points de dommage.
Et si on ajoutait une caractéristique de force à chaque adversaire ? Chaque coup pourrait avoir comme effet une blessure maximale à la force de l'adversaire. Par exemple, avec une force de 5, l'attaquant pourrait faire perdre entre 1 et 5 points à son adversaire. Vous verrez, c'est très facile à réaliser.
Ajoutez une propriété à la classe Fighter. Je tiens à préciser que j'ai pris l'habitude d'utiliser la convention pour nommer les variables privées en les préfixant par $_ devant le nom. Ceux qui ne sont pas familiers avec la programmation orientée objet doivent savoir que ce n'est pas obligatoire mais simplement un indice pour reconnaître la portée de la variable.
private $_force;Initialisez-la dans le constructeur :
$this->_force = rand(1,10);Créez un accesseur pour obtenir la valeur de la propriété. Vous pourrez l'afficher suite à la création de l'instance pour faire vos paris sur le gagnant.
public function getForce(){ return $this->_force; }La fonction hit() sera légèrement modifiée de façon à générer une valeur maximale en utilisant la force du joueur plutôt que la constante 10. Si vous êtes amateurs de jeux de rôles comme Donjons & Dragons, libre à vous de créer des caractéristiques sur un total de 18 (je ne sais pas si c'est encore comme ça avec les éditions plus récentes mais c'était le maximum qu'on pouvait avoir lorsque je jouais durant mon adolescence). Évidemment, ça risque d'avantager un des deux joueurs, ce qui prouve que dans le monde fictif, tous les humains ne sont pas égaux.
public function hit(Fighter $fighter){Affichez les caractéristiques de votre création avant de monter dans l'arène :
// on pourrait aussi faire varier la valeur minimum
$damage = rand(1,$this->_force); // cette ligne a changé
$fighter->setDamage($damage);
return $damage;
}
echo $player1->getName() . ' : ' . $player1->getHP() . ' HP. ';Il serait possible de faire évoluer les combattants en gérant un niveau d'expérience. Au début, plus la force est faible, plus le combat risque de durer longtemps. C'est un peu comme se tapocher à coup de cuillère, ça risque d'être long... Avec l'expérience, la force de l'impact pourrait augmenter puisqu'en prenant de l'expérience, il saurait comment porter les coups pour que ça soit plus dommageable.
echo 'Force ' . $player1->getForce();