指定されたイメージリストのサイコロのイメージ ( 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 を示します。