Random rnd = new Random();
int[] dizi;
Adım 4: Rastgele üretilen sayılar orijinal resmin oluşumunu sağlayabilir. Böyle bir hatanın oluşmaması için resimlerin orijinal sırasını tutan yedek bir dizi değişken tanımlayalım.
Adım 5: Oyunda resimlerin gösterimini sağlayan PictureBox nesnelerinin isimlerini bir dizi yardımıyla saklayacağız. Bunun için PictureBox tipinde bir dizi değişken tanımlayalım.
PictureBox[] img;
Adım 6: PictureBox nesnelerinin başlangıçta görünmemesi için Visable özelliğinden yararlanmştık. Yüklenen resimleri sildiğimiz için bu özellikler işe yaramayacaktır. Bundan dolayı projede bu satırların tamamını silelim.
Adım 7: Tanımladığımız dizi değişkenlerinin başlangıçtaki değerlerini ayarlar() metodu içinde tanımlayalım.
img = new PictureBox[] { img1, img2, img3, img4, imgOriginal };
dizi = new int[] { 4, 4, 4, 4, 4 };
yedek = new int[] { 0, 1, 2, 3, 4 };
foreach (var item in img)
{
item.Image = null;
}
Adım 8: Resimlerin dağıtılması için dagitKolay() isminde bir metod tanımlayalım.
private void dagitKolay()
{
}
Adım 9: Tanımladığımız bu fonksiyonu kullanıcı seçenek olarak kolayı seçtiğinde çağıralım.
case 1:
dagitKolay();
break;
Adım 10: dagitKolay() metodu içinde gerekli kodları yazmaya başlayalım. Öncelikle 0 ile 3 arasında arasında rastgele bir değer seçmesini sağlayalım.
private void dagitKolay()
{
int secilen;
secilen = rnd.Next(0, 4);
}
Adım 11: Rastgele seçilen bu değeri dizinin ilk elemanına aktaralım.
int secilen;
int i = 0;
secilen = rnd.Next(0, 4);
dizi[i] = secilen;
Adım 12: Elde edilen bu dizi elemanının değerine denk gelen resmi img1 PictureBox nesnesinde gösterelim.
img[i].Image = Image.FromFile("Image/" + resimler[dizi[i]]);
Adım 13: İkinci bir sayı seçelim ve dizinin ilgili elemanına akaralım.
i++;
secilen= rnd.Next(0, 4);
dizi[i] = secilen;
Adım 14: Elde edilen bu dizi elemanının değerine denk gelen resmi img2 PictureBox nesnesinde gösterelim. Burada elde edilen sayının aynı olma ihtimali olabilir. Bu hatayı sonra çözeceğimiz için bunu dikkate almayalım.
img[i].Image = Image.FromFile("Image/" + resimler[dizi[i]]);
Adım 15: Oyunda 4 tane resim olacağı için bunları ayrı ayrı böyle yapmak yerine bir döngü yardımıyla gerçekleştirebiliriz. Bu işlemi gerçekleştirmek için do while döngüsünü kullanacağız. Burada sayaç olarak kullanılan i değerinin dörtten küçük olduğu müddetçe döngünün devam etmesini sağlayalım.
do
{
} while (i < 4);
Adım 16: Kodlarımızı döngüye göre yeniden düzenleyelim.
int secilen;
int i = 0;
do
{
secilen = rnd.Next(0, 4);
dizi[i] = secilen;
i++;
} while (i < 4);
Adım 17: Elde edilen dizi elemanlarına göre seçilen resimleri ilgili img PictureBox nesnesinde gösterelim.
for (i = 0; i < img.Length; i++)
{
img[i].Image = Image.FromFile("Image/" + resimler[dizi[i]]);
}
Adım 18: Projeyi çalıştırdığınızda aynı resimlerin birden fazla gösterildiğini görürsünüz. Bu sorunu çözmek için dizi elemanı içinde aynı elemanın olmasını önlememiz gerekir. Bu işlemi gerçekleştirmek için IndexOf() metodundan yararlanacağız.
do
{
secilen = rnd.Next(0, 4);
if (Array.IndexOf(dizi, secilen) == -1)
{
dizi[i] = secilen;
i++;
};
} while (i < 4);
Adım 19: Bir başka sorunda resimlerin orijinal resmin sırasına göre gösterilmesi olabilir. Orijinal resmimiz 0, 1, 2, 3 sırasına göre oluşmaktaydı. Bu sorunu çözmek için SequenceEqual() metodundan yararlanacağız.
do
{
secilen = rnd.Next(0, 4);
if (Array.IndexOf(dizi, secilen) == -1)
{
dizi[i] = secilen;
i++;
};
if (dizi.SequenceEqual(yedek))
{
dizi = new int[] { 4, 4, 4, 4, 4 };
i = 0;
}
} while (i < 4);
Projeyi kaydedip çalıştıralım. Artık işlemlerin hatasız bir şekilde oluştuğunu görürsünüz. Bir sonraki makalede görüşmek üzere.