增加从牌堆中抽出扑克牌的几率?

问题描述 投票:0回答:1

我正在努力满足这些要求:

  • 牌应以伪随机顺序抽出,红心和黑桃 A 将被视为特殊牌,抽出机会会增加。每张心形套装卡被抽取的可能性应该是非特殊卡的 2 倍。黑桃 A 被抽到的可能性应该是非特殊牌的 3 倍。

  • 上面的抽牌赔率是指一张牌成为下一张抽牌的可能性。在浏览一副牌的过程中,每种花色和数值的一张牌应该恰好被看到一次。

我一开始想在牌组中添加更多特殊类型的牌来增加几率。查看要求后,这副牌将超过 52 张牌,并且每次运行都会显示不止一张牌。我对要求的理解正确吗?

换句话说,我会将特殊卡移到列表的开头,这样抽到下一张卡的机会就很高。但是什么让一张牌的可能性增加 3 倍,而另一张牌的可能性增加 2 倍呢?

这是迄今为止我所掌握的相关内容:

    public void ShuffleDeck()
    {
        for (int i = deck.Count - 1; i > 0; i--)
        {
            int j = Random.Range(0, i + 1);
            SwapCards(i, j);
        }
    }

    private void SwapCards(int i, int j)
    {
        Card temp = deck[i];
        deck[i] = deck[j];
        deck[j] = temp;
    }

    public Card DrawCard()
    {
        if (deck.Count > 0)
        {
            Card drawnCard = deck[0];
            deck.RemoveAt(0);
            drawnCards.Add(drawnCard);
            return drawnCard;
        }
        return null;
    }

    public void ApplyDrawingOdds(int oddsMultiplier, string specialSuit, string specialRank = "")
    {
        // search for special cards in the deck
        List<Card> specialCards = deck.FindAll(card => card.Suit == specialSuit && (specialRank == "" || card.Rank == specialRank));

        // loop through special cards
        foreach (Card specialCard in specialCards)
        {
            // retrieve index in deck
            int index = deck.IndexOf(specialCard);

            // calculate the target index for swapping based on oddsMultiplier
            int targetIndex = System.Math.Max(0, index - oddsMultiplier + 1);

            // swap current special card with other cards in deck
            for (int k = 0; k < oddsMultiplier; k++)
            {
                // move towards beginning of deck
                SwapCards(index, targetIndex + k);
            }
        }
    }

    public void ResetDeck()
    {
        deck.AddRange(drawnCards);
        drawnCards.Clear();
        ShuffleDeck();
    }
c# unity-game-engine pseudocode
1个回答
0
投票

如果是一副扑克牌,从一副扑克牌中抽出一张扑克牌的几率不是100%吗?

哈哈。无法抗拒只阅读标题;)

© www.soinside.com 2019 - 2024. All rights reserved.