2 votes

L'ordre des ennemis choisis a-t-il un impact sur vos chances d'obtenir une carte rare ?

En regardant ce replay surexpliqué Le joueur a expliqué qu'il avait choisi un chemin particulier en pensant que le fait de " répartir " les combats d'élite entre les ennemis normaux augmenterait les chances de trouver des cartes plus rares.

Slay the spire choisit ses cartes en effectuant d'abord un jet de dé pour un type (commun, peu commun ou rare), puis en tirant une carte aléatoire de ce type, chaque membre du type ayant la même probabilité. Le jet de type est pondéré de manière aléatoire, de la manière suivante :

Il y a une variable cachée c le compteur commun. Les probabilités des cartes commencent à P = [-2%, 37%, 63%] pour les cartes rares, peu communes et communes respectivement. Chaque fois qu'une commun est lancée, en pseudocode :

if(P[0] < 43%) P[0] += 1%; 
if(P[0] > 0% && P[0] < 43%) P[2] -= 1%;

Chaque fois qu'un rare est lancée, les probabilités sont réinitialisées aux valeurs de base de P = [-2%, 37%, 63%] encore. Sur les combats d'élite, la chance de rareté est modifiée : elle est plutôt P[0] + 10% alors que le hasard commun est P[2] - 10% . Dans les magasins, c'est P[0] + 6% y P[2] - 6%

Le graphique ci-dessous illustre le mécanisme de manière très perspicace :

! Graph of rare card chance

Au début de chaque acte, les chances de trouver une carte rare sont également réinitialisées, car les boss laissent toujours le choix entre trois cartes rares.


Cheminement

Au début de l'acte, le joueur décidera typiquement quel chemin à prendre à travers l'acte, à partir duquel commencer. Lors de la planification, il peut être utile de savoir si la séquence spécifique d'ennemis aura ou non un impact sur le nombre attendu de cartes rares reçues.

Nous voulons maximiser ce qui précède. Est-ce qu'une séquence comme rrrErrrE "répartir les combats de l'élite" se comparent favorablement à une formule telle que rrrEErrr "les regrouper" ?

3voto

aphid Points 7356

La réponse courte : Non. Le contraire est vrai. .


Détails :

J'ai écrit un petit programme en console pour tester cela, en simulant 10 8 et de sortir le nombre de cartes rares que vous vous attendez à voir. (Il faut environ une minute pour l'exécuter sur un processeur moderne). Il permet n'importe quel chemin d'action comme entrée et produit le nombre de cartes rares vues dans les récompenses de cartes. note . Voici le résultat :

Simulate rare chance. Input a string formatted like rrresrrre. r = regular, e =
elite, s = shop.
It is assumed shop rares are not bought
Input: rrrerrre
Result: 2.4346
Input: rrreerrr
Result: 2.5110
Input: rrrerre
Result: 2.0444
Input: rrreerr
Result: 2.1136
Input: rrrere
Result: 1.6491
Input: rrreer
Result: 1.6962

Remarque : en raison de la loi des grands nombres, les résultats ci-dessus sont précis à 4 décimales, et très précis à 3 décimales. (L'augmentation du nombre de simulations rendra les résultats plus précis, au prix d'une augmentation linéaire du temps).

Nous pouvons voir qu'il y a un désavantage significatif dans le nombre de rares vu à la méthode suggérée dans la vidéo et donc faire réellement le contraire de ladite technique a du mérite ! En moyenne, un acte avec 3 combats, une élite, 3 combats, une élite verra 0,076 cartes rares de moins qu'un acte où l'on choisit comme chemin 3 combats, deux élites, 3 combats. Avec 3-2, nous voyons une différence de 0,069, et avec 3-1, il y a une différence de 0,047 cartes rares.

Note : la simulation des événements et la modification des récompenses des cartes avec certaines reliques sont laissées comme un exercice au lecteur. Mon hypothèse est que le résultat sous-jacent a peu de chances de changer : seule l'ampleur de l'effet peut varier.


Code source (C#) ci-dessous :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace raresExpected {

class Program {
    static void Main(string[] args) {
        string input;
        System.Console.WriteLine("Simulate rare chance. Input a string formatted like rrresrrre. r = regular, e = elite, s = shop.");
        System.Console.WriteLine("It is assumed shop rares are not bought");
        do {
            System.Console.Write("Input: ");
            input = System.Console.ReadLine();
            double result = estimate(input.ToLowerInvariant());
            System.Console.WriteLine("Result: " + result.ToString("N4"));
        }
        while (input != "" && input != "exit");
    }
    static double estimate(string input) {
        int simulations = 100000000;
        double total = 0;
        Random rand = new Random();
        char[] ca = input.ToCharArray();
        for (int i = 0; i < simulations; ++i) {
            // Ok not to use Kahan: the numbers will be close.
            total += runSimulation(ca, rand);
        }
        return total / simulations;
    }
    static int runSimulation(char[] input, Random rand) {
        int cards;
        int rares = 0;
        int p = -2; // Probability
        int mod = 0;
        int q = 0; // Modified probability
        int r = 0; // Running total
        foreach (char c in input) {
            if (c == 'r') {
                mod = 10;
                cards = 3;
            } else if (c == 'e') {
                mod = 0;
                cards = 3;
            } else if (c == 's') {
                mod = 6;
                cards = 7;
            } else {
                cards = 0;
            }
            for (int i = 0; i < cards; ++i) {
                q = p + mod;
                r = rand.Next() % 100;
                if (r < q) {
                    if (c != 's') {
                        ++rares;
                    }
                    p = -2;
                } else  if (r > q + 0.37) {
                    // Common card is rolled. 
                    ++p;
                }
            }
        }
        return rares;
    }
}
}

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