2012-02-16 71 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

只是重置計數器

當用戶已經猜到了正確