【发布时间】:2014-08-29 17:02:29
【问题描述】:
我遇到了这个愚蠢的问题,我不知道如何解决,我正在创建一个二十一点游戏,我有一个带有 Deck() 和 Shuffle() 方法的卡片类,以及一个分发卡片的经销商类.
shuffle 方法是我在这个网站上获得的扩展方法,很有趣,但我无法让它从 Deck() 方法接收卡片列表...
我最初使用字典,但在改组字典时遇到了麻烦,并在此站点上寻求帮助 Here 他们建议使用列表,现在我在这里。
这里是 Card 和 Dealer 类
卡片.cs
public static class Card
{
private static List<string> deckOfCards = new List<string>();
private static string[] Suite = new string[4] {"Clubs", "Hearts", "Spades", "Diamonds" };
private static string[] FaceValue = new string[13] {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };
public static void Deck()
{
for (int s = 0; s < 4; s++ )
{
string sut = Suite[s];
for (int fV = 0; fV < 13; fV++)
{
string value = FaceValue[fV];
deckOfCards.Add(sut + value);
}
}
// End of For loop.
Shuffle(deckOfCards);
}
public static void Shuffle<T>(this IList<T> list)
{
Random rng = new Random();
int n = list.Count;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
}
Dealer.cs
class Dealer
{
private List<string> randomisedCards = new List<string>();
public Dealer()
{
randomisedCards.Shuffle();
}
public string dealCard()
{
string randCard = randomisedCards[0];
randomisedCards.RemoveAt(0);
return randCard;
}
}
强烈建议批评,因为这是您学习的方式,但请记住,我仍然是初学者,完全没有经验。
谢谢
【问题讨论】:
-
我没有看到
Dealer和Card类之间有任何联系。 -
你的
Card类不代表卡片,它代表Deck,有点。您可能希望更合乎逻辑地重新组织您的类,并使用枚举而不是string[]来表示套件和卡片值。除此之外,CodeReview 是合适的论坛。 -
必须将卡片类设为静态,所以我不太明白如何建立连接。这也是一个测试项目,所以我所有的错误都在这里整理,我目前正在学习枚举,并将在最终项目中实现它们。
-
@Jody 他的意思是
randomisedCards只是一个new List<string>()并且您正在洗牌一个空列表,而不使用在Deck方法中实现的任何套牌生成逻辑。我敢肯定,如果你能更合乎逻辑地重新组织你的类,那么游戏的逻辑在代码中的运行方式将会更加清晰。 -
好吧,我明白了,现在我该如何解决这个问题,我可以将 Deck() 方法列表随机返回到经销商类吗?