【发布时间】:2017-04-27 00:08:07
【问题描述】:
我仍在开发一个 Windows 应用程序项目,它是关于一套卡片组的。该应用程序使用 52 张牌,其中包括 4 个花色和 13 个面值,例如 2 个梅花、红心杰克等。我正在工作的部分是我还必须使用五个图片框来显示每张随机卡片,因此我单击“交易”按钮。我知道我必须使用“随机”关键字以及使用 for 循环来进行洗牌。
因此,我不太确定如何使用不同的随机卡片显示每个图片框并相应地显示每张卡片的名称。
下面包含 Windows 应用程序外观的屏幕截图和我的项目代码。
List<PlayingCard> cardDeckList = new List<PlayingCard>();
private void buttonDeal_Click(object sender, EventArgs e)
{
int integer = 0;
Random picRandom = new Random();
int n = 0;
integer = picRandom.Next(0, imageListCards.Images.Count);
for( n = 0; n < cardDeckList.Count; n++)
{
pictureBox_Card1.Image = cardDeckList[integer].CardImage;
pictureBox_Card2.Image = cardDeckList[integer].CardImage;
pictureBox_Card3.Image = cardDeckList[integer].CardImage;
pictureBox_Card4.Image = cardDeckList[integer].CardImage;
pictureBox_Card5.Image = cardDeckList[integer].CardImage;
}
listBoxOutput.Items.Add(cardDeckList[integer].ToString());
}
private void FormShuffleCardDeck_Load(object sender, EventArgs e)
{
try
{
string[] suitList = { "Clubs", "Diamonds", "Hearts", "Spades" };
string[] faceList = new string[13];
List<int> pointValues = new List<int>();
pointValues.Add(2);
pointValues.Add(3);
pointValues.Add(4);
pointValues.Add(5);
pointValues.Add(6);
pointValues.Add(7);
pointValues.Add(8);
pointValues.Add(9);
pointValues.Add(10);
pointValues.Add(10);
pointValues.Add(11);
string suit = "";
string face = "";
int counter = 0;
int i = 0;
int k = 0;
for (i = 0; i < 4; i++)
{
suit = i.ToString();
switch (suit)
{
case "0":
suit = "Clubs";
break;
case "1":
suit = "Diamonds";
break;
case "2":
suit = "Hearts";
break;
case "3":
suit = "Spades";
break;
}
for (k = 0; k < 13; k++)
{
face = k.ToString();
switch (k)
{
case 0:
face = "2";
break;
case 1:
face = "3";
break;
case 2:
face = "4";
break;
case 3:
face = "5";
break;
case 4:
face = "6";
break;
case 5:
face = "7";
break;
case 6:
face = "8";
break;
case 7:
face = "9";
break;
case 8:
face = "10";
break;
case 9:
face = "Ace";
break;
case 10:
face = "King";
break;
case 11:
face = "Jack";
break;
case 12:
face = "Queen";
break;
}
cardDeckList.Add(new PlayingCard(suit, face, imageListCards.Images[counter],2));
counter++;
}
}
//for (int l = 0; l < cardDeckList.Count; l++)
//{
// listBoxOutput.Items.Add(cardDeckList[l].ToString());
// //MessageBox.Show(cardDeckList.Count.ToString());
//}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
【问题讨论】:
-
shuffle 应该是 shuffle 方法中唯一的东西。同样,create deck 方法中应该只存在创建卡片。一旦保持这种分离,就很容易在 SO 上搜索“洗牌”并调整代码。这两种方法都应该比显示的代码小很多。此外,通过为套件中的每张牌赋予 1(ace)..13(king) 的值,可以大大简化创建代码。卡本身知道它是“面值字符串”。然后可以使用简单的循环和模数来创建卡片。
-
洗牌本身比尝试从未洗牌的牌组中随机挑选要容易得多。
标签: c# image class for-loop picturebox