繁体   English   中英

为用户输入C#创建计数器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM