我极端是编码的新手,所以答案很明显。我必须制作纸牌游戏War。我已经为甲板的一部分创建了这样的字符串列表:
List<string> userDeck = new List<string>
{
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"Jack",
"Queen",
"King",
"Ace",
};
有没有一种方法可以指示计算机“杰克”大于“ 10”,“女王”大于“杰克”,依此类推?我不确定应该在哪里或应该怎么做。
或,如果您对我应该如何操作还有其他建议,请告诉我。我必须使用列表。我最初是用整数列表代替的,但是我不知道为显示目的分配诸如“杰克”,“皇后”,“国王”等名称的简单方法。
任何帮助将不胜感激。
答案 0 :(得分:2)
尝试创建一个名为“ Card”的对象。该对象可以包含多个值。例如:
public class MyCard
{
public string Name {get;set;}
public int Value {get;set;}
public MyCard(string name, int value)
{
this.Name = name;
this.Value = value;
}
}
创建此对象后,将在列表中使用它。
List<MyCard> userDeck = new List<MyCard>();
您可以通过以下方式填写列表:
usertDeck.Add(new MyCard("2", 1));
....
usertDeck.Add(new MyCard("K", 11));
因此,要比较2张卡,只需使用“ Value”变量进行检查
答案 1 :(得分:0)
类似于Vincius的回答,但进行了一些更改以提高可用性:
enum Suit
{
Clubs = 1,
Diamonds = 2,
Hearts = 3,
Spades = 4
}
class Card
{
private static readonly Dictionary<string, int> rankMap = new Dictionary<string, int>()
{
{"2", 2 },
{"3", 3 },
{"4", 4 },
{"5", 5 },
{"6", 6 },
{"7", 7 },
{"8", 8 },
{"9", 9 },
{"10", 10 },
{"Jack", 11 },
{"Queen", 12 },
{"King", 13 },
{"Ace", 14 },
};
private Suit suit;
private string rank;
public Suit Suit => suit;
public string Rank => rank;
public int Value { get { return rankMap[rank]; } }
public Card(Suit s, string r)
{
suit = s;
rank = r;
}
}
使用方式:
Card c1 = new Card(1, "Jack"); // 1 is Clubs
Card c2 = new Card(4, "Queen"); // 4 is Spades
Console.WriteLine(c1.Value); // prints 11
Console.WriteLine(c2.Value); // prints 12
答案 2 :(得分:0)
重构代码(达到每张卡的要求值)的最简单方法是使用元组而不是通用列表中的字符串类型,如下所示:
List<Tuple<int,string>> userDeck = new List<Tuple<int,string>>
{
new Tuple<int,string>(2,"2"),
new Tuple<int,string>(3,"3"),
new Tuple<int,string>(4,"4"),
new Tuple<int,string>(5,"5"),
new Tuple<int,string>(6,"6"),
new Tuple<int,string>(7,"7"),
new Tuple<int,string>(8,"8"),
new Tuple<int,string>(9,"9"),
new Tuple<int,string>(10,"10"),
new Tuple<int,string>(11,"Jack"),
new Tuple<int,string>(12,"Queen"),
new Tuple<int,string>(13,"King"),
new Tuple<int,string>(14,"Ace"),
};