2009-05-31 12 views
2

数字を推測するコードを設計しようとしています。リストボックスに表示する数値の範囲を定義しました。ランダム(1,10)を書き始めましたが、11を入力してもリストボックスに書き込まれます。私の範囲から選択した番号を1から10まで書き込むことはできますか?乱数を表示

私はここでかなり迷っています。何か案は?ここ

おかげで私のコードの一部です:

 private void btnOk_Click(object sender, EventArgs e) 
     { 

     string yourNumber; 
     yourNumber = textBox1.Text.Trim(); 

     int returnNumber = RandomNumber(1, 10);     
     int.TryParse(textBox1.Text, out returnNumber); 
     listBox1.Items.Add(returnNumber);    
     } 

========= 追加の質問 私は例1-10のためのように番号の範囲を表示したい場合は、どうすればいいのですか: たとえば、ユーザーが11を入力すると、プログラムはそれを受け入れません。

 int returnNumber = RandomNumber(1, 10);  

     string yourNumber; 
     yourNumber = textBox1.Text.Trim(); 


     if(Int32.TryParse(textBox1.Text>=1)) && (Int32.TryParse(textBox1.Text<=10)); 
     { 
     listBox1.Items.Add(yourNumber); 
     textBox1.Text = string.Empty; 
     } 

何かがプログラム

==============

こんにちは再び感謝ナサニエルためで間違っている:

私はこのような何かを作りました返信しかし、私はこれを試しました:

int returnNumber=RandomNumber(1,10); 
int counter=1; 
int yourNumber; 

Int32.TryParse(textBox1.Text.Trim(), out yourNumber); 
if (yourNumber >=1 && yourNumber <= 10) 
{ 
    listBox1.Items.Add(yourNumber); 
} 
else 
{ 
    MessageBox.Show("Please enter a number between 1-10"); 
} 

私がしたいのは、数字を推測するためのプログラムを設計することです。これが最初の部分です。再び

====

こんにちは、ここに私の最終的なコードです:あなたは、私はそれをよりよく行うことができる方法に関するフィードバックを与えることができれば、私は幸せになります。ありがとう。私は次のことは、ユーザーが入力を入力する時間を制限することだと思います。つまり、正しい数は3回または5回しか推測できません。次の行にreturnNumberは、出力変数として使用され、textBox1テキストボックスにあるものの数になりますので、

int returnNunmber = RandomNumber(1, 10); 

は何もしません:それは

namespace Guessing_Game 
    { 
    public partial class Form1 : Form 
    { 
    private static int randomNumber; 
    private const int rangeNumberMin = 1; 
    private const int rangeNumberMax = 10; 

    public Form1() 
    { 
     InitializeComponent(); 
     randomNumber = GenerateNumber(rangeNumberMin, rangeNumberMax); 
    } 


    private int GenerateNumber(int min,int max) 
    { 
     Random random = new Random(); 
     return random.Next(min, max); 
    } 

    private void btnOk_Click(object sender, EventArgs e) 
    { 
     int yourNumber = 0; 

     Int32.TryParse(textBox1.Text.Trim(), out yourNumber); 

     if (yourNumber>= rangeNumberMin && yourNumber<=rangeNumberMax) 
     { 
      listBox1.Items.Add(yourNumber); 
      if (yourNumber > randomNumber) 
      { 
       listBox2.Items.Add("No the Magic Number is lower than your number"); 
      } 

      if (yourNumber < randomNumber) 
      { 
       listBox2.Items.Add("No, the Magic Number is higher than your number"); 
      } 

      if(yourNumber==randomNumber) 
      { 
       listBox2.Items.Add("You guessed the Magic Number!"); 
       btnRestart.Enabled = true; 
      } 
     } 
     else 
     { 
      MessageBox.Show("Please enter a number between " + rangeNumberMin + " to " + rangeNumberMax); 
     } 
    } 

    private void btnRestart_Click(object sender, EventArgs e) 
    { 
     listBox2.Items.Clear(); 
     listBox1.Items.Clear(); 
     textBox1.Text = null; 
     randomNumber = GenerateNumber(rangeNumberMin, rangeNumberMax); 
     btnRestart.Enabled = false; 
    } 
} 
+1

(*また、* rangeNumberMaxを除外していることに注意してください。) –

+1

いくつかの基本的な知識が不足していると思われるので、最初にいくつかのC#チュートリアルを開始してください。 – VVS

+1

@David - 私はOPがSOを使って、1)プログラミングの基礎と2)C#の自己指向の学習を補うと思う。だから、基本的な知識が欠けていることを具体的に詳述することは、おそらく彼らをもっと助けるかもしれません。 – dss539

答えて

2

あなたのコードにいくつかのマイナーな変更、凝縮さをカウンタとして推測のリストを利用して、数行を追加して制限コードを追加することができます。

namespace Guessing_Game 
{ 
    public partial class Form1 : Form 
    { 
     private static int randomNumber; 
     private const int rangeNumberMin = 1; 
     private const int rangeNumberMax = 10; 
     private const int maxGuesses = 5; 

     public Form1() 
     { 
      InitializeComponent(); 
      randomNumber = GenerateNumber(rangeNumberMin, rangeNumberMax); 
     } 


     private int GenerateNumber(int min,int max) 
     { 
      Random random = new Random(); 
      return random.Next(min, max); 
     } 

     private void btnOk_Click(object sender, EventArgs e) 
     { 
      int yourNumber = 0; 

      if (Int32.TryParse(textBox1.Text.Trim(), out yourNumber) && 
       yourNumber>= rangeNumberMin && yourNumber<=rangeNumberMax) 
      { 

       listBox1.Items.Add(yourNumber); 

       if (yourNumber > randomNumber) 
       { 
        listBox2.Items.Add("No the Magic Number is lower than your number"); 
       } 
       else if (yourNumber < randomNumber) 
       { 
        listBox2.Items.Add("No, the Magic Number is higher than your number"); 
       } 
       else 
       { 
        listBox2.Items.Add("You guessed the Magic Number!"); 
        textBox1.Enabled = false; 
        btnOk.Enable = false; 
        btnRestart.Enabled = true; 
       } 

       //Will stop on the 5th guess, but guards the case that there were more than 5 guesses 
       if(listBox1.Items.Count >= maxGuesses && yourNumber != randomNumber) 
       { 
        listBox2.Items.Add("You are out of guesses!"); 
        textBox1.Enabled = false; 
        btnOk.Enable = false; 
        btnRestart.Enabled = true; 
       } 
      } 
      else 
      { 
       MessageBox.Show("Please enter a number between " + rangeNumberMin + " to " + rangeNumberMax); 
      } 
     } 

     private void btnRestart_Click(object sender, EventArgs e) 
     { 
      listBox2.Items.Clear(); 
      listBox1.Items.Clear(); 
      textBox1.Text = null; 
      randomNumber = GenerateNumber(rangeNumberMin, rangeNumberMax); 
      btnRestart.Enabled = false; 
      textBox1.Enabled = true; 
      btnOk.Enable = true; 

     } 
    } 
} 

最後の推測で数字が正しく推測されたときに「推測ではありません」というメッセージが表示されないように編集されています。

+0

こんにちはphsr、あなたの返信ありがとうございます。私はあなたのための質問がある、 "guessesTaken = 0;"使用しなかった場所を初期化します。これを私のコードに含めるとエラーになります – tintincutes

+0

guessesTaken = 0コードを削除してください。私が推測限界を実装することを計画していた元の方法からのデッドコードでした –

+0

ありがとうphsr、それは私がやったことです。私はすでにそれを削除しました。 制限が終了する前に正しい番号が推測されていても、私はまだ「あなたは推測ではありません」というメッセージを受け取ります。 – tintincutes

10

ラインを実装する場所がわかりません。

int.TryParse(textBox1.Text, out returnNumber); 

行を削除し、リストボックスに1から10までの乱数を追加します。

EDIT :::: してみてください、あなたは追加の質問に答えるために:

private void btnOk_Click(object sender, EventArgs e) 
    { 
    string yourNumber; 
    yourNumber = textBox1.Text.Trim(); 
    int returnNumber;  
    int.TryParse(textBox1.Text, out returnNumber); 
    if(returnNumber < 1 || returnNumber > 10) { 
     returnNumber = RandomNumber(1, 10); 
    } 
    listBox1.Items.Add(returnNumber);    
    } 
+0

こんにちはナサニエル、入力のおかげで。私は今それが動作すると思う;-) – tintincutes

+0

おっと申し訳ありませんナサニエル、私はそれが今必要なものだと思った。しかし、もう一度試してみると、数字1を入力すると乱数が表示されます。私はそれを望んでいません。私がしたいのは、ユーザーが指定した数字を表示していますが、10を超えてはいけません。 – tintincutes

2

は作品によってその部分を取ることができます:

int returnNumber = RandomNumber(1, 10); 

何の作り付けのRandomNumber機能はありません。しかし、あなたは完全にこの値を捨てる

static readonly Random rand = new Random(); 
static int Random(int min, int max) { 
    if(max < min) throw new ArgumentOutOfRangeException("max"); 
    lock(rand) { 
     return rand.Next(min, max + 1);  
    } 
} 

:範囲内の数のために、あなたのようなものが必要になりますので、Randomクラスで、終了値が排他的であることに注意し

int.TryParse(textBox1.Text, out returnNumber); 

outの使用は、前の値returnNumberが完全に無視されることを意味します。私はあなたの意図が何であるかわからないんだけど、あなただけの値をチェックするようにそれはを思わ:

if(int.TryParse(textBox1.Text, out returnNumber) 
     && returnNumber >= 1 && returnNumber <= 10) 
{ 
    listBox1.Items.Add(returnNumber); 
} 

私は最後の例を見てみましたが、それは本当に何明確ではありませんあなたがしようとしている - あなたは明確にすることができますか?


(質問編集とコメント後に編集)

あなたが失敗した試行のためにインクリメントカウンタ、必要があるだろう - のようなもの:

using System; 
using System.Drawing; 
using System.Windows.Forms; 
class MyForm : Form { 
    Button btn; 
    ListBox lst; 
    TextBox tb; 
    const int MaxTries = 3, MaxNumber = 10; 
    int targetNumber, guessCount = 0; 
    public MyForm() { 
     targetNumber = new Random().Next(1, MaxNumber + 1); 
     Text = "Guess a number"; 
     Icon = SystemIcons.Question; 
     Controls.Add(lst = new ListBox {Dock=DockStyle.Fill}); 
     Controls.Add(btn = new Button {Text="Guess",Dock=DockStyle.Top}); 
     Controls.Add(tb = new TextBox {Dock=DockStyle.Top}); 
     btn.Click += btn_Click; 
    } 

    void btn_Click(object sender, EventArgs e) { 
     int userNumber; 
     if (int.TryParse(tb.Text.Trim(), out userNumber)) { 
      if (userNumber < 1 || userNumber > MaxNumber) { 
       lst.Items.Add("Did I mention... between 1 and " + MaxNumber); 
      } else { 
       if (userNumber == targetNumber) { 
        lst.Items.Add("Well done! You guessed well"); 
        btn.Enabled = false; // all done 
       } else { 
        lst.Items.Add(targetNumber < userNumber 
         ? "Try a bit lower" : @"It is bigger than that"); 
        if (++guessCount >= MaxTries) { 
         btn.Enabled = false; 
         lst.Items.Add("Oops, should have picked more wisely"); 
        } 
       } 
      } 
     } else { 
      lst.Items.Add("Nice; now give me a number"); 
     } 
    } 
    [STAThread] 
    static void Main() { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new MyForm()); 
    } 
} 
+0

こんにちはマーク、私は上記の最終コードを掲示しました。そしてこれまでのところ、それは動作します。私はあなたにそれをより良くする方法についていくつかのインプットを与えることができれば嬉しいです。 ありがとう – tintincutes

+0

こんにちはマーク、私はここで "試行回数"を実装できるかどうかはわかりません。あなたは何か考えていますか?私は3回試してみたいと思っています。プログラムは終わったか、終わったかのように言うでしょう。 – tintincutes

+0

あなたはカウンターアップデートが必要です –