immagine picturebox randomizzazione C #
-
27-09-2019 - |
Domanda
Sto lavorando su un programma slider puzzle e cercando di randomizzare immagini all'interno di PictureBoxes. Ho fatto qualche ricerca su internet non può trovare alcun esempio ho potuto lavorare su. Questi sono il mio codice:
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();
Ho gamma bitmap troppo:
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");
Ho provato un paio di modi, ma non so come impostare immagini casuali [] nel picBox []:
for(int i=0; i<=8;i++)
{
picBox[i].Image= pictures[r.Next(0,9)];
}
Il problema qui è che alcuni PictureBoxes es picBox [1] e picBox [6] si ripetono immagini. Come faccio a fare di loro non si ripete? Esempi sono molto apprezzate grazie.
Soluzione
creare un array di Caccio pari alla dimensione della matrice immagini
bool[] usedPictures = new bool[pictures.Length];
Imposta i valori di questa matrice a false
. Ora determinare il vostro numero a caso, e verificare se viene utilizzato quell'elemento o no, qualcosa di simile a:
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++;
}
}
Altri suggerimenti
Compila la matrice e utilizzare un riordino algoritmo.
Forse implementare come un metodo di estensione:
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;
}
}
}
}
campione Calling:
utilizzando ExtensionMethods;
namespace ConsoleApplication
{
static class Program
{
static void Main()
{
int[] array = new int[] {1,2,3,4,5,6,7,8,9};
array.Shuffle();
}
}
}