我开始创建一个黑色杰克游戏,到目前为止,我已经创建了卡类和甲板类。卡类工作正常,但是当我尝试测试甲板类时,数组中充满了“BlackJackLab.Deck”,我真的很困惑为什么......这就是我正在使用的代码:
SELECT * FROM companies_employers
我正在测试代码:
class Card
{
public string Suit { get; set; }
public string Rank { get; set; }
public Card(string suit, string rank)
{
if ((suit != "Hearts" && suit != "Spades" && suit != "Diamonds" && suit != "Clubs") || (
rank != "Ace" && rank != "1" && rank != "2" && rank != "3" && rank != "4" && rank != "5"
&& rank != "6" && rank != "7" && rank != "8" && rank != "9" && rank != "10" && rank != "Jack" && rank != "Queen" && rank != "King"))
{
Console.WriteLine("Error not such suit or rank found. Exiting...");
Console.ReadLine();
Environment.Exit(1);
}
else
{
this.Suit = suit;
this.Rank = rank;
}
}
public static string[] ValidSuits()
{
string[] suits = new string[4];
suits[0] = "Hearts";
suits[1] = "Spades";
suits[2] = "Diamonds";
suits[3] = "Clubs";
return suits;
}
public static string[] ValidRanks()
{
string[] ranks = new string[13];
ranks[0] = "Ace";
for (int i = 2; i <= 10; i++)
{
ranks[i - 1] = i.ToString();
}
ranks[10] = "Jack";
ranks[11] = "Queen";
ranks[12] = "King";
return ranks;
}
public int GetValue()
{
if (this.Rank.Equals("Ace"))
return 1;
else if (this.Rank.Equals("2"))
return 2;
else if (this.Rank.Equals("3"))
return 3;
else if (this.Rank.Equals("4"))
return 4;
else if (this.Rank.Equals("5"))
return 5;
else if (this.Rank.Equals("6"))
return 6;
else if (this.Rank.Equals("7"))
return 7;
else if (this.Rank.Equals("8"))
return 8;
else if (this.Rank.Equals("9"))
return 9;
else if (this.Rank.Equals("10"))
return 10;
else if (this.Rank.Equals("Jack"))
return 11;
else if (this.Rank.Equals("Queen"))
return 12;
else
return 13;
}
public string GetFace ()
{
return string.Format("{0} of {1}", this.Rank, this.Suit);
}
}
class Deck
{
public Card[] Cards { get; set; }
public Random RandomGenerator { get; set; }
public Deck()
{
int i = 0;
this.Cards = new Card[52];
foreach (string rank1 in Card.ValidRanks())
{
foreach (string suit1 in Card.ValidSuits())
{
this.Cards[i] = new Card(suit1, rank1);
i++;
}
}
this.RandomGenerator = new Random();
}
public Card DrawCard()
{
int randomNumber;
do
{
randomNumber= RandomGenerator.Next(0, 52);
}
while (Cards[randomNumber] == null);
Card drawnCard = Cards[randomNumber];
Cards[randomNumber] = null;
return drawnCard;
}
}
请帮助我,我真的被卡住了。
答案 0 :(得分:0)
当我尝试测试甲板类时,数组中填充了
BlackJackLab.Deck
看起来所有卡都是相同的,但它们不是。为了看看它们是什么,你应该分别编写它们的等级和套装,或者覆盖ToString
以查看调试器中的值:
public override string ToString() {
return rank + " of " + suit;
}
请注意,如果您开始使用套装和排名的静态数组,则可以大大简化验证代码,如下所示:
public Card(string suit, string rank) {
if (Array.IndexOf(ValidSuits(), suit) < 0) {
throw new ArgumentException("suit");
}
... // Do the same for the rank before assigning the fields
}
您可以静态地预先创建这些数组,然后从方法中返回它们,而不是动态创建有效排名和套装的数组。此外,将这些方法转换为静态属性将是更好的方法:
private static string[] validSuits = new[] {
"Hearts", "Spades", "Diamonds", "Clubs"
};
public string[] ValidSuits {
get {
return validSuits;
}
}
答案 1 :(得分:0)
这不是您问题的直接答案。我只是觉得您可能希望看到代码的重构。
public class Card
{
public string Suit { get; private set; }
public string Rank { get; private set; }
public Card(string suit, string rank)
{
if (!(ValidSuits().Contains(suit) && ValidRanks().Contains(rank)))
{
Console.WriteLine("Error not such suit or rank found. Exiting...");
Console.ReadLine();
Environment.Exit(1);
}
else
{
this.Suit = suit;
this.Rank = rank;
}
}
public static string[] ValidSuits()
{
return new [] { "Hearts", "Spades", "Diamonds", "Clubs", };
}
public static string[] ValidRanks()
{
var named = new [] { "Ace", "Jack", "Queen", "King" };
return named.Take(1).Concat(Enumerable.Range(2, 9).Select(n => n.ToString())).Concat(named.Skip(1)).ToArray();
}
public int GetValue()
{
return Array.IndexOf(ValidRanks(), this.Rank) + 1;
}
public override string ToString()
{
return string.Format("{0} of {1}", this.Rank, this.Suit);
}
}
public class Deck
{
public Card[] Cards { get; set; }
private Random RandomGenerator = new Random();
public Deck()
{
this.Cards =
(
from rank1 in Card.ValidRanks()
from suit1 in Card.ValidSuits()
select new Card(suit1, rank1)
).ToArray();
}
public void Shuffle()
{
this.Cards = this.Cards.OrderBy(x => RandomGenerator.Next()).ToArray();
}
}