掷骰子游戏,计算玩家2转数的问题

时间:2020-03-29 10:37:09

标签: c# winforms

这是一种掷骰子游戏,其中2位玩家连续3次掷骰子,并计算他们的个人总和,获胜者是总和更大的那个。

问题开始于玩家2的回合,i1继续至i2,因此它收集了玩家1获得的最后一个号码的值并将其视为玩家2的第一个掷骰数。然后我只能作为第二个玩家掷骰子两次,因为第一掷骰子已经算好了。

我整天试图修复它,但没有成功。有人告诉我i1和i2是个问题,也可以用其他方式解决,任何解决方案都将不胜感激。

using System;
using System.Windows.Forms;
using System.ComponentModel;

namespace Kockica
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
            MessageBoxManager.OK = "U redu";
            MessageBoxManager.Yes = "Izlaz";
            MessageBoxManager.No = "Ponovo";
            MessageBoxManager.Cancel = "Ostani";
            MessageBoxManager.Register();
        }

        protected override void OnClosing(CancelEventArgs e)
        {
            DialogResult rezultat = MessageBox.Show("Da li želite da napustite aplikaciju " +
            "ili da igrate ponovo?", "Pitanje", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

            if (rezultat == DialogResult.No)
            {
                Application.Restart();
            }
            else if (rezultat == DialogResult.Yes)
            {
                Application.Exit();
            }
            else e.Cancel = true;
        }

        private void BacanjeKockice_Load(object sender, EventArgs e)
        {
            label25.Hide();
            labelIme2.Hide();
            labelZbir2.Hide();
            labelUkupno2.Hide();
            labelPobednik.Hide();
            labelBacanje2.Hide();
            labelBrojBacanja2.Hide();
            labelIme1.Text = Class1.labelIme1;
            labelIme2.Text = Class1.labelIme2;
            labelZbir1.Text = Class1.suma1.ToString();
            labelZbir2.Text = Class1.suma2.ToString();
            labelBrojBacanja1.Text = Class1.i1.ToString();
            labelBrojBacanja2.Text = Class1.i2.ToString();
        }

        private void buttonBaci_Click(object sender, EventArgs e)
        {
            Random rb = new Random();
            int broj = rb.Next(imageListKockice.Images.Count);
            pictureBoxKockice.Image = imageListKockice.Images[broj];
            pictureBoxKockice.SizeMode = PictureBoxSizeMode.Zoom;

            if (Class1.i1 >= 0 && Class1.i1 < 3 && Class1.pom == false)
            {
                Class1.i1 += 1;
                labelBrojBacanja1.Text = Class1.i1.ToString();
                if (broj == 0)
                {
                    Class1.suma1 += 1;
                }
                else
                {
                    if (broj == 1)
                    {
                        Class1.suma1 += 2;
                    }
                    else
                    {
                        if (broj == 2)
                        {
                            Class1.suma1 += 3;
                        }
                        else
                        {
                            if (broj == 3)
                            {
                                Class1.suma1 += 4;
                            }
                            else
                            {
                                if (broj == 4)
                                {
                                    Class1.suma1 += 5;
                                }
                                else
                                {
                                    Class1.suma1 += 6;
                                }
                            }
                        }
                    }
                }
                labelZbir1.Text = Class1.suma1.ToString();
                if (Class1.i1 == 3)
                {
                    MessageBox.Show(Class1.labelIme1 + " ima ukupno: " + 
                                    Class1.suma1.ToString(), "Obaveštenje");
                }
            } 

            if (Class1.i1 == 3 && Class1.pom == false)
            {
                label24.Hide();
                labelIme1.Hide();
                labelZbir1.Hide();
                labelUkupno1.Hide();
                labelBacanje1.Hide();
                labelBrojBacanja1.Hide();
                labelBrojBacanja2.Show();
                labelBacanje2.Show();
                labelUkupno2.Show();
                labelZbir2.Show();
                labelIme2.Show();
                label25.Show();
                Class1.pom = true;
            }

            if (Class1.i2 >= 0 && Class1.i2 < 3 && Class1.pom == true)
            {
                labelBrojBacanja2.Text = Class1.i2.ToString();
                Class1.i2 += 1;
                if (broj == 0)
                {
                    Class1.suma2 += 1;
                }
                else
                {
                    if (broj == 1)
                    {
                        Class1.suma2 += 2;
                    }
                    else
                    {
                        if (broj == 2)
                        {
                            Class1.suma2 += 3;
                        }
                        else
                        {
                            if (broj == 3)
                            {
                                Class1.suma2 += 4;
                            }
                            else
                            {
                                if (broj == 4)
                                {
                                    Class1.suma2 += 5;
                                }
                                else
                                {
                                    Class1.suma2 += 6;
                                }
                            }
                        }
                    }
                }
            }

            labelZbir2.Text = Class1.suma2.ToString();
            if (Class1.i2 == 3)
            {
                MessageBox.Show(Class1.labelIme2 + " ima ukupno: " + 
                                Class1.suma2.ToString(), "Obaveštenje");
            }

            if (Class1.i1 == 3 && Class1.i2 == 3 && Class1.pom == true)
            {
                labelUkupno2.Show();
                labelUkupno1.Show();
                labelZbir1.Show();
                labelZbir2.Show();
                labelIme2.Show();
                labelIme1.Show();
                label25.Hide();
                label24.Hide();
                buttonBaci.Hide();
                labelBacanje2.Hide();
                labelBacanje1.Hide();
                labelBrojBacanja1.Hide();
                labelBrojBacanja2.Hide();
                pictureBoxKockice.Hide();
                Class1.pom1 = true;
            }

            if (Class1.pom1 == true)
            {
                if (Class1.suma1 > Class1.suma2)
                {
                    MessageBox.Show("Pobednik je: " + Class1.labelIme1, "Obaveštenje");
                    labelPobednik.Text = Class1.labelIme1 + " JE POBEDNIK!";
                    labelPobednik.Show();


                }
                else if (Class1.suma1 < Class1.suma2)
                {
                    MessageBox.Show("Pobednik je: " + Class1.labelIme2, "Obaveštenje");
                    labelPobednik.Text = Class1.labelIme2 + " JE POBEDNIK!";
                    labelPobednik.Show();
                }
                else
                {
                    MessageBox.Show("Nerešeno je, igrate ponovo!", "Obaveštenje");
                    Class1.i1 = 0;
                    Class1.i2 = 0;
                    Class1.suma1 = 0;
                    Class1.suma2 = 0;
                    Class1.pom = false;
                    Class1.pom1 = false;
                    this.Close();
                    Form2 f2 = new Form2();
                    f2.Show();
                }
            }
        }
    }
}
namespace Kockica
{
    class Class1
    {
        private static string ime1;
        private static string ime2;

        public static int i1 = 0;
        public static int i2 = 0;

        public static int suma1 = 0;
        public static int suma2 = 0;

        public static bool pom = false;
        public static bool pom1 = false;

        public static string labelIme1 { get => ime1; set => ime1 = value; }
        public static string labelIme2 { get => ime2; set => ime2 = value; }
    }
}

1 个答案:

答案 0 :(得分:1)

我已经诊断出问题了。

问题是;当第一个玩家掷出自己的第三个骰子和最后一个骰子时,将显示消息框,显示总数。但!执行继续

        if (Class1.i1 == 3 && Class1.pom == false)
        {
            label24.Hide();
            labelIme1.Hide();
            labelZbir1.Hide();
            labelUkupno1.Hide();
            labelBacanje1.Hide();
            labelBrojBacanja1.Hide();
            labelBrojBacanja2.Show();
            labelBacanje2.Show();
            labelUkupno2.Show();
            labelZbir2.Show();
            labelIme2.Show();
            label25.Show();
            Class1.pom = true;

            // HERE, the execution continues after displaying the total of player 1.
            // Therefore, the last dice rolled by player 1 is assigned to player 2's
            // first.

            // just add return; here, and the problem will disappear.

            return; // ADD THIS HERE!
        }