我正在努力满足这些要求:
牌应以伪随机顺序抽出,红心和黑桃 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();
}
如果是一副扑克牌,从一副扑克牌中抽出一张扑克牌的几率不是100%吗?
哈哈。无法抗拒只阅读标题;)