2015-10-07 37 views
1

嗨,所以我是新來編程我剛剛開始上學,我想要在編程中得到一個開始,所以請記住,我告訴你的一切都是自學,授課。這是我的問題,我想做一個隨機數猜測遊戲,並在大多數情況下,它的工作原理,但每次你點擊按鈕猜測它隨機一個不同的數字,我不想在這裏是我到目前爲止新編程嘗試在C編號猜謎遊戲#

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    // number of guesses 
    int numberOfGesses = 0; 

    private void btnCalc_Click(object sender, EventArgs e) 
    { 
     // make the generator 
     Random generator = new Random(); 

     //make the number 
     int number = generator.Next(1, 10); 


     // get the users guess 
     int guess = int.Parse(txtInput.Text); 

     //check the users guess 
     if (guess == number) 
     { 
      lblAnswer.Text = "You got it"; 
      numberOfGesses = 0; 
     } 
     else if (guess != number) 
     { 
      numberOfGesses = numberOfGesses + 1; 
      lblAnswer.Text = "try agian you have gessed" + (numberOfGesses) + " times"; 
     } 

    } 


} 

我知道它不斷創建一個新號碼,因爲每次我按下猜測按鈕時,它會從頂部開始,並創建一個新號碼。我想借此塊,使之全球化,但我得到一個錯誤

// make the generator 
     Random generator = new Random(); 

     //make the number 
     int number = generator.Next(1, 10); 

再次IM真的新lookinging一些qeustions我已經,所以我認爲這將是一個好地方,以幫助我,當我發現這個網站了解編程,而我等待,直到我可以進入編程類感謝您的時間。

+1

你得到了什麼錯誤? –

+0

字段初始值設定項不能引用非靜態字段方法或屬性Form1.generator –

+0

看看[猜測遊戲](http://stackoverflow.com/q/32707303/3796048)希望這會給你的想法。 –

回答

1

您可能會遇到錯誤,因爲C#不允許您根據另一個字段指定字段的默認值。

public partial class Form1 : Form { 
    int numberOfGuess = 0; 
    Random generator = new Random(); 
    int number; 

    // other methods 
} 

generator之前或之後number被初始化,因此錯誤。相反,你可以把它的形式初始化器(Form1法),或進行另一個按鈕,點擊它,並生成一個新的隨機數:

public partial class Form1 : Form 
{ 
    // number of guesses 
    int numberOfGesses = 0; 
    Random generator = new Random(); 
    int number; 

    public Form1() 
    { 
     InitializeComponent(); 

     // Generate the random number 
     number = generator.Next(1, 10); 
    } 

    private void btnRandom_Click(object sender, EventArgs e) 
    { 
     // Generate a new random number when you click a button on the form 
     number = generator.Next(1, 10); 
    } 

    private void btnCalc_Click(object sender, EventArgs e) 
    { 
     // get the users guess 
     int guess = int.Parse(txtInput.Text); 

     //check the users guess 
     if (guess == number) 
     { 
      lblAnswer.Text = "You got it"; 
      numberOfGesses = 0; 
     } 
     else if (guess != number) 
     { 
      numberOfGesses = numberOfGesses + 1; 
      lblAnswer.Text = "try agian you have gessed" + (numberOfGesses) + " times"; 
     } 
    } 
} 
+1

憤怒的選民可以解釋爲什麼? –

+0

我沒有downvoted,但我喜歡你的評論。 –

+0

這工作我只是想確保我明白這是否初始化組件塊只是程序在啓動用戶界面之前做的事情? –

0

不能使用實例變量初始化另一個實例變量。 爲什麼?因爲編譯器可以重新排列這些 - 不能保證生成器會在數字之前初始化,所以上面的行可能會拋出一個NullReferenceException。 所以默認數值更改爲0:

Random generator = new Random(); 
int number = 0; 

初始化在構造函數中:

public Form1() 
    { 
     InitializeComponent(); 
     number = generator.Next(1, 10); 
    } 

當按鈕被點擊產生的數量,因爲在這裏你會需要它:

private void btnCalc_Click(object sender, EventArgs e) 
    { 
       //take the input & Compare as before. 
    } 
+0

這是否給OP帶來了同樣的問題?他希望*避免*每次單擊按鈕時生成一個新的數字 –

+0

對不起,如果這是一個基本問題,但是又是什麼構造函數,如果你能解釋它是什麼,這將有助於thx –

+0

@MatthewSchutten Form1( )是構造函數。 –