这是一种掷骰子游戏,其中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; }
}
}
答案 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!
}