我正在使用Windows窗体设计一个小型游戏,其中有5个标签,每个标签设置为类似于指定图像列表中的骰子图像(1 - 6)。游戏将被“滚动”3次,在滚动结束时,您可以通过更改背景颜色来选择不要滚动的标签。在每次滚动结束时,计算并显示模具面的总和。
现在问题......
我知道我的标签可以到达图像列表,因为骰子的“滚动”功能非常有效。每个标签都设置为通过计时器刻度事件运行,该事件将发生10次,其中从图像列表中选择随机图像,从而产生滚动骰子的错觉。但是,当我希望使用imagelist索引在滚动循环结束时添加模具面的总数时,每个索引返回-1。请注意,每个模具的折射率比模具的数量少一个。同样地,如果你有一个类似于一个的骰子,它的指数将为零。我通过在索引中加1来解释这个问题。所以...虽然我可能有5,5,6,4,3 - 我的分数计数器为0,而不是23。
当最低可用索引为0时,为什么imgaelist索引的值为-1?
这是我的代码。模具面总和的实际计算在else语句中进行。在评估总和之前,我将m_iScore(得分计数器)设置为零,因为我希望总和代表EACH滚动后的面。
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。
答案 0 :(得分:1)
设置Image
属性不会更改ImageIndex
属性 - 它们或多或少完全不相关。
通常,UI应该显示程序状态,而不是 hold 它。完成所有计算,然后将计算结果推送到UI中;不要将UI元素用作变量。