C64加载屏幕思想

时间:2016-01-10 16:38:23

标签: c# loading

我已经制作了一个加载屏幕(启动画面),就像旧的C64一样。

我使用了一系列图片框,只是使用计时器和案例陈述来更改彩色图像。

switch (a)
{
    case 1: 
        pictureBox1.Image = Properties.Resources.image1;
        pictureBox8.Image = Properties.Resources.image1;
        pictureBox10.Image = Properties.Resources.image1;
        pictureBox2.Image = Properties.Resources.image1;
        pictureBox11.Image = Properties.Resources.image1;
        pictureBox9.Image = Properties.Resources.image1;
        break;
    case 2:
        pictureBox1.Image = Properties.Resources.image2;
        pictureBox8.Image = Properties.Resources.image2;
        pictureBox10.Image = Properties.Resources.image2;
        break;
    case 3:
        pictureBox1.Image = Properties.Resources.image3;
        pictureBox8.Image = Properties.Resources.image3;
        pictureBox10.Image = Properties.Resources.image3;
        break;
    case 4:
        pictureBox1.Image = Properties.Resources.image4;
        pictureBox8.Image = Properties.Resources.image4;
        break;
    case 5:
        pictureBox1.Image = Properties.Resources.image5;
        pictureBox8.Image = Properties.Resources.image5;
        break;
    case 6:
        pictureBox1.Image = Properties.Resources.image6;
        pictureBox8.Image = Properties.Resources.image6;
        break;
    case 7:
        pictureBox1.Image = Properties.Resources.image7;
        pictureBox8.Image = Properties.Resources.image7;
        break;
    case 8:
        pictureBox1.Image = Properties.Resources.image8;
        pictureBox8.Image = Properties.Resources.image8;
        break;
}

看起来有点讨厌,我怎么能改进我的代码?

2 个答案:

答案 0 :(得分:0)

您可以查看Iterator design pattern。您可以创建一个表示单个阶段的类,该类将具有每个图片框的属性,您可以将这些属性的值设置为资源文件中的相关项。

然后,为每个加载阶段创建该对象的实例,将它们放入集合中并编写迭代器以循环该集合。

答案 1 :(得分:0)

我改进了两件事:

  • 将您的图片存储在一个数组中,这样您就不必每次都重复case X/imageX

  • 首先处理常见问题,然后专注于特殊情况。

您可以将表单中的数组声明为" fake"不变,因为它不会改变:

private readonly static Image[] myImages = new[] {
    Properties.Resources.image1,
    Properties.Resources.image2,
    Properties.Resources.image3,
    Properties.Resources.image4,
    Properties.Resources.image5,
    Properties.Resources.image6,
    Properties.Resources.image7,
    Properties.Resources.image8
}

然后在Timer hander中使用以下代码:

Image image = myImages[a-1];

pictureBox1.Image = image;
pictureBox8.Image = image;

// special cases
if (a == 1)
{
    pictureBox2.Image = image;
    pictureBox11.Image = image;
    pictureBox9.Image = image;
}
if (a >= 1 && a <= 3)
{
    pictureBox10.Image = image;
}