Je bricole depuis un certain temps avec un jeu et j'ai beaucoup de mal avec quelque chose:
J'ai deux personnages, chacun ayant des attributs (une dizaine) dans une plage (entre 1 et 20). Je veux utiliser ces attributs pour générer un «jet» tel que le jet supérieur gagne cette rencontre particulière. Il convient de noter que les deux personnages ne s'endommagent pas / ne se défendent pas . Ils roulent tous les deux pour voir s'ils réussissent ce que je suppose que nous pourrions appeler un test de compétence. Ils roulent tous les deux pour réussir / échouer par rapport à une valeur commune. Ils n'interagissent pas entre eux.
Cependant, lorsque l'un des personnages a même un petit avantage numérique, toute formule que j'ai trouvée fait en sorte que celle qui est toujours légèrement supérieure remporte une énorme majorité du temps. C'est indésirable.
J'ai essayé de pondérer l'attribut «le plus pertinent» pour le test à 80% et la somme des autres attributs à 20%. J'ai également essayé de comparer des moyennes pour produire une différence relative et de l'utiliser pour augmenter le caractère le plus faible. Les deux approches ont entraîné les avantages importants que j'essaie de supprimer (par exemple, si je lance la rencontre 5 000 fois, elle produit assez régulièrement une équipe gagnant les 5 000).
L'ajout d'un composant "chance" n'a d'importance, semble-t-il, que s'il est en quelque sorte pondéré en faveur du personnage inférieur, et je n'ai pas trouvé un bon équilibre là-bas.
Quelles approches puis-je adopter pour atténuer l'impact d'un petit avantage numérique tout en préservant et en augmentant cet avantage à mesure que l'écart relatif des attributs augmente?
Par la demande, voici les détails que j'ai jusqu'à présent. Certaines choses que je n'ai pas encore découvertes restent donc des généralités:
Pour le moment, le roulement est généré comme
0.8 * (mainAttribute) + 0.2 (1/3 * subAttA + 1/3 * subAttB * 1/3 subAttC)
À l'heure actuelle, cela produit des chiffres aux alentours de 4,0. Les attributs sont générés aléatoirement entre des plages spécifiées. Le test actuel utilise un caractère avec des attributs de 2 à 4, et l'adversaire entre 3 et 5. Comme on pouvait s'y attendre, cela produit des moyennes proches de 3 et 4 respectivement.
Avec cet avantage d'un point, j'aimerais que le plus fort des deux gagne dans la zone de 55% à 60% du temps, avec cette augmentation à environ 80% du temps avec un avantage d'attribut moyen de 5 ou 6, 90% avec des avantages de 7 ou 8, laissant une certaine marge pour une victoire improbable lorsque l'écart se creuse. Je préférerais ne jamais avoir de victoires garanties, mais peut-être que les choses deviennent très improbables - au rythme de gagner 99,5% ou 99,6% du temps lorsque l'écart devient très grand.
La formule actuelle produit un nombre non aléatoire. L'aléatoire vient de la sélection des attributs pertinents. Pas tous les attributs sont utilisés pour chaque rouleau. Il est possible que celui avec les attributs les plus faibles soit plus fort dans les domaines pertinents pour ce jet et vole une victoire. Mais, comme on pouvait s'y attendre, cela arrive rarement.
Ma prochaine tentative a été de peser leurs forces relatives, en prenant une moyenne de toutes les statistiques de chacun, en les divisant les unes contre les autres et en utilisant cette valeur pour donner un petit coup de pouce au personnage inférieur. Cela a un peu lissé les choses, mais avait toujours une tendance prononcée à produire des choses comme 5 000 victoires pour un gars sur 5 000 essais.