Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

picturebox image randomisation C#

i am working on a puzzle slider program and trying to randomize images inside of pictureboxes. I did some research on the internet can't find any examples i could work on. These are my code:

        Random r = new Random();

        PictureBox[] picBox = new PictureBox[9];
        picBox[0] = new PictureBox();
        picBox[1] = new PictureBox();
        picBox[2] = new PictureBox();
        picBox[3] = new PictureBox();
        picBox[4] = new PictureBox();
        picBox[5] = new PictureBox();
        picBox[6] = new PictureBox();
        picBox[7] = new PictureBox();
        picBox[8] = new PictureBox();

i have bitmap array too:

        Bitmap[] pictures = new Bitmap[9];
        pictures[0] = new Bitmap(@"1.1Bright.jpg");
        pictures[1] = new Bitmap(@"1.2Bright.jpg");
        pictures[2] = new Bitmap(@"1.3Bright.jpg");
        pictures[3] = new Bitmap(@"2.1Bright.jpg");
        pictures[4] = new Bitmap(@"2.2Bright.jpg");
        pictures[5] = new Bitmap(@"2.3Bright.jpg");
        pictures[6] = new Bitmap(@"3.1Bright.jpg");
        pictures[7] = new Bitmap(@"3.2Bright.jpg");
        pictures[8] = new Bitmap(@"3.3Dark.jpg");

i tried a few ways but i don't know how to set random pictures[] into the picBox[]:

        for(int i=0; i<=8;i++)
        {
            picBox[i].Image= pictures[r.Next(0,9)];
        }

the problem here is that some pictureboxes e.g picBox[1] and picBox[6] are repeated pictures. How do i make them non repeats? Examples are greatly appreciated thanks.

like image 577
cheesebunz Avatar asked May 10 '26 02:05

cheesebunz


1 Answers

Create an array of bools equal to the size of the pictures array

bool[] usedPictures = new bool[pictures.Length];

Set the values of this array to false. Now determine your random number, and test if that element is used or not, something like:

int iCount = 0;
Random random = new Random();
while (iCount < pictures.Length)
{
    int attempt = random.Next(0, pictures.Length);

    //Ensures you will only use an available picture
    if (usedPictures[attempt] == false)
    {            
        picBox[attempt].Image= pictures[iCount];
        doorUsed[attempt] = true;
        iCount++;
    }
}
like image 168
Robb Avatar answered May 11 '26 16:05

Robb