3 votes

randomisation d'images picturebox C#

Je travaille sur un programme de curseur de puzzle et j'essaie de randomiser les images à l'intérieur des boîtes à images. J'ai fait quelques recherches sur Internet mais je n'ai pas trouvé d'exemples sur lesquels je pourrais travailler. Voici mon 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();

J'ai aussi un tableau de bitmap :

        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");

J'ai essayé plusieurs méthodes mais je ne sais pas comment placer des images aléatoires[] dans la picBox[] :

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

Le problème ici est que certaines boîtes à images, par exemple picBox[1] et picBox[6], sont des images répétées. Comment puis-je les rendre non répétitives ? Des exemples seraient les bienvenus.

4voto

Mitch Wheat Points 169614

Il suffit de remplir le tableau et d'utiliser un remue-ménage algorithme.

Peut-être l'implémenter comme une méthode d'extension :

namespace ExtensionMethods
{
    public static class Extensions
    {
        static Random rng = new Random();

        public static void shuffle<T>(this T[] array)
        {
            // i is the number of items remaining to be shuffled.
            for (int i = array.Length; i > 1; i--)
            {
                // Pick a random element to swap with the i-th element.
                int j = rng.Next(i);  // 0 <= j <= i-1 (0-based array)
                // Swap array elements.
                T tmp = array[j];
                array[j] = array[i - 1];
                array[i - 1] = tmp;
            }
        }

    }
}

Appeler l'échantillon :

en utilisant ExtensionMethods ;

namespace ConsoleApplication
{

    static class Program
    {
        static void Main()
        {
            int[] array = new int[] {1,2,3,4,5,6,7,8,9};

            array.Shuffle();
        }
    }
}

4voto

Robb Points 1777

Créez un tableau de bools égal à la taille du tableau d'images.

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

Définissez les valeurs de ce tableau à false . Maintenant, déterminez votre nombre aléatoire, et testez si cet élément est utilisé ou non, quelque chose comme :

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++;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X