我正在尝试在卡牌清单上做Fisher Yates随机卡牌。我已经冲刷论坛和费舍尔耶茨的唯一实现与正常人一样INT阵列下面Fisher Yates随机卡牌清单
for (int i = length - 1; i > 0; i--)
{
int j = random.Next(i + 1);
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
这是合理的就好了,我的问题是我实在不明白如何在逻辑转换的方式我有东西,任何帮助完成此将不胜感激。相关代码如下:
public struct Card : IComparable<Card>
{
public Rank Rank { get; private set; }
public Suit Suit { get; private set; }
public Card(Rank rank, Suit suit) : this()
{
Rank = rank;
Suit = suit;
}
public override string ToString()
{
return string.Format("{0:x} {1}", (char) Suit, Rank);
}
}
public enum Suit { Spades = 9824, Clubs = 9827, Hearts = 9829, Diamonds = 9830 }
public enum Rank { Ace, Deuce, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King }
public class Deck
{
public List<Card> Cards { get; private set; }
public Deck()
{
foreach (Rank rank in Enum.GetValues(typeof(Rank)))
{
foreach (Suit suit in Enum.GetValues(typeof(Suit)))
{
Card card = new Card(rank, suit);
Cards.Add(card);
}
}
}
public Deck(List<Card> cardDeck)
{
Cards = cardDeck;
}
public void Shuffle()
{ //???? I don't know how I would apply the Fisher Yates logic to here
//since all other programs just use normal int arrays
. . .
感谢您的任何和所有帮助。
你的代码有几个编程错误,你永远不会初始化'Cards',也不会执行'IComparable' –
Lukazoid
2014-09-19 22:44:46
我只是在Shuffle问题上发布了相关的代码,这两个代码都在其他地方讨论过。 – user3066571 2014-09-19 22:53:02