2016-05-05 26 views
-1

私はチュートリアルの質問で多くの問題を抱えていますが、私はC#の初心者であるので少しのガイダンスを得ることを望んでいましたが、それほど良くはありません。C#サイコロゲーム(Windowsアプリケーションフォーム)複数の問題

シナリオは次のとおりです。 2回のサイコロの回転を1000回シミュレートするプログラムを作成します。プログラムは、ダブル6の数をカウントし、1000のダイスロールの平均スコアを出力する必要があります。 1000ロールごとの結果を表示する必要はなく、100ロールごとに「シミュレーション実行」ボタンを1回押すだけで済みます。ボタンと出力には適切なラベルを付ける必要があります。

このシナリオでは1000回回転すると言われていますが、現時点では2回回転していますが、現在は10回回転しています。ここで私はこれまでに書いたコードです:シナリオで

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

      namespace Dice_Roll_2___Advanced 
      { 
       public partial class Form1 : Form 
       { 
        int roll; 


        int countDouble; 
        int countRoll; 

        int count; 
        int count2; 

        int average; 
        int doubleSix; 


        public Form1() 
        { 
         InitializeComponent(); 
        } 

        private void Dice_Roll_Click(object sender, EventArgs e) 
        { 
         Random rnd = new Random(); 
         for(count = 0; count <1; count++) 
         { 
          for(count2 = 0; count2 < 10; count2++) 
          { 
           roll = rnd.Next (6) + 1; 
           MessageBox.Show(roll.ToString()); 
           if(roll < 6) 
           { 
            countRoll++; 
           } 
           else if(roll == 6) 
           { 
            countDouble++; 
           } 

          } 
         } 





        } 

        private void Average_Click(object sender, EventArgs e) 
        { 
         average = (countRoll/10); 
         Average.Text = average.ToString(); 
        } 

        private void Doubles_Click(object sender, EventArgs e) 
        { 
         doubleSix = countDouble; 
         Doubles.Text = doubleSix.ToString(); 

        } 

発行No.1の

、それは私が一度に出力するように100の番号を持っていると言います。現時点では10人しかいないので、10人をまとめて出力したいと考えています。現在、それは起こっていません。それは私に1つの番号を与え、私は次にOkをクリックし、それは私に次の番号を与えます。コード内のこの行は問題だとは思いますが、それを修正する方法は不明です。

MessageBox.Show(roll.ToString());

号2号

は平均がまったく動作しない、それは私に毎回0の値を与えます。書いた場合は私のコードでは、表示されます。

       if(roll < 6) 
           { 
            countRoll++; 
           } 
           else if(roll == 6) 
           { 
            countDouble++; 
           } 

は、ラベルに私が情報を送りたい: 平均=(/ 10 countRoll)。 Average.Text = average.ToString();

私はそれが多くの情報を知っていますが、どんな助けも大歓迎です。

+1

平均=合計/カウント。あなたはロールの合計をカウントしていませんが、ランの数を10でダイビングします。ランの数は決して10を越えないので(0から9です)、9/10 = 0で終わります(なぜそれについて考えますか?あなたがすべきことは、Sum = Sum + Rollです。 avg = sum/10 –

+0

ですから、sum = sum + rollと入力しました。平均=合計/ 10 Average.Text = average.ToString();プログラムを実行すると、それでも私に値0が与えられます。なぜどんなアイデア? –

+0

私は今、平均を表示して問題を並べ替えることができました。 –

答えて

0

アドバイスのいくつかの作品:

  • あなたは一度だけ実行され、外側のループを取り除くことができます。これは不要です(内部ループは少なくとも1回は実行されます)。
  • 通常、Randomオブジェクトの宣言は、ボタンのClickイベントハンドラではなく、クラスレベルで行われます。この方法で考えてみましょう。今のコードと同じように、ユーザーがDice_Rollボタンを押すたびにコンピュータはRandomオブジェクトを再作成する必要があります。これはシステムリソースの無駄です。
  • ロールを1つのメッセージボックスに表示する場合は、ロールをどこかに保存する必要があります(int[]またはList<int>など)。次に、ロールを実行するループの外側で、表示したいメッセージを構築する別のループを作成します。
  • 各ダイは一度ロールする必要があります。あなたの現在のコードでは、あなたは1つのダイスを転がしているだけです(そしてそのダイスが6だった場合のみチェックします)。
  • 10「マジックナンバー」を定数(private const int numRolls = 10;のようなもの)に変えてください。
  • average = (countRoll/10);は意味がありません。ロール数を10で割っています(ここでは...はロール数です)。平均的には、各ロールを追加して合計を取得し、次にロール数で割ります。
  • ifのステートメントにも微調整が必​​要です。現在のところロールは< 6の場合にのみカウントされ、6のロールはカウントされません。平均から外れることになります(必要な動作ではない可能性があります)。 countRollは、ロールの値に関係なくロールが作成されるたびに増分する必要があります。

残念ながら、これは私が提供するすべてのフィードバックです。私はあなたのコードを切り離そうとしているように感じないでください。ちょっとしたことを指摘したいと思います。

幸運のベスト。

+0

いいえ、それはすべていいです。これはC#をやる2日目なので、私は間違いがたくさんあると知っています。私は過去にC++をやったことがありましたが、私はそれでも最善ではありませんでした。明日あなたの提案を見ていきます。もしそれが問題であれば、私はそれ以上の問題があればあなたに戻ってきます。 –

+0

絶対に。運が良かった。 –

関連する問題