0

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

现在的问题...

我知道我的标签可以到达图像列表,因为骰子的“滚动”功能效果很好。每个标签都设置为通过一个计时器滴答事件运行,该事件将发生 10 次,其中从图像列表中选择随机图像,从而产生掷骰子的错觉。但是,当我希望使用 imagelist 索引在滚动循环结束时添加模具面的总数时,每个索引都返回 -1。请注意,每个相应骰子的索引比骰子的数量小一。同样,如果您有一个类似 1 的骰子,它的索引将为零。我通过在索引中加 1 来说明这一点。所以......虽然我可能有一个 5,5,6,4,3 - 我的分数计数器等于 0,而不是说 23。

当最低可用索引为 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 回答