如何在Windows窗体上填充一次数组?

时间:2013-05-14 14:21:25

标签: c# arrays winforms methods random

我创建了一个表单,要求用户猜出数字。我创建了一个100个整数的数组,创建了一个方法来获取随机数来填充数组。一切正常,但是我需要创建另一个方法,一旦做出100个猜测就将数组重置为0,这似乎让我继续进行当前的设置。如何确保我的阵列正在填满而不只是每按一次按钮重新启动,那么我该如何重置它?再次,这很好,只是不满足我的所有要求。

以下是我的数组和方法中的代码以及我在以下位置调用它的位置:

int[] rndArray = new int[100];
    int wrong = 1;
    int right = 1;


    public void getNumbers()
    {
        Random random = new Random();
        for (int x = 0; x < rndArray.Length; x++)
        {
            rndArray[x] = random.Next(1, 100); 
        }

    }

    public Form1()
    {
        getNumbers();
        InitializeComponent();
    }

然后我有两个按钮,看看猜测是否正确并让他们再次猜测。

   private void Guess_Click(object sender, EventArgs e)
    {
        bool num = true;
        for (int x = 0; x < rndArray.Length; x++)
        {
                if (Convert.ToInt32(textBox1.Text) == rndArray[x])
                { 
                    result.Text = "You Win!";
                    num = true;
                }
                else
                { 
                    result.Text = "Sorry - you loose; the number is: " + rndArray[x];
                    num = false;
                }
        }
        if (num == true)
            correct.Text = "Correct: " + right++;
        else
            incorrect.Text = "Incorrect: " + wrong++;

        mouseHere.Enabled = false;
        Guess.Enabled = false;
        nextGuess.Enabled = true;
    }

    private void nextGuess_Click(object sender, EventArgs e)
    {
        mouseHere.Enabled = true;
        Guess.Enabled = true;
        nextGuess.Enabled = false;
        hint.Text = "??";
        textBox1.Text = "";
        result.Text = "";
        getNumbers();

    } 

我再次调用了该方法,因此不会为每次猜测生成相同的数字。

2 个答案:

答案 0 :(得分:2)

为什么不在第100次猜测时创建GuessingGame类并引发事件?您可以重置阵列和猜测计数器。

类似的东西:

public class GuessingGame {
   private int[] RandomNumbers; 
   private GuessCount = 0;

   // constructor
   public GuessingGame () {
       this.guessCount = 0;
       this.randomNumbers = this.RandomNumberGenerator();
   }

   public void AddGuess(int guess) {
      // increment guessCount
      // check for a winner and/or 100th guess
      // raise a correct guess event if correct
      // raise 100th guess event if 100th guess occurs
   }

   private int[] RandomNumberGenerator() {
      // return your array of random numbers
   }

   ...more stuff...
}

您需要声明几个简单的事件处理程序类来执行您需要它们执行的操作,然后从GuessingGame类中触发它们。这对你来说代码有点多,所以我会让你自己做。这应该让你从正确的OO方向开始。

http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx。这是一个非常有用的事件教程。

答案 1 :(得分:1)

你需要的只是一个柜台:

    int count = 0;
    private void Guess_Click(object sender, EventArgs e)
    {
        if (count < 100)
        {
            count++;
            // checks user input ...
        }
        else
        {
            count = 0;
            // reset the array by getting fresh numbers
            getNumbers();
        }
    }

您还可以在循环中重置数组并将其成员的值设置为0