2013-03-13 90 views
0

我正在设计一个使用Windows窗体的小游戏,其中有5个标签,每个标签都与指定图像列表中的骰子图像(1 - 6)相似。该游戏被“滚动”3次,在滚动结束时,您可以选择不通过更改其背景颜色进行滚动的标签。在每次滚动结束时,计算并显示模具面的总和。Imagelist总是返回-1

现在的问题...

我知道我的标签可以达到图像列表为骰子的“滚动”功能,效果非常好。每个标签被设置为通过计时器滴答事件运行,该事件将发生10次,其中从图像列表中选择随机图像,产生滚动骰子的幻觉。但是,当我希望在滚动周期结束时使用图像列表索引添加模具面的总数时,每个索引都会返回-1。需要注意的是,每个骰子的指数比骰子的数量少一个。同样,如果你有一个类似于一个的死亡,它的索引将为零。我通过在索引中加1来解释这一点。所以...虽然我可能有一个5,5,6,4,3 - 我的得分计数器为0,而不是说23.

为什么当imgaelist指数给出值-1时,最低可用索引是0?

这是我的代码。在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。

回答

1

设置Image属性不会更改ImageIndex属性 - 它们或多或少完全不相关。

一般来说,UI应该显示程序状态,而不是保存它。做所有的计算,然后将计算结果推入UI;不要将UI元素用作变量。