c# Desktop

c# Dilini Kullanarak Form Sayfasında Puzzle Oyunu Yapımı4

Seviyesi kolay olarak seçilen puzzle oyununa ait resimleri sahnede dağıtma işlemini gerçekleştirelim. Burada resimler ve bu resimlere ait konumlar mevcuttu. Ancak bunların hepsini sabit olarak tanımlamıştık. Bunlarında dinamik olarak tanımlanması ve resimlerin buna göre sahnede dağıtılması gerekmektedir. Hadi şimdi bu işlemleri gerçelelştirelim.

Adım 1: Oyunda resimlerin sırasını rastgele belirleyeceğimiz için PictureBox nesnesine atanan tüm resimleri kaldıralım. Çünkü bu işlemlerin tamamını dinamik olarak gerçekleştireceğiz. Bunun için PictureBox nesnelerini seçelim. Properties panelinde yer alan Image özelliklerini sıfırlayalım.

Adım 2: Şimdi resimlerin isimlerini dizi tanımlayarak saklayalım.

        string[] resimler = { "b1.png", "b2.png", "b3.png", "b4.png", "basit.png" };

Adım 3: Resimlerin yerlerini belirlemek için rastgele sayılar üreteceğiz. Bunun için Random sınıfından yararlanacağız. Öncelikle bu sınıftan türetilen bir nesne tanımlayalım. Ayrıca seçilen sayıların tutulacağı dizi değişkenlerimizi de tanımlayalım.

        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.

        int[] yedek;

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.

Uygulamanın bu aşamasına ait kodları buradan indirebilirsiniz.

İlgili Makaleler
c# Programında Bigpara Sayfasından Borsa Verilerini Selenium Kütüphanesini Kullanarak Çekme
Konsol Ekranında Kod Yazma ve Çalıştırma
c# Console Uygulamalarında Ping Nasıl Kullanılır, Ping Atma
Veri Girişi Doğrulama (Input Validation)
Girilen Ad Soyadı Form Sayfasında Dinamik Olarak Gösteren c# Form Uygulaması
CefSharp Kullanan Sekmelere Sahip Chromium Tarayıcı Oluşturma2
Tombala Oyununu Yapan Uygulamayı c# Dilinde Kodlama1
Kompleks Veri Bağlama (Complex Data Binding)
C# Uygulamalarında HashMap Dizi Oluşturma
Metodu Sonlandırma
Basit Veri Bağlama (Simple Data Binding)
Sayısal Loto Çekilişini Yapan c# Uygulaması
Rastgele Seçilen Bir Sayıyı Basamaklarına Ayıran, Basamak Değerini ve Sayı Değerini Bulan c# Console Uygulaması
Kredi Kartı Taksitlendirme İşlemini Yapan c# Uygulaması
Değişik Özelliklerde Grafik Çizimi Yapan c# Uygulaması
Doğum Günü Hesabını Ayrıntılı Olarak Yapan c# Uygulaması
Veri Girişi Maskeleme (MaskedTextBox)
c# Form Uygulamalarında SqLite Veritabanında Uyeler Tablosunu Oluşturma
Nesne Tabanlı Programlamaya Giriş
Form Sınıfına Ait Bazı Olayların ve Özelliklerin Kullanılmasına Ait Örnek Uygulama

Yorum Ekle
   
Kötü
İyi