3 votes

Anydice : Nombre de succès lorsque les dés peuvent être boostés

Essaye de faire quelques statistiques sur anydice et j'obtiens un résultat étrange. Je me dis qu'il doit y avoir un problème avec mon code, mais je ne le trouve pas.

Ma situation est la suivante: Le joueur lance 4d6 et retire le plus petit. Ils regardent les 3 restants. Ils comptent les réussites (pour cet exemple, une réussite est un 6 ou plus uniquement). S'ils ont au moins 2 réussites, le jet global est une réussite.

Je veux permettre au joueur de gagner des "points" pour augmenter la valeur sur un ou plusieurs dés de 1 en fonction de facteurs du jeu. Donc s'ils ont 2 points et qu'ils lancent 4, 5, 6, le 6 est déjà une réussite, ils peuvent augmenter le 5 à une réussite en utilisant un de leurs 2 points, et le 4 ne peut être augmenté qu'à un 5, donc ils ne peuvent pas dépenser leur deuxième point.

Mon problème est que peu importe la taille du dé ou que je fasse un "lancer 3d6" ou un "lancer 4d6 en retirant le plus petit" ou si je change de combien un "point" vous permet d'ajuster un dé ou même si je change le seuil de réussite, Je ne trouve aucune différence de probabilités entre donner au joueur 2 points ou 3 points. Étant donné que aucune de ces variables ne fait une différence, je me dis qu'il doit y avoir un problème avec mon bloc de code, plutôt que ce soit juste une question de probabilité très faible.

Voici mon code:

T: 6   \ réussite minimale\

function: réussites dans LANCER:s avec POINTS:n points {
  RÉUSSITES: 0
  RESTANT: POINTS
  si 3@LANCER >= T {RÉUSSITES: RÉUSSITES+1}
  sinon {
    si RESTANT > 0 {
      si 3@LANCER+Y >= T {
        RÉUSSITES: RÉUSSITES+1
        RESTANT: RESTANT-1
      }
    }
  }
  si 2@LANCER >= T {RÉUSSITES: RÉUSSITES+1}
  sinon {
    si RESTANT > 0 {
      si 2@LANCER+Y >= T {
        RÉUSSITES: RÉUSSITES+1
        RESTANT: RESTANT-1
      }
    }
  }
  si 1@LANCER >= T {RÉUSSITES: RÉUSSITES+1}
  sinon {
    si RESTANT > 0 {
      si 1@LANCER+Y >= T {
        RÉUSSITES: RÉUSSITES+1
        RESTANT: RESTANT-1
      }
    }
  }

  résultat: RÉUSSITES
}

\ N = nombre de dés, P = nombre de points, Y = montant chaque point augmente de :\
N: 4
P: 0
Y: 1

sortie [count {2..3} dans [réussites dans Nd6 avec P points]] nommé "échec/réussite globale avec [P] lancers augmentés de [Y]"

En d'autres termes, il ne semble jamais y avoir de différence entre P=2 et P=3. Quelqu'un voit ce que je dois manquer ?

2voto

HighDiceRoller Points 1548

Vous n'utilisez qu'un point sur un dé seulement s'il est inférieur à la cible et que le point le porterait à la cible ou au-dessus. Vous n'utilisez que trois points si les trois dés remplissent cette condition. Mais dans ce cas, deux points vous donnent déjà les deux succès souhaités. Donc, c'est vraiment le cas que le troisième point n'a aucun effet sur l'objectif final. Vous pouvez voir la différence dans le nombre brut de succès en utilisant output [succès dans Nd6 avec P points].


Cette mécanique semble similaire à celle de Soulbound, à laquelle j'ai également répondu ici. La principale différence est que dans Soulbound, plus d'un point peut être attribué à un seul dé. J'ai utilisé ma propre bibliothèque de probabilités Icepool; vous pouvez exécuter le script dans votre navigateur ici.

2voto

According to the documentation

1@3d6 sélectionnera la valeur la plus élevée lancée, tandis que 3@3d6 sélectionnera la plus basse

Il me semble que votre fonction commence par vérifier le lancer le plus bas en premier, puis consomme vos points, au lieu de vérifier d'abord le lancer le plus élevé, car vous commencez à 3@, pas à 1@.

De plus, vous utilisez Y qui est toujours juste un point, au lieu d'utiliser la différence en points si vous avez encore assez pour combler l'écart.

Enfin, votre fonction renvoie un seul nombre, il n'est pas nécessaire de sélectionner des positions dedans.

Essayez ceci:

T: 6   \succès minimum\

fonction: succès dans ROLL:s avec POINTS:n points {
  SUCCÈS: 0
  RESTANT: POINTS
  if 1@ROLL >= T {SUCCÈS: SUCCÈS + 1}
  else {
    if RESTANT + 1@ROLL >= T {
        SUCCÈS: SUCCÈS + 1
        RESTANT: RESTANT - (T - 1@ROLL)
    }
  }
  if 2@ROLL >= T {SUCCÈS: SUCCÈS + 1}
  else {
    if RESTANT + 2@ROLL >= T {
        SUCCÈS: SUCCÈS + 1
        RESTANT: RESTANT - (T - 2@ROLL)
      }
  }
  if 3@ROLL >= T {SUCCÈS: SUCCÈS + 1}
  else {
    if RESTANT + 3@ROLL >= T {
        SUCCÈS: SUCCÈS + 1
      }
  }
  résultat: SUCCÈS
}

P: 2 \ nombre de points \
output [succès dans 4d6 avec P points] > 1 nommé "succès global avec [P] pts"

Tout en gardant votre approche globale, cela renvoie entre 0 et 3 succès possibles, avec les numéros de succès augmentant sensiblement lorsque vous ajoutez des points, et "> 1" vous donne le taux de succès global avec 2 ou plus.

@HighDice roller a également raison, si tout ce qui vous intéresse sont 2 succès, les deux positions de dé les plus élevées seraient suffisantes à tester, et vous pourriez vous épargner complètement la branche "if 3@ROLL". Dans ce cas, vous pourriez aussi vous éviter la réduction de la valeur de RESTANT dans la branche "if 2@ROLL", car il n'y a pas d'autres tests sur RESTANT.

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