【发布时间】:2018-08-18 16:48:19
【问题描述】:
这可能是重复的,但我已经找了几个小时了,但我一直在做空。所以这里是:
I don't have any code yet. I got p*ssed and deleted most of it! :P
我正在编写一个简单的程序,它将从一副纸牌中抽出五张牌。现在,我可以做到。但是,我正在制作一个按钮,它将不断从新牌组中抽牌,直到碰到一对。
现在的问题是五张抽出的牌的比较。我正在从列表中绘制它们
List<Card> TheDeck
并将它们添加到另一个列表中
List<Card> TheHand
卡片类非常简单,只包含花色的第一个字母和一个数字。
public string suit;
public int number;
public Card(string suit, int number)
{
this.suit = suit;
this.number = number;
}
现在要抽一对,我必须比较抽出的五张牌的数字,看是否有任何匹配。我这样做的最后一种方法是执行 GIANT if 语句,
if (TheHand[0].number == TheHand[1].number ||
TheHand[0].number == TheHand[2].number || TheHand[0].number == TheHand[3].number ||
TheHand[0].number == TheHand[4].number /* .. and so on and so on .. */)
我可以这样做,但它似乎太过分了。 所以你有我的问题。比较所有卡片的更简单方法是什么?任何帮助将不胜感激。
【问题讨论】:
-
我会使用 LINQ 的
GroupBy按卡片编号对卡片进行分组,然后查看每组中有多少张卡片。我还建议对西装使用枚举而不是字符串,并使用属性而不是字段。 -
几个问题:你有不止一副牌吗?如果没有,我会在您的 Card 对象上使用 IComparable 。如果您想了解更多信息,我会为您解答。
-
@Aldert - 我有一副牌,如果它在第一次尝试时未能抽出一对,我会重新洗牌并重新抽牌。
-
大图:.NET 集合很聪明地使用
Equals、CompareTo、IEquatable、&IComparable;并且不会被继承、覆盖或实现接口的混合混淆。请参阅 MSDN forListmethods,如Contains、Find、BinarySearch、Sort等。花点时间阅读 MSDN 中的IEquatable和IComparable。您无需了解所有内容即可使用它。