En fait ton problème c'est de savoir quelles unités vont décéder chez le "vainqueur".
Ton système manque un peu de précision, il amalgame un peu tout. Quand on résout un combat, il n'y a que deux valeurs qui importent pour chaque camp : Les dégats infligés, et la vie perdue. Le "système de combat" finalement ce n'est que le calcul qui mène à ses deux valeurs. En général ces calculs ne sont pas simplissimes ni directement calculables par les belligérants (part d'aléatoire, part d'inconnue sur l'adversaire, plusieurs stratégies d'attaque ou de défense possible, etc...).
Dans ton cas :
- dégats infligés par l'attaquant = attaque
- dégats reçus par l'attaquant = défense de l'adversaire
Et c'est symétrique pour le défenseur.
C'est un système un peu trop «direct» pour qu'il soit vraiment intéressant a priori, mais bon pourquoi pas, refléchissons tout de même dessus
Le cas du perdant est réglé, il perd forcément tout.
Ton problème c'est quoi ? De déterminer le détails des troupes perdues par ton vainqueur ? Et bien c'est facile : tu tues les plus faibles en premier, et tu continues ainsi de suite jusqu'à atteindre ou dépasser le total des dégats infligés par le perdant. Ou alors tu les sélectionnes au hasard de la même façon.
Bref aucun problème, la seule question que tu dois te poser c'est que faire de la dernière unité ?
Par exemple mettons que le vainqueur avec 5 unités à 1, 3 unités à 2, et 3 unités à 5 (total 26) et qu'il reçoive 17 dégats. Il perd ses 1+1+1+1+1 (les 5 premières unités à 1 sont mortes, reste 12) + 2+2+2 (les 3 unités à 2 sont mortes, reste 6) + 5 (reste 1). Là il reste une inconnue : que faire de la dernière unité ? Tu as trois choix :
- soit tu la tues (il aura alors perdu 21 PV en réalité)
- soit tu la laisses indemne (il aura alors perdu 16 PV en réalité)
- soit tu lui laisses affaiblie avec une attaque (si le vainqueur était attaquant) ou une défense (si le vainqueur était le défenseur) réduite de 1.
La dernière option ne me paraîssant pas faisable dans ton système (sinon tu y aurais pensé avant). Il faut choisir entre la tuer et la laisser en vie. Si tu choisis toujours l'un ou toujours l'autre, le système sera forcément injuste. Donc je te propose de la tuer si et seulement si les dégats restants sont égaux ou supérieurs à la moitié de sa défense.
L'algo serait donc celui-là : on distribue les dégats aux unités les plus faibles jusqu'à ce que tout le monde soit mort
C'est dans le choix de l'unité à chaque tour de boucle qu'on peut introduire beaucoup de stratégie de la part du joueur. Il pourrait par exemple décider de placer certaines unités en «première ligne» (ce sont eux qui prendront les dégats en premier), «milieu» ou «renforts arrière». Cet avantage de choisir quelles unités vont mourir de la part du joueur pourrait être contrebalancée par un calcul différent des dégats : l'attaque/défense des «première ligne» est complète, ceux de derrière réduite de 20%, puis les derniers de 50%. Ce n'est qu'un exemple d'une manière d'enrichir un peu ce système.
J'attire cependant ton attention sur plusieurs déséquilibres :
- L'absence d'aléatoire dans le jeu, et le calcul simpliste (un seul paramètre compte) rend le jeu extrèmement avantageux pour l'attaquant. Puisque c'est lui qui a le pouvoir de décision (le défenseur ne fait que subir la décision), il va pouvoir sélectionner sa cible en connaissant avec exactitude l'issue du combat.
- Des unités très déséquilibrés n'ont pas le comportement que la logique nous indiquerait. Par exemple une unité avec une attaque de 1 et une défense de 10 va pouvoir tuer 10 unités en contre-attaque ? Etrange pour une unité qui vu son profil ressemble plus à un mur qu'à un berserk.
J'affinerais à ta place
Ton système manque un peu de précision, il amalgame un peu tout. Quand on résout un combat, il n'y a que deux valeurs qui importent pour chaque camp : Les dégats infligés, et la vie perdue. Le "système de combat" finalement ce n'est que le calcul qui mène à ses deux valeurs. En général ces calculs ne sont pas simplissimes ni directement calculables par les belligérants (part d'aléatoire, part d'inconnue sur l'adversaire, plusieurs stratégies d'attaque ou de défense possible, etc...).
Dans ton cas :
- dégats infligés par l'attaquant = attaque
- dégats reçus par l'attaquant = défense de l'adversaire
Et c'est symétrique pour le défenseur.
C'est un système un peu trop «direct» pour qu'il soit vraiment intéressant a priori, mais bon pourquoi pas, refléchissons tout de même dessus
Le cas du perdant est réglé, il perd forcément tout.
Ton problème c'est quoi ? De déterminer le détails des troupes perdues par ton vainqueur ? Et bien c'est facile : tu tues les plus faibles en premier, et tu continues ainsi de suite jusqu'à atteindre ou dépasser le total des dégats infligés par le perdant. Ou alors tu les sélectionnes au hasard de la même façon.
Bref aucun problème, la seule question que tu dois te poser c'est que faire de la dernière unité ?
Par exemple mettons que le vainqueur avec 5 unités à 1, 3 unités à 2, et 3 unités à 5 (total 26) et qu'il reçoive 17 dégats. Il perd ses 1+1+1+1+1 (les 5 premières unités à 1 sont mortes, reste 12) + 2+2+2 (les 3 unités à 2 sont mortes, reste 6) + 5 (reste 1). Là il reste une inconnue : que faire de la dernière unité ? Tu as trois choix :
- soit tu la tues (il aura alors perdu 21 PV en réalité)
- soit tu la laisses indemne (il aura alors perdu 16 PV en réalité)
- soit tu lui laisses affaiblie avec une attaque (si le vainqueur était attaquant) ou une défense (si le vainqueur était le défenseur) réduite de 1.
La dernière option ne me paraîssant pas faisable dans ton système (sinon tu y aurais pensé avant). Il faut choisir entre la tuer et la laisser en vie. Si tu choisis toujours l'un ou toujours l'autre, le système sera forcément injuste. Donc je te propose de la tuer si et seulement si les dégats restants sont égaux ou supérieurs à la moitié de sa défense.
L'algo serait donc celui-là : on distribue les dégats aux unités les plus faibles jusqu'à ce que tout le monde soit mort
Code :
DégatsÀDistribuer = ....
Tant que DégatsÀDistribuer > 0 :
Si pas d'unités Alors :
# Plus d'unités, donc plus de dégats à distribuer
DégatsÀDistribuer = 0
Sinon :
# On sélectionne une unité qui va absorber les dégats
# Ici on prend la plus faible, on pourrait aussi bien prendre au hasard
Unité = Unité la plus faible.
# L'unité meurt si on lui inflige plus de la moitié de sa vie
Si DégatsÀDistribuer >= (PV de Unité / 2) Alors :
# L'unité a absorbé autant de dégats que sa vie, le reste est toujours à distribuer
DégatsÀDistribuer = DégatsÀDistribuer - PV de Unité.
# Elle meurt
Tuer Unité.
Sinon :
# L'unité réussit à absorber les dégats restants tout en survivant, la distribution est terminée
DégatsÀDistribuer = 0
FinSi.
FinSi.
FinTant.
J'attire cependant ton attention sur plusieurs déséquilibres :
- L'absence d'aléatoire dans le jeu, et le calcul simpliste (un seul paramètre compte) rend le jeu extrèmement avantageux pour l'attaquant. Puisque c'est lui qui a le pouvoir de décision (le défenseur ne fait que subir la décision), il va pouvoir sélectionner sa cible en connaissant avec exactitude l'issue du combat.
- Des unités très déséquilibrés n'ont pas le comportement que la logique nous indiquerait. Par exemple une unité avec une attaque de 1 et une défense de 10 va pouvoir tuer 10 unités en contre-attaque ? Etrange pour une unité qui vu son profil ressemble plus à un mur qu'à un berserk.
J'affinerais à ta place
Ressources [PHP][MySQL][prototype.js]