只有一半的纸牌被创造出来
Only Half of a Deck of Cards Being Created
我正在尝试为最终项目创建 BlackJack。这是我当前的代码:
public class Card
{
private string face;
private string suit;
public Card(string cardFace, string cardSuit)
{
face = cardFace;
suit = cardSuit;
}
public override string ToString()
{
return face + " of " + suit;
}
}
然后我有我的套牌class:
public class Deck
{
private Card[] deck;
private int currentCard;
private const int NUMBER_OF_CARDS = 52;
private Random ranNum;
public Deck()
{
string[] faces = { "Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" };
string[] suits = { "Hearts", "Clubs", "Diamonds", "Spades" };
deck = new Card[NUMBER_OF_CARDS];
currentCard = 0;
ranNum = new Random();
for (int count = 0; count < deck.Length; count++)
deck[count] = new Card(faces[count % 13], suits[count / 13]);
}
public void Shuffle()
{
currentCard = 0;
for (int first = 0; first < deck.Length; first++)
{
int second = ranNum.Next(NUMBER_OF_CARDS);
Card temp = deck[first];
deck[first] = deck[second];
deck[second] = temp;
}
}
public Card DealCard()
{
if (currentCard < deck.Length)
return deck[currentCard++];
else
return null;
}
}
然后我只是一个简单的 Windows 表单,其中包含两个用于洗牌和发牌的按钮。输出被发送到一个标签,这样我就可以看到正在处理的是什么。这是代码:
public partial class Form1 : Form
{
Deck deck = new Deck();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void buttonDeal_Click(object sender, EventArgs e)
{
Card card = deck.DealCard();
deck.DealCard();
labelOutput.Text = card.ToString();
}
private void buttonShuffle_Click(object sender, EventArgs e)
{
deck.Shuffle();
}
}
现在,当我按下交易按钮时,它会在按下 27 次后崩溃。我注意到它正在处理其他所有卡,例如 3 个梅花、5 个梅花、7 个梅花、9 个梅花等。
我好像找不到错误!如有任何帮助,我们将不胜感激!
编辑:这是我点击它超过 27 次时出现的错误:
其实你的错误就来自于此。
您正在发两张牌,而您只想发一张。
它正在崩溃,因为每次单击计数器时都会增加 2。
27 * 2 > 52 张卡片。
private void buttonDeal_Click(object sender, EventArgs e)
{
Card card = deck.DealCard();
deck.DealCard(); // error here. Duplicated line
labelOutput.Text = card.ToString();
}
我正在尝试为最终项目创建 BlackJack。这是我当前的代码:
public class Card
{
private string face;
private string suit;
public Card(string cardFace, string cardSuit)
{
face = cardFace;
suit = cardSuit;
}
public override string ToString()
{
return face + " of " + suit;
}
}
然后我有我的套牌class:
public class Deck
{
private Card[] deck;
private int currentCard;
private const int NUMBER_OF_CARDS = 52;
private Random ranNum;
public Deck()
{
string[] faces = { "Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" };
string[] suits = { "Hearts", "Clubs", "Diamonds", "Spades" };
deck = new Card[NUMBER_OF_CARDS];
currentCard = 0;
ranNum = new Random();
for (int count = 0; count < deck.Length; count++)
deck[count] = new Card(faces[count % 13], suits[count / 13]);
}
public void Shuffle()
{
currentCard = 0;
for (int first = 0; first < deck.Length; first++)
{
int second = ranNum.Next(NUMBER_OF_CARDS);
Card temp = deck[first];
deck[first] = deck[second];
deck[second] = temp;
}
}
public Card DealCard()
{
if (currentCard < deck.Length)
return deck[currentCard++];
else
return null;
}
}
然后我只是一个简单的 Windows 表单,其中包含两个用于洗牌和发牌的按钮。输出被发送到一个标签,这样我就可以看到正在处理的是什么。这是代码:
public partial class Form1 : Form
{
Deck deck = new Deck();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void buttonDeal_Click(object sender, EventArgs e)
{
Card card = deck.DealCard();
deck.DealCard();
labelOutput.Text = card.ToString();
}
private void buttonShuffle_Click(object sender, EventArgs e)
{
deck.Shuffle();
}
}
现在,当我按下交易按钮时,它会在按下 27 次后崩溃。我注意到它正在处理其他所有卡,例如 3 个梅花、5 个梅花、7 个梅花、9 个梅花等。
我好像找不到错误!如有任何帮助,我们将不胜感激!
编辑:这是我点击它超过 27 次时出现的错误:
其实你的错误就来自于此。 您正在发两张牌,而您只想发一张。
它正在崩溃,因为每次单击计数器时都会增加 2。 27 * 2 > 52 张卡片。
private void buttonDeal_Click(object sender, EventArgs e)
{
Card card = deck.DealCard();
deck.DealCard(); // error here. Duplicated line
labelOutput.Text = card.ToString();
}