C# 21点程序在游戏开始后冻结

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

我正在用C#创建一个21点游戏,在我的Do-While循环(实际游戏中的所有事情都发生)之前,一切(我很确定)都正常。当它发生时,它要么冻结,要么什么也不发生。我注意到当我摆脱Do-While循环时,游戏不会冻结,所以我猜它是在一个无限循环中或是什么的,但我不确定在这里该做什么

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无休止的循环在哪里?很抱歉,我不确定应该在哪里或如何修复它。@HolyPetRalich
public 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无休止的循环在哪里?很抱歉,我不确定应该在哪里或如何修复它。@HolyPetRalich
public void buttonHit\u Click(object sender,EventArgs e)
private void buttons and\u Click(object sender,EventArgs e)
-在每个按钮的Click事件中调用这些方法。在这些方法中设置布尔值时,您似乎已经理解了这一点。与其设置布尔值,不如在那里执行逻辑,而不要试图在循环中执行逻辑,并完全摆脱循环。