[英]Creating a Counter for user input C#
大家好,我需要一些帮助,请根据他们输入猜测值以猜测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";
}
}
}
不可能那么明显。 为什么要在btnCheck_Click中设置intguessCount = 0? 您为什么不保留全球柜台?
代码的问题在于,每次单击btnCheck
时,您btnCheck
猜测计数器设置为零。 您需要确保每个猜测会话仅重置一次。
因此,这意味着您需要将guessCount
作为类级变量移出,并确保仅在第一次运行表单时btnReset
单击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);
}
}
您还会注意到,每次单击btnCheck
时都在重置target
。 也需要将其移至类级变量。
将Random
的实例设置为类级变量也是一种好习惯,因为在某些情况下,如果不这样做,最终可能会得到少于随机数的结果。
您会注意到,我将所有重置代码移到了一个新的ResetData
方法中,该方法在加载表单和单击btnReset
时都可以调用。
为了使它成为全局的,取出int guessCount = 0;
从btnCheck_Click
函数,并将其放在显示的顶部,如下所示:
namespace GuessingGameGUI
{
public partial class frmGuess : Form
{
int guessCount = 0;
这样,每次您按btnCheck
按钮时, guessCount
将不会连续重置为零,然后会递增。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.