0

指定されたイメージリストのサイコロのイメージ ( 1 - 6 ) に似た 5 つのラベルが設定された Windows フォームを使用して、小さなゲームを設計しています。ゲームは 3 回「ロール」するように作られています。ロールの最後に、背景色を変更してロールしないラベルを選択できます。各ロールの終わりに、サイコロの面の合計が計算されて表示されます。

さて、問題は...

サイコロの「ローリング」機能が非常にうまく機能するため、ラベルがイメージリストに到達できることはわかっています。各ラベルは、画像リストからランダムな画像が選択される 10 回発生するタイマー ティック イベントを実行するように設定されており、サイコロが転がっているような錯覚を生み出します。ただし、イメージリスト インデックスを使用してローリング サイクルの最後にダイス面の合計を加算したい場合、各インデックスは -1 を返します。それぞれのサイコロのインデックスは、サイコロの量より 1 少ないことに注意してください。同様に、1 に似たサイコロがある場合、そのインデックスは 0 になります。インデックスに 1 を追加することで、これを説明します。つまり... 5、5、6、4、3 だったとしても、私のスコア カウンターは 23 ではなく 0 になります。

使用可能な最小インデックスが 0 の場合、imgaelist インデックスの値が -1 になるのはなぜですか?

これが私のコードです。ダイ面の合計の実際の計算は、else ステートメントで行われます。合計を評価する前に、m_iScore (スコア カウンター) をゼロに設定します。これは、各ロールの後に合計を顔の代表にしたいからです。

private void timer1_Tick(object sender, EventArgs e)
        {
            Label[] labelArray = new Label[] { label1, label2, label3, label4, label5 };
            Random randnum = new Random();
            if (m_iAnimations < 10)
            {
                for (int iCount = 0; iCount < labelArray.Length; iCount++)
                {
                    if ((labelArray[iCount]).BackColor == Color.Lime)
                    {
                        (labelArray[iCount]).Image = imageList1.Images[randnum.Next(0, 6)];
                    }
                }
                m_iAnimations++;
            }
            else
            {
                timer1.Enabled = false;
                m_iAnimations = 0;
                m_iScore = 0;
                for (int iCount = 0; iCount < labelArray.Length; iCount++)
                {
                    m_iScore = m_iScore + ((labelArray[iCount]).ImageIndex + 1);
                }
                scoreval.Text = m_iScore.ToString();
            }

        }

画像インデックスに 1 を追加しないと、scoreval.Text は -5 を示します。

4

1 に答える 1

1

プロパティを設定してもImageプロパティは変更されませんImageIndex。それらは多かれ少なかれ完全に無関係です。

一般に、UIはプログラムの状態を保持するのではなく、表示する必要があります。すべての計算を実行してから、その計算結果をUIにプッシュします。UI要素を変数であるかのように使用しないでください。

于 2013-03-13T17:47:10.000 に答える