2012-02-16 11 views
1

ビジュアルスタジオの乱数推測ゲームで少し助けが必要です。私はコードの問題を解決しましたが、私は乱数ジェネレータに問題があり、乱数をクリックイベントに移植しています。いつものように、私はコードは必要ありませんが、私が間違っていることや、学習の初心者の段階で何かをするより効果的な方法があるかについての指導や説明が必要です。以下は私のコードです、コメントは私がトラブルを抱えている部分です。私は今までに幻想的であったように助けてくれて助けてくれてありがとう。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の変数はコンストラクタ内で定義されているため、コンストラクタでのみ変数にアクセスできます。

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

すぐにお返事ありがとうございます。これは大きく助けになり、乱雑に見えます。私が使ったのは私が見つけた一例でした。私は実際にそれらのうちの3つを見つけました。私はRandom()がクロックベースであるという印象を受けており、同じ結果を何度も繰り返すことができるので、元のコードで試したのです。 – user1174357

1

あなたは範囲の問題があると思います。 "answer"変数はコンストラクタ内で宣言されているため、evaluate_Click(...)内のコードには表示されません。

1

answerをクラス変数として宣言する必要があるようです。コンストラクタで変数を宣言すると、それはそのメソッドに対してローカルであり、他のメソッドでは使用できません。

+0

私は面白い感じがしました。迅速な返信と大きな説明をありがとう。 – user1174357

1

私は本当にあなたが答えたいとは思っていませんが、明白なエラーは試行回数を追跡するために変数をメンバー変数として定義する必要があるということです。今のように、countは、ユーザーがボタンを押すたびに常にゼロとして初期化されます。

+0

ありがとう、それは私が取り組んでいたものの1つでした。そして、説明に感謝します! – user1174357

1

まず、あなたがあなたの変数answerを宣言する必要があります:あなたはこのように、コンストラクタとクリックハンドラからの両方にアクセスすることができますよう、問題のほとんどを解決するクラスレベルでanswerの定義ページレベルでは他のページレベル機能でも使用できるようになりました。

は、ユーザーが正しく

を推測しているときだけカウンタをリセットまた、このような変数 answer

として、静的なカウンターまたはページレベルの変数を使用することができ、あなたのカウンターでこの

public partial class game : Form 
    { 
     int answer; 
     public game() 
     { 
     } 
    } 

のようにそれを実行します。