C# 21点程序在游戏开始后冻结
我正在用C#创建一个21点游戏,在我的Do-While循环(实际游戏中的所有事情都发生)之前,一切(我很确定)都正常。当它发生时,它要么冻结,要么什么也不发生。我注意到当我摆脱Do-While循环时,游戏不会冻结,所以我猜它是在一个无限循环中或是什么的,但我不确定在这里该做什么C# 21点程序在游戏开始后冻结,c#,freeze,blackjack,C#,Freeze,Blackjack,我正在用C#创建一个21点游戏,在我的Do-While循环(实际游戏中的所有事情都发生)之前,一切(我很确定)都正常。当它发生时,它要么冻结,要么什么也不发生。我注意到当我摆脱Do-While循环时,游戏不会冻结,所以我猜它是在一个无限循环中或是什么的,但我不确定在这里该做什么 namespace Blackjack { public partial class Form1 : Form { public Boolean standClicked = false
namespace Blackjack
{
public partial class Form1 : Form
{
public Boolean standClicked = false;
public Boolean hitClicked = false;
public Boolean over;
public Cards[] cardSet = new Cards[5];
public PictureBox[] picArray = new PictureBox[5];
public int points;
public int i;
public Form1()
{
InitializeComponent();
//Makes all card images hidden
Card1.Hide();
Card2.Hide();
Card3.Hide();
Card4.Hide();
Card5.Hide();
//Makes the win-lose label blank
winOrLoseLabel.Text = " ";
buttonHit.Hide();
buttonStand.Hide();
}
private void buttonExit_Click(object sender, EventArgs e)
{
//Closes the application
this.Close();
}
private Image SetImage(int cardValue)
{
Image _ = null;
if (cardValue >= 0)
{
for (int check = 0; check >= 50; check++)
{
if (cardValue == check)
{
_ = imageList1.Images[check];
}
}
}
if (_ == null)
{
_ = imageList1.Images[0];
}
return _;
}
public void buttonHit_Click(object sender, EventArgs e)
{
hitClicked = true;
if (hitClicked == true)
{
picArray[i].Image = SetImage(cardSet[i].GetValue());
points += cardSet[i].CardValue();
pointCounter.Text = points.ToString();
}
points += Convert.ToInt32(pointCounter.Text);
if (points >= 21)
over = true;
else
over = false;
i++;
}
private void buttonStand_Click(object sender, EventArgs e)
{
standClicked = true;
buttonHit.Enabled = false;
}
private void buttonPlay_Click_2(object sender, EventArgs e)
{
// Reveals all cards on the form
Card1.Show();
Card2.Show();
Card3.Show();
Card4.Show();
Card5.Show();
//Hides the logo as well as the play and exit buttons
pictureBox3.Hide();
buttonPlay.Hide();
buttonExit.Hide();
//Sets both hit and stand buttons to be enabled again
buttonHit.Show();
buttonStand.Show();
buttonHit.Enabled = true;
buttonStand.Enabled = true;
//Makes the win-lose label blank
winOrLoseLabel.Text = " ";
//Sets the "standClicked boolean value to false - to not automatically end the game
pointCounter.Text = "0";
points = Convert.ToInt32(pointCounter.Text);
//Makes the cardset values randomized
cardSet[0] = new Cards(0);
cardSet[0].Value = 0;
cardSet[0].SetCards();
cardSet[1] = new Cards(0);
cardSet[1].Value = 0;
cardSet[1].SetCards();
cardSet[2] = new Cards(0);
cardSet[2].Value = 0;
cardSet[2].SetCards();
cardSet[3] = new Cards(0);
cardSet[3].Value = 0;
cardSet[3].SetCards();
cardSet[4] = new Cards(0);
cardSet[4].Value = 0;
cardSet[4].SetCards();
// PictureBox array to allow changes to different PictureBoxes
PictureBox[] picArray = new PictureBox[5];
// Card thing
for (int x = 0; x > picArray.Length; x++)
{
picArray[x] = new PictureBox();
}
picArray[0] = Card1;
picArray[1] = Card2;
picArray[2] = Card3;
picArray[3] = Card4;
picArray[4] = Card5;
// Will automatically show you your first card, while the rest will stay hidden until you press the Hit button.
picArray[0].Image = SetImage(cardSet[0].GetValue());
points += cardSet[0].CardValue();
pointCounter.Text = points.ToString();
i = 1;
//Sets over boolean to false - to not automatically end the game
over = false;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void pictureBox7_Click(object sender, EventArgs e)
{
}
private void Card2_Click(object sender, EventArgs e)
{
}
private void pictureBox3_Click(object sender, EventArgs e)
{
}
private void buttonPlay_Click(object sender, EventArgs e)
{
}
private void buttonPlay_Click_1(object sender, EventArgs e)
{
}
}
}
如果你也需要的话,还有我的卡片课
using System;
public class Cards
{
Random rand = new Random();
public int Value = 0;
public Cards(int value)
{
this.Value = value;
}
public int GetValue()
{
return Value;
}
public int CardValue()
{
if (Value == 0 || Value == 1 || Value == 2 || Value == 3)
return 2;
else if (Value == 4 || Value == 5 || Value == 6 || Value == 7)
return 3;
else if (Value == 8 || Value == 9 || Value == 10 || Value == 11)
return 4;
else if (Value == 12 || Value == 13 || Value == 14 || Value == 15)
return 5;
else if (Value == 16 || Value == 17 || Value == 18 || Value == 19)
return 6;
else if (Value == 20 || Value == 21 || Value == 22 || Value == 23)
return 7;
else if (Value == 24 || Value == 25 || Value == 26 || Value == 27)
return 8;
else if (Value == 28 || Value == 29 || Value == 30 || Value == 31)
return 9;
else if (Value == 32 || Value == 33 || Value == 34 || Value == 35)
return 10;
else if (Value == 36 || Value == 37 || Value == 38 || Value == 39)
return 1;
else if (Value == 40 || Value == 41 || Value == 42 || Value == 43 || Value == 44 || Value == 45 || Value == 46 || Value == 47)
return 10;
else
return 2;
}
public void SetCards()
{
//Adds a random value to card
int ranumber = rand.Next(0, 47);
Value = ranumber;
}
}
我还是个编程新手,这是我第一个真正的项目。任何关于如何改进代码和/或解决问题的帮助对我来说都意味着一百万。你在
按钮中有一个无休止的循环lay\u Click\u 1
任何按钮单击都无法注册。21点游戏通常有多个牌组,因此每个等级+套装中都有1张以上的牌,你可以随机挑选牌,这样就可以有30张国王牌或其他牌。你应该创建一个或多个牌组,并将它们洗牌,以便简单地随机使用它们order@holypetralich您只需使用按钮的单击事件处理程序即可。处理单击特定按钮并显示卡片的操作,或在按钮的事件处理程序中执行其他操作
@Ryan Wilson我可以问一下这是什么意思吗?对不起,我还是个新手,我想确保我理解这里告诉我的内容。@Ňssa Pøngjǣrdenlarp无休止的循环在哪里?很抱歉,我不确定应该在哪里或如何修复它。@HolyPetRalichpublic void buttonHit\u Click(object sender,EventArgs e)
和private void buttons and\u Click(object sender,EventArgs e)
-在每个按钮的Click事件中调用这些方法。在这些方法中设置布尔值时,您似乎已经理解了这一点。与其设置布尔值,不如在那里执行逻辑,而不要试图在循环中执行逻辑,并完全摆脱循环。在按钮中有一个无休止的循环,点击按钮1
任何按钮都无法注册。21点游戏通常有多个牌组,因此每个等级+套装中都有1张以上的牌,你可以随机挑选牌,这样就可以有30张国王牌或其他牌。你应该创建一个或多个牌组,并将它们洗牌,以便简单地随机使用它们order@holypetralich您只需使用按钮的单击事件处理程序即可。处理单击特定按钮并显示卡片的操作,或在按钮的事件处理程序中执行其他操作
@Ryan Wilson我可以问一下这是什么意思吗?对不起,我还是个新手,我想确保我理解这里告诉我的内容。@Ňssa Pøngjǣrdenlarp无休止的循环在哪里?很抱歉,我不确定应该在哪里或如何修复它。@HolyPetRalichpublic void buttonHit\u Click(object sender,EventArgs e)
和private void buttons and\u Click(object sender,EventArgs e)
-在每个按钮的Click事件中调用这些方法。在这些方法中设置布尔值时,您似乎已经理解了这一点。与其设置布尔值,不如在那里执行逻辑,而不要试图在循环中执行逻辑,并完全摆脱循环。