1 votes

Quelle est la formule pour les dégâts par tour ?

Je crée une application web pour apprendre JS qui calculera les dégâts par tour mais je suis bloqué pour ajouter des coups critiques.

J'ai créé avec succès des variables pour : nombreDeDes, facesDes, bonus, attaquesParTour, et chanceCritique

Je suppose que chaque attaque est un coup.

Quelle est la formule pour ajouter tous ces éléments ensemble afin d'obtenir les dégâts moyens par tour?

Voici ma formule jusqu'à présent pour les coups non critiques : moyenneDégatsParTour = dégâtsTotalMoyen * attaquesParTour

Pour cela, un coup critique signifie que le lancer et tous les bonus font le double de dégâts. Si vous êtes familier, cela est basé sur les règles du jeu utilisées par Baldur's Gate et je ne sais pas si elles diffèrent des jeux de plateau car je n'y ai jamais joué.

Si quelqu'un ici connaît Javascript, voici le code que j'ai écrit jusqu'à présent : https://codepen.io/fujisan0388/pen/JjGbLqq

5voto

Dale M Points 183702

Vous ne pouvez pas inclure de manière significative les coups critiques sans tenir compte des probabilités de succès

Un bref discussion des variables aléatoires: une fonction mesurable définie sur un espace de probabilité qui mappe de l'espace d'échantillonnage aux nombres réels.

Les dégâts infligés lors d'un coup sont une variable aléatoire - appelons-la \$D\$. Celle-ci est composée d'autres variables, certaines aléatoires et d'autres non:

$$ D=\sum_{n=1}^\text{diceNumber}U(\text{diceSides})+\text{bonuses} $$

où \$U(n)\$ est la loi uniforme discrète de \$1\$ à \$n\$ une variable aléatoire et les autres variables sont vos variables.

Cela peut simuler \$U(n)\$ bien que notez que la fonction rand est seulement pseudo-aléatoire mais cela n'aura pas d'importance pour vos besoins:

Math.floor(Math.random() * n + 1)

Comme un coup critique double le nombre de dés et les bonus, il est représenté par la variable aléatoire:

$$ C=\sum_{n=1}^{2\times\text{diceNumber}}U(\text{diceSides})+2\times\text{bonuses} $$

Pour les moyennes, vous pouvez calculer toutes les issues possibles avec des boucles imbriquées et ensuite calculer la moyenne. Cependant, il y a un raccourci mathématique - la moyenne de la somme de variables aléatoires indépendantes est égale à la somme des moyennes. De même, la variance de la somme de variables aléatoires indépendantes est égale à la somme des variances.

Ainsi:

$$ \begin{align} \bar D &= \text{diceNumber} \times \left(\bar U(\text{DiceSides})\right) +\text{bonuses}\\ &= \text{diceNumber} \times \left({{\text{DiceSides}+1}\over 2} \right) +\text{bonuses}\\ \bar C &= 2 \times \left( \text{diceNumber} \times \left({{\text{DiceSides}+1}\over 2} \right) +\text{bonuses}\right)\\ \end{align} $$

Donc, maintenant nous revenons à la raison pour laquelle vous avez besoin d'une variable aléatoire pour représenter vos chances de succès. Pour toute combinaison donnée de classe d'armure et de bonus à l'attaque il existe un nombre cible \$t\$ que vous devez obtenir sur un d20 égal ou supérieur auquel c'est un succès et en dessous c'est un échec et si vous obtenez un 20 vous obtenez un critique. Je suppose qu'un 20 est toujours un succès et toujours un coup critique: si vous pouvez échouer sur un 20, vous devez ajuster ce qui suit.

Ainsi les dégâts d'une attaque, incluant la chance de toucher, peuvent être représentés par une autre variable aléatoire:

$$ H = \begin{cases} 0, &U(20)\lt t\\ D, &20\gt U(20)\ge t\\ C, &U(20)=20\\ \end{cases} $$

Si vous êtes seulement intéressé par les moyennes, vous obtenez:

$$ \bar H = \sum\begin{cases} 0\times Pr(U(20)\lt t)\\ \bar D \times Pr(20\gt U(20)\ge t)\\ \bar C \times Pr(U(20)=20)\\ \end{cases} $$

Où \$Pr(E)\$Pr est la probabilité que l'événement \$E\$ se produise.

Pour \$20\ge t \ge 1\$, \$Pr(20\gt U(20)\ge t)=0.05\times (20-t)\$, pour \$t\gt 20\$, \$Pr(20\gt U(20)\ge t)=0\$ et pour \$t\lt 1\$, \$Pr(20\gt U(20)\ge t)=0.95\$. \$Pr(U(20)=20)=0.05\$ toujours.

-2voto

Grinton Points 119

La formule de base en dehors des dégâts critiques est assez simple comme vous l'avez écrit.

Si vous avez 2 attaques avec une masse, vous faites :

2 attaques : aPR=2

masse est de 1d6 : dN=1 et dS=6

les bonus dépendront de beaucoup de choses mais généralement juste Str : b=Str

Donc la formule de base est dN*AVG(1,dS)+b

La formule pour toucher serait quelque chose comme :

dN=1

dS=6

b=modificateurs de dégâts

Ensuite, les coups critiques et la probabilité seraient des conditions.

éditer: Désolé, laissez-moi être plus clair ici et approfondir un peu.

Pour la condition de coup critique, vous chercheriez quelque chose du genre :

L'exécution du combat vous donne une valeur pour le lancé que j'appellerai valeurLancee puis

Si valeurLancee=20 alors dN=dN+1

Cela signifie que si vous cherchez la formule globale de la production de dégâts attendue (ou dégâts moyens) alors la formule pourrait être modifiée pour être :

hC(dN*AVG(1,dS)+b)+0.05((dN+1)AVG(1,dS)+b) hC est la chance de toucher moins le critique, ex : 0.45 pour une chance de toucher de 50%

C'est probablement un peu compliqué donc voici une autre écriture :

dégâtsAttendus= (chanceDeToucher*(nombreDeDes*((1+facesDes)/2)+bonus)+(0.05*((nombreDeDes+1)*((1+facesDes)/2)+bonus)

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X