2012-02-16 101 views
1

我需要在Visual Studio中随机数猜猜游戏的一些帮助。我首先解决了代码中的问题,但是我随意使用随机数字生成器并获取随机数字以移植到点击事件中。和往常一样,我并不真的需要代码,而是一些关于我在做什么错误的指导和/或解释,以及是否有一种更有效的方法来在初学阶段学习。以下是我的代码,评论是我有麻烦的部分。感谢任何帮助,因为我迄今收到的帮助是phenominal。Windows窗体应用程序 - C#随机数猜猜游戏

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace LAB6B 
{ 
    public partial class game : Form 
    { 
     public game() 
     { 
      InitializeComponent(); 

      //Generate Random number between 1 and 100 
     //Not sure if there is a better way? 
      Random rand1 = new Random(); 
      int num1 = rand1.Next(1,50); 
      int num2 = rand1.Next(1,50); 
      int answer = num1 + num2; 

     } 

     private void evaluate_Click(object sender, EventArgs e) 
     { 
      int count = 0; 
      int choice = Convert.ToInt32(guess); 


      if (guess.Text != string.Empty) 
      { 
       // set counter to keep track of how many tries 
       // should this be done by a loop or will it count without a loop? 
       count++; 

       //compare user input against random number 
      //Can’t import the random number for comparision 
       if (choice < answer) 
       { 
        Evaluate.Visible = false; 
        lblMessage.Visible = true; 
        lblMessage.Text = "Too Low!"; 
        Clear.Visible = true; 
        BackColor = Color.LightSeaGreen; 
       } 
       else if (choice > answer) 
       { 
        Evaluate.Visible = false; 
        lblMessage.Visible = true; 
        lblMessage.Text = "Too High!"; 
        Clear.Visible = true; 
        BackColor = Color.SlateBlue; 
       } 
       else 
       { 
        //Display correct message along with how many times it took to get it 
        MessageBox.Show(" Eso es CORRECTO! It took you {0} tries. ", count); 
       } 
      } 
     } 

     private void Clear_Click(object sender, EventArgs e) 
     { 
      guess.Text = ""; 
      Evaluate.Visible = true; 
      lblMessage.Visible = false; 
      Clear.Visible = false; 
      BackColor = Color.PowderBlue; 
     } 
    } 
} 

回答

2

由于rand1answer变量在构造函数中定义的,你只能访问它们的构造。在类级别可以解决大部分的问题定义answer,你将能够从构造和单击处理程序访问这两个,像这样:

private int answer; 
private int count; 

public game() 
{ 
    InitializeComponent(); 

    //Generate Random number between 1 and 100 
    Random random= new Random(); 
    // no need for num1 and num2, it's just as random 
    answer = random.Next(1,101); 
} 
+0

感谢您的快速回复。这将帮助很大,随机看起来更容易。我用过的一个例子是我找到的。我其实发现了其中三个,每个都有点不同。我认为Random()是基于时钟的,并且可以一次又一次地产生相同的结果,这就是为什么我在原始代码中尝试了这个结果的原因。 – user1174357 2012-02-16 15:34:22

1

我认为你有范围的问题。 “answer”变量在构造函数中声明,所以它不会被evaluate_Click(...)中的代码看到。

1

看起来你需要声明answer为类变量。当你在构造函数中声明一个变量时,它仍然是该方法的局部变量,而其他方法不可用。

+0

我有一个有趣的感觉,这是类似的东西,但没有肯定。感谢您的快速回复和精彩的解释。 – user1174357 2012-02-16 15:28:51

1

我真的不知道你想要什么回答,但一个明显的错误是,你必须将你的count变量定义为一个成员变量,以便跟踪尝试次数。现在,每当用户按下按钮时,count将始终初始化为零。

+0

非常感谢你,那是我正在努力的事情之一。并感谢您的解释! – user1174357 2012-02-16 15:26:49

1

首先,你需要声明的变量answer在页面级别,因此可以被其他页面级别的功能使用。

做这样的

public partial class game : Form 
    { 
     int answer; 
     public game() 
     { 
     } 
    } 
在你的柜台,你可以使用一个静态计数器或页面级别的变量也如可变 answer

只是重置计数器

当用户已经猜到了正确