I have made a loading screen (splash screen) just like the old C64. I have used a series of picture boxes and just change the coloured image using a timer and a case statement.
namespace c64
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Start();
timer2.Start();
timer3.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
Random rnd = new Random();
int a = rnd.Next(1,8);
int b = rnd.Next(1,8);
int c = rnd.Next(1,8);
int d= rnd.Next(1,8);
int n= rnd.Next(1,8);
int f= rnd.Next(1,8);
int g= rnd.Next(1,8);
int h = rnd.Next(1, 8);
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;
}
switch (b)
{
case 1:
pictureBox2.Image = Properties.Resources.image1;
pictureBox11.Image = Properties.Resources.image1;
pictureBox9.Image = Properties.Resources.image1;
break;
case 2:
pictureBox2.Image = Properties.Resources.image2;
pictureBox9.Image = Properties.Resources.image2;
break;
case 3:
pictureBox2.Image = Properties.Resources.image3;
pictureBox11.Image = Properties.Resources.image3;
pictureBox9.Image = Properties.Resources.image3;
pictureBox18.Image = Properties.Resources.image3;
pictureBox18.Image = Properties.Resources.image4;
break;
case 4:
pictureBox2.Image = Properties.Resources.image4;
pictureBox9.Image = Properties.Resources.image4;
break;
case 5:
pictureBox2.Image = Properties.Resources.image5;
pictureBox9.Image = Properties.Resources.image5;
break;
case 6:
pictureBox2.Image = Properties.Resources.image6;
pictureBox9.Image = Properties.Resources.image6;
pictureBox12.Image = Properties.Resources.image6;
break;
case 7:
pictureBox2.Image = Properties.Resources.image7;
pictureBox9.Image = Properties.Resources.image7;
break;
case 8:
pictureBox2.Image = Properties.Resources.image8;
pictureBox9.Image = Properties.Resources.image8;
break;
}
switch (c)
{
case 1:
pictureBox3.Image = Properties.Resources.image1;
pictureBox13.Image = Properties.Resources.image1;
break;
case 2:
pictureBox3.Image = Properties.Resources.image2;
pictureBox13.Image = Properties.Resources.image2;
break;
case 3:
pictureBox3.Image = Properties.Resources.image3;
break;
case 4:
pictureBox3.Image = Properties.Resources.image4;
pictureBox1.Image = Properties.Resources.image2;
pictureBox8.Image = Properties.Resources.image2;
pictureBox10.Image = Properties.Resources.image2;
break;
case 5:
pictureBox3.Image = Properties.Resources.image5;
pictureBox18.Image = Properties.Resources.image1;
pictureBox18.Image = Properties.Resources.image1;
pictureBox17.Image = Properties.Resources.image2;
break;
case 6:
pictureBox3.Image = Properties.Resources.image6;
break;
case 7:
pictureBox3.Image = Properties.Resources.image7;
break;
case 8:
pictureBox3.Image = Properties.Resources.image8;
break;
}
switch (d)
{
case 1:
pictureBox4.Image = Properties.Resources.image1;
pictureBox14.Image = Properties.Resources.image1;
pictureBox17.Image = Properties.Resources.image2;
pictureBox8.Image = Properties.Resources.image2;
pictureBox10.Image = Properties.Resources.image2;
break;
case 2:
pictureBox4.Image = Properties.Resources.image2;
pictureBox18.Image = Properties.Resources.image2;
pictureBox18.Image = Properties.Resources.image3;
break;
case 3:
pictureBox4.Image = Properties.Resources.image3;
pictureBox17.Image = Properties.Resources.image5;
pictureBox18.Image = Properties.Resources.image8;
pictureBox18.Image = Properties.Resources.image7;
break;
case 4:
pictureBox4.Image = Properties.Resources.image4;
break;
case 5:
pictureBox4.Image = Properties.Resources.image5;
pictureBox14.Image = Properties.Resources.image5;
break;
case 6:
pictureBox4.Image = Properties.Resources.image6;
pictureBox17.Image = Properties.Resources.image7;
break;
case 7:
pictureBox4.Image = Properties.Resources.image7;
break;
case 8:
pictureBox4.Image = Properties.Resources.image8;
break;
}
switch (n)
{
case 1:
pictureBox5.Image = Properties.Resources.image1;
pictureBox15.Image = Properties.Resources.image5;
break;
case 2:
pictureBox5.Image = Properties.Resources.image2;
break;
case 3:
pictureBox5.Image = Properties.Resources.image3;
pictureBox15.Image = Properties.Resources.image3;
break;
case 4:
pictureBox5.Image = Properties.Resources.image4;
break;
case 5:
pictureBox5.Image = Properties.Resources.image5;
break;
case 6:
pictureBox5.Image = Properties.Resources.image6;
break;
case 7:
pictureBox5.Image = Properties.Resources.image7;
break;
case 8:
pictureBox5.Image = Properties.Resources.image8;
break;
}
switch (f)
{
case 1:
pictureBox5.Image = Properties.Resources.image1;
pictureBox16.Image = Properties.Resources.image3;
break;
case 2:
pictureBox5.Image = Properties.Resources.image2;
break;
case 3:
pictureBox5.Image = Properties.Resources.image3;
break;
case 4:
pictureBox5.Image = Properties.Resources.image4;
break;
case 5:
pictureBox5.Image = Properties.Resources.image5;
break;
case 6:
pictureBox5.Image = Properties.Resources.image6;
break;
case 7:
pictureBox5.Image = Properties.Resources.image7;
break;
case 8:
pictureBox5.Image = Properties.Resources.image8;
break;
}
switch (g)
{
case 1:
pictureBox6.Image = Properties.Resources.image1;
break;
case 2:
pictureBox6.Image = Properties.Resources.image2;
break;
case 3:
pictureBox6.Image = Properties.Resources.image3;
break;
case 4:
pictureBox6.Image = Properties.Resources.image4;
break;
case 5:
pictureBox6.Image = Properties.Resources.image5;
break;
case 6:
pictureBox6.Image = Properties.Resources.image6;
break;
case 7:
pictureBox6.Image = Properties.Resources.image7;
break;
case 8:
pictureBox6.Image = Properties.Resources.image8;
break;
}
switch (h)
{
case 1:
pictureBox7.Image = Properties.Resources.image1;
break;
case 2:
pictureBox7.Image = Properties.Resources.image2;
break;
case 3:
pictureBox7.Image = Properties.Resources.image3;
break;
case 4:
pictureBox7.Image = Properties.Resources.image4;
break;
case 5:
pictureBox7.Image = Properties.Resources.image5;
break;
case 6:
pictureBox7.Image = Properties.Resources.image6;
break;
case 7:
pictureBox7.Image = Properties.Resources.image7;
break;
case 8:
pictureBox7.Image = Properties.Resources.image8;
break;
}
}
private void timer2_Tick(object sender, EventArgs e)
{
pictureBox21.Visible = true;
}
private void timer3_Tick(object sender, EventArgs e)
{
pictureBox21.Visible = false;
}
}
}
Is there a more efficient way to get this effect?
1 Answer 1
There's quite a lot of code duplication going on here... I would suggest refactoring the switch statements into a method.
I'm assuming there are 20 PictureBox objects and you want to randomize the shown image on each of those, because your provided code is a bit bizarre (e.g. pictureBox11.Image
only ever gets assigned Properties.Resources.image1
or image3
, and sometimes there are multiple assignments for the same pictureBox inside a case
)
namespace c64 {
public partial class Form1 : Form {
private Random rng;
private const Image[] Images = new Image[]{
Properties.Resources.image1,
Properties.Resources.image2,
Properties.Resources.image3,
Properties.Resources.image4,
Properties.Resources.image5,
Properties.Resources.image6,
Properties.Resources.image7,
Properties.Resources.image8
};
public Form1() {
InitializeComponents();
rng = new Random();
}
private void RandomizeImage(PictureBox pictureBox) {
int index = rng.Next(0, Images.Length - 1);
pictureBox.Image = Images[index];
}
private void timer1_Tick(object sender, EventArgs e) {
RandomizeImage(pictureBox1);
RandomizeImage(pictureBox2);
RandomizeImage(pictureBox3);
RandomizeImage(pictureBox4);
RandomizeImage(pictureBox5);
RandomizeImage(pictureBox6);
RandomizeImage(pictureBox7);
RandomizeImage(pictureBox8);
RandomizeImage(pictureBox9);
RandomizeImage(pictureBox10);
RandomizeImage(pictureBox11);
RandomizeImage(pictureBox12);
RandomizeImage(pictureBox13);
RandomizeImage(pictureBox14);
RandomizeImage(pictureBox15);
RandomizeImage(pictureBox16);
RandomizeImage(pictureBox17);
RandomizeImage(pictureBox18);
RandomizeImage(pictureBox19);
RandomizeImage(pictureBox20);
}
// rest of your code ...
}
}
Of course, you could pack those pictureBoxX (X = 1 to 20) into their own array and iterate over them in a loop.
timer2
andtimer3
control the visibility ofpictureBox21
. What is special aboutpictureBox21
? \$\endgroup\$