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
Basit Veri Bağlama (Simple Data Binding)
Veri Girişi Doğrulama (Input Validation)
TabControl Panelini Kullanarak Lokantalar İçin Müşteri Siparişi Alan c# Form Uygulaması
Kompleks Veri Bağlama (Complex Data Binding)
c# Programında Bigpara Sayfasından Borsa Verilerini Selenium Kütüphanesini Kullanarak Çekme
Veri Girişi Maskeleme (MaskedTextBox)
Yıkıcı Metotlar (Destructors)
Konsol Ekranında Kod Yazma ve Çalıştırma
Kaçan Buton Oyununu Yapan c# Uygulaması
2020 TYT Matematik Ortakatlı Kuralıyla İlgili Sorunun Çözümünü c# Diliyle Kodlama
Rastgele Seçilen Bir Sayıyı Basamaklarına Ayıran, Basamak Değerini ve Sayı Değerini Bulan c# Console Uygulaması
Form Sınıfı
Form Sınıfına Ait Bazı Olayların ve Özelliklerin Kullanılmasına Ait Örnek Uygulama
Verilen İki Matrisi Çarpan Programı c# Dilinde Form Ortamında Yapınız
Tombala Oyununu Yapan Uygulamayı c# Dilinde Kodlama1
Metodu Sonlandırma
GroupBox Paneliyle Gruplandırılan Bilgisayar Parçalarının Satışını Yapan c# Form Uygulaması
c# Console Uygulamalarında Ping Nasıl Kullanılır, Ping Atma
c# Console Uygulamalarında Timer Kullanımı
Kredi Kartı Taksitlendirme İşlemini Yapan c# Uygulaması

Yorum Ekle
   
Kötü
İyi