嘿,伙计们,我需要帮助创建一个计数器,用于用户输入,根据他们输入猜测的时间从1-100猜出一个随机数。到目前为止,这是我所拥有的,但它只输出1计数,不计算下一个输入。你能告诉我我做错了什么吗?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GuessingGameGUI
{
public partial class frmGuess : Form
{
public frmGuess()
{
InitializeComponent();
}
private void frmGuess_Load(object sender, EventArgs e)
{
lblCount.Visible = true;
lblHowMuch.Visible = true;
}
private void btnReset_Click(object sender, EventArgs e)
{
txtGuess.Text = "";
lblCount.Text = "";
lblHowMuch.Text = "";
this.BackColor = System.Drawing.Color.Empty;
txtGuess.Focus();
}
private void btnCheck_Click(object sender, EventArgs e)
{
Random r = new Random();
int target = r.Next(0, 101);
int userGuess = int.Parse(txtGuess.Text);
int guessCount = 0;
if (userGuess == target)
{
guessCount++;
this.BackColor = System.Drawing.Color.DarkOliveGreen;
lblHowMuch.Text = "You guess the right number " + "it took you: " + guessCount.ToString() + " guesses";
}
else if (userGuess < target)
{
guessCount++;
this.BackColor = System.Drawing.Color.Yellow;
}
else if (userGuess > target)
{
guessCount++;
this.BackColor = System.Drawing.Color.Red;
}
lblCount.Text = "You made: " + guessCount.ToString() + " Guesses";
}
}
}
发布于 2015-04-23 21:32:11
代码的问题是,每次单击btnCheck
时,都会将猜测计数器设置为零。您需要确保每次猜测会话只重置一次。
因此,这意味着您需要将guessCount
作为类级变量移出,并确保只在窗体的第一次运行和单击btnReset
时重置它。
下面是我如何重构您的代码以实现这一点:
public partial class frmGuess : Form
{
public frmGuess()
{
InitializeComponent();
}
private void frmGuess_Load(object sender, EventArgs e)
{
lblCount.Visible = true;
lblHowMuch.Visible = true;
ResetData();
}
private void btnReset_Click(object sender, EventArgs e)
{
ResetData();
}
private Random r = new Random();
private int guessCount;
private int target;
private void ResetData()
{
guessCount = 0;
target = r.Next(0, 101);
txtGuess.Text = "";
lblCount.Text = "";
lblHowMuch.Text = "";
this.BackColor = System.Drawing.Color.Empty;
txtGuess.Focus();
}
private void btnCheck_Click(object sender, EventArgs e)
{
int userGuess = int.Parse(txtGuess.Text);
guessCount++;
if (userGuess == target)
{
this.BackColor = System.Drawing.Color.DarkOliveGreen;
lblHowMuch.Text = String.Format(
"You guessed the right number it took you {0} guesses",
guessCount);
}
else
{
this.BackColor = userGuess < target
? System.Drawing.Color.Yellow
: System.Drawing.Color.Red;
}
lblCount.Text = String.Format(
"You made {0} Guesses",
guessCount);
}
}
您还会注意到,每次单击target
时都会重置btnCheck
。这也需要移到类级变量中。
将Random
的实例作为类级变量也是一个很好的习惯,因为在某些情况下,如果不这样做,您可能会得到少于随机数的结果。
您将注意到,我将所有重置代码移动到一个新的ResetData
方法中,该方法可以在加载表单和单击btnReset
时调用。
发布于 2015-04-23 21:11:13
不可能这么明显。为什么在guessCount中设置int btnCheck_Click =0?你为什么不开个全球柜台呢?
发布于 2015-04-23 21:29:29
要使其具有全局性,从int guessCount = 0;
函数中取出btnCheck_Click
,并将其放在顶部:
namespace GuessingGameGUI
{
public partial class frmGuess : Form
{
int guessCount = 0;
这样,guessCount
就不会不断地被重置为零,然后每次按btnCheck
按钮时都会增加。
https://stackoverflow.com/questions/29839119
复制相似问题