我正在制作摇滚,纸张,剪刀游戏,当我实际运行该程序时,我遇到了麻烦。我没有在代码中出现错误但是当我运行程序时,消息框(我如何显示谁赢,输,领带)已经弹出,然后用户可以选择他们的选项并点击提交按钮。我试过移动我的方法,但这也没有帮助。我不知道还能做什么。
private int choice(int min,int max)
{
Random ran = new Random();
return ran.Next(min,max);
}
private void button1_Click(object sender, EventArgs e)
{
int number = choice(1, 3);
if (number == 1)
{
textBox1.Text = number.ToString("Rock");
}
else if (number == 2)
{
textBox1.Text = number.ToString("Paper");
}
else if (number == 3)
{
textBox1.Text = number.ToString("Scissors");
}
else
{
MessageBox.Show("The T-Rex broke.Sorry");
}
}
private void rockRadioButton_CheckedChanged(object sender, EventArgs e)
{
int number = choice(1, 3);
if (number == 3)
{
MessageBox.Show("Rock beats Scissors. You win!");
}
else if (number == 2)
{
MessageBox.Show("Paper beats Rock.You lose!");
}
else if (number == 1)
{
MessageBox.Show("Rock vs Rock. Tie!");
}
else{
MessageBox.Show("T-Rex is off hunting.Come back later.");
}
}
private void paperRadioButton_CheckedChanged(object sender, EventArgs e)
{
int number = choice(1, 3);
if (number == 3)
{
MessageBox.Show("Scissors beats Paper.You lose!");
}
else if (number == 2)
{
MessageBox.Show("Paper vs Paper.Tie!");
}
else if (number == 1)
{
MessageBox.Show("Paper beats Rock.You win!");
}
else
{
MessageBox.Show("T-Rex is off hunting. Come back later.");
}
}
private void scissorsRadioButton_CheckedChanged(object sender, EventArgs e)
{
int number = choice(1, 3);
if (number == 3)
{
MessageBox.Show("Scissors vs Scissors.Tie!");
}
else if (number == 2)
{
MessageBox.Show("Scissors beats Paper.You win!");
}
else if (number == 1)
{
MessageBox.Show("Rock beats Scissors.You lose!");
}
else
{
MessageBox.Show("T-Rex is off hunting.Come back later.");
}
}
}
}
答案 0 :(得分:1)
我完全不知道你是如何设计游戏的,但是,从我所看到的,每当你选择一个新的单选按钮时,你的程序实际上会决定游戏的结果,这不是你想要什么。
所以你可能希望在各种MessageBox.Show();
方法中推迟CheckedChanged
。让我们保持非常简单,只需使用enum
来保持您选择的状态。
public enum Move
{
Rock,
Paper,
Scissors
}
private Move CurrentlySelectedMove = Move.Paper;
如果您不了解枚举,I suggest you check them out, as they are very useful。有了这个帮助我们,你可以通过单选按钮选择一个新的移动保存。
关于这个话题,如果我没有弄错的话,你当前正在收听单选按钮上的checkedChange
事件,这不是很好,因为正在选择的按钮 AND 未被选中的那个将触发事件,这有点打破了选择移动的逻辑。因此,您应该检查是否检查了状态刚刚更改的按钮。你可以这样做:
private void rockRadioButton_CheckedChanged(object sender, EventArgs e)
{
if (rockRadioButton.Checked)
{
CurrentlySelectedMove = Move.Rock;
}
}
在这里,我们检查是否选中了这个单选按钮。如果是这样,我们将选定的移动设置为用户选择的移动。
现在,当玩家点击按钮时,我们需要做的就是从对手产生一个随机移动并根据我们当前选择的移动进行检查,如下所示:
private void button1_Click(object sender, EventArgs e)
{
int number = int number = choice(0, 2);
Move opponentMove = (Move) number;
if (CurrentlySelectedMove == opponentMove)
{
MessageBox.Show("Draw !");
}
else if ((CurrentlySelectedMove == Move.Rock && opponentMove == Move.Paper) ||
(CurrentlySelectedMove == Move.Paper && opponentMove == Move.Scissors) ||
(CurrentlySelectedMove == Move.Scissors && opponentMove == Move.Rock))
{
MessageBox.Show("You loose !");
}
else
{
MessageBox.Show("You win !");
}
}
关于枚举的有趣之处在于它们实际上只是伪装成整数,这意味着您可以轻松地从一个数字变为enum
,正如您所看到的那样Move opponentMove = (Move) number;
大约有十亿件事要做得更好(我想我们会在另一个时间里继续关于Binding的教训),但我建议你试着理解这一点并亲自尝试一下。
答案 1 :(得分:0)
使用当前设置,每次radiobutton选择更改时,计算机卷都会运行。将您在fooRadioButton_CheckedChanged方法中的代码移动到button1_Click消息,并在单选按钮选择更改时更新textbox1.Text。
private int choice(int min,int max)
{
Random ran = new Random();
return ran.Next(min,max);
}
private void button1_Click(object sender, EventArgs e)
{
int number = choice(1, 3);
if (number == 1)
{
//Computer selects rock
if (rockRadioButton.IsChecked==true)
{
MessageBox.Show("Rock vs Rock. Tie!");
}
else if(paperRadioButton.IsChecked==true)
{
MessageBox.Show("Paper vs Rock. You win!");
}
else if(scissorsRadioButton.IsChecked==true)
{
MessageBox.Show("Scissors vs Rock. You lose!");
}
}
else if (number == 2)
{
//Computer selects Paper
if (rockRadioButton.IsChecked == true)
{
MessageBox.Show("Rock vs Paper. You lose!");
}
else if (paperRadioButton.IsChecked == true)
{
MessageBox.Show("Paper vs Paper. Tie!");
}
else if (scissorsRadioButton.IsChecked == true)
{
MessageBox.Show("Scissors vs Paper. You win!");
}
}
else if (number == 3)
{
//Computer selects Scissors
if (rockRadioButton.IsChecked == true)
{
MessageBox.Show("Rock vs Scissors. You win!");
}
else if (paperRadioButton.IsChecked == true)
{
MessageBox.Show("Paper vs Scissors. You lose!");
}
else if (scissorsRadioButton.IsChecked == true)
{
MessageBox.Show("Scissors vs Scissors. Tie!");
}
}
else
{
MessageBox.Show("The T-Rex broke.Sorry");
}
}
private void rockRadioButton_CheckedChanged(object sender, EventArgs e)
{
textBox1.Text = "Rock";
}
private void paperRadioButton_CheckedChanged(object sender, EventArgs e)
{
textBox1.Text = "Paper";
}
private void scissorsRadioButton_CheckedChanged(object sender, EventArgs e)
{
textBox1.Text = "Scissors";
}