c# Desktop

Tetris Oyununu C# Dilini Kullanarak Form Sayfasında Kodlama5

Bir önceki derste Tetris şekillerini oluşturmuştuk. Yeni tuşunu her tıklayışta yeni bir tetris şekli panonun üst tarafında ortaya çıkıyordu. Bu dersimizde tetris şekillerinin timer1 yordamında aşağı inişinin kodlarını yapacağız. Timer1.Tick yordamını daha önce oluşturmuş ve burada test kodu kullanmıştık. Şimdi asıl tetris şekillerinin iniş kodlarını yazacağız. Önce 3 tane değişken tanımlayacağız. Birincisi tetris şekillerinde her karenin ayrı ayrı inişe uygun olup olmadığını saklayan devam(3) şeklinde dizi değişkendir. İkincisi eğer 4 şekilde inişe uygunsa şekilin tümü için uygunluk veren devamet değişkenidir. Üçüncüsü de panonun dolu mu veya boş mu olduğunu saklayan bitir değişkenidir. Bu üç değişkende bilgileri evet yada hayır şeklinde saklayacağı için boolean tipinde tanımlamamız gerekir.

Adım 1: Bu üç değişkeni daha önceden tanımladığımız değişkenlerin altına şu şekilde tanımlayabiliriz.

        bool[] devam = new bool[4];
        bool devamet, bitir;

Adım 2: Timer1() olayına ait kodları yeniden düzenliyoruz. Öncelikle devamet ve devam değişkenlerinin değerlerini false olarak belirleyelim. 

    devamet = false;
    for (int i = 0; i <= 3; i++)
        devam[i] = false;
 
Adım 3: Öncelikle şeklin aşağıya inip inmediğini kontrol edelim. Elde edilen dört kareden birinin 200 sayısından büyük olması şeklin aşağıya inmesi demektir.  
 
            if (aktifSekil[0] + 10 > 200 || aktifSekil[1] + 10 > 200 || aktifSekil[2] + 10 > 200 || aktifSekil[3] + 10 > 200)
            {
            }
            else
            {
            }
 
Adım 4: Eğer şekil en aşağıya inmediyse else bloğunu oluşturalım. Burada şekle ait 4 karenin hareketini kontrol edeceğiz. Eğer şekil görünür değilse devam değişkeninin ilgili değeri true olarak değiştirilecektir.
 
        else {
                if (kare[aktifSekil[0] + 10].Visible == false)
                {
                    devam[0] = true;
                }
                if ((aktifSekil[1] + 10 == aktifSekil[0]) || kare[aktifSekil[1] + 10].Visible == false)
                {
                    devam[1] = true;
                }
                if ((aktifSekil[2] + 10 == aktifSekil[1]) || kare[aktifSekil[2] + 10].Visible == false)
                {
                    devam[2] = true;
                }
                if ((aktifSekil[3] + 10 == aktifSekil[2]) || (aktifSekil[3] + 10 == aktifSekil[1]) || kare[aktifSekil[3] + 10].Visible == false)
                {
                    devam[3] = true;
                }
        }
 
Adım 5: Bu dört şekilden biri kontrol işleminden geçemeyip false değeri alırsa oyuna devam etmemek için devamet değişkeninin değerini değiştirelim.
 
        for (int i = 0; i < 4; i++)
        {
            if (devam[i] == true) {
                devamet = true;
            }
            else {
                devamet = false;
                break;
            }
        }
 
Adım 6: Bu dört şekil için kontrol işlemi true ise ilgili kareyi görünür yapalım.
 
            if (devamet == true)
            {
                for (int i = 0; i < 4; i++)
                {
                    kare[aktifSekil[i]].Visible = false;
                    aktifSekil[i] = aktifSekil[i] + 10;
                    kare[aktifSekil[i]].Visible = true;
                    kare[aktifSekil[i]].BackColor = renk;
                }
            }
 
Adım 7: Bu dört şekil için kontrol işlemi false ise bitir değişkeninin değerini true yapalım.
 
            else
            {
                for (int i = 0; i < 4; i++)
                {
                    if (aktifSekil[i] >= 1 && aktifSekil[i] <= 10)
                    {
                        bitir = true;
                        break;
                    }
                    else
                    {
                        bitir = false;
                    }
                }
 
Adım 8: Burada bitir değişkeninin değeri true ise oyunu bitirelim. 
 
                if (bitir == true)
                {
                    timer1.Stop();
                    MessageBox.Show("Oyun Bitti");
                    lblYeni.Enabled = true;
                    lblYeni.BackColor = Color.Yellow;
                    lblDurdur.Enabled = false;
                    lblDurdur.BackColor = Color.Azure;
                    lblCikis.Enabled = true;
                    lblCikis.BackColor = Color.Yellow;
                    return;
                }
 
                SekilSec();
            }
 
Adım 9: bitir değişkeninin değeri false oyuna devam edelim ve yeni bir şeklin seçilmesini sağlayalım. Timer1 olayına ait tüm kodlarımız aşağıdaki gibi olacaktır.
 
            devamet = false;
            for (int i = 0; i <= 3; i++)
                devam[i] = false;
 
            if (aktifSekil[0] + 10 > 200 || aktifSekil[1] + 10 > 200 || aktifSekil[2] + 10 > 200 || aktifSekil[3] + 10 > 200)
            {
            }
            else
            {
                if (kare[aktifSekil[0] + 10].Visible == false)
                {
                    devam[0] = true;
                }
                if ((aktifSekil[1] + 10 == aktifSekil[0]) || kare[aktifSekil[1] + 10].Visible == false)
                {
                    devam[1] = true;
                }
                if ((aktifSekil[2] + 10 == aktifSekil[1]) || kare[aktifSekil[2] + 10].Visible == false)
                {
                    devam[2] = true;
                }
                if ((aktifSekil[3] + 10 == aktifSekil[2]) || (aktifSekil[3] + 10 == aktifSekil[1]) || kare[aktifSekil[3] + 10].Visible == false)
                {
                    devam[3] = true;
                }
 
            }
            for (int i = 0; i < 4; i++)
            {
                if (devam[i] == true)
                {
                    devamet = true;
                }
                else
                {
                    devamet = false;
                    break;
                }
            }
 
            if (devamet == true)
            {
                for (int i = 0; i < 4; i++)
                {
                    kare[aktifSekil[i]].Visible = false;
                    aktifSekil[i] = aktifSekil[i] + 10;
                    kare[aktifSekil[i]].Visible = true;
                    kare[aktifSekil[i]].BackColor = renk;
                }
            }
            else
            {
                for (int i = 0; i < 4; i++)
                {
                    if (aktifSekil[i] >= 1 && aktifSekil[i] <= 10)
                    {
                        bitir = true;
                        break;
                    }
                    else
                    {
                        bitir = false;
                    }
                }
 
                if (bitir == true)
                {
                    timer1.Stop();
                    MessageBox.Show("Oyun Bitti");
                    lblYeni.Enabled = true;
                    lblYeni.BackColor = Color.Yellow;
                    lblDurdur.Enabled = false;
                    lblDurdur.BackColor = Color.Azure;
                    lblCikis.Enabled = true;
                    lblCikis.BackColor = Color.Yellow;
                    return;
                }
 
                SekilSec();
            }
 
Projeyi kaydedip çalıştıralım. Oyuna başlayalım. Seçilen resmin sahnenin altına doğru hareket ettiğini görürsünüz. Bir sonraki makalede görüşmek üzere.

 


İlgili Makaleler
c# Console Uygulamalarında ReadKey Metoduyla Klavye Tuşlarını Kontrol Etme
Yıkıcı Metotlar (Destructors)
Sayısal Loto Çekilişini Yapan c# Uygulaması
Kredi Kartı Taksitlendirme İşlemini Yapan c# Uygulaması
Kaçan Buton Oyununu Yapan c# Uygulaması
Yazdırma İletişim Kutusu (PrintDialog)
C# Uygulamalarında HashMap Dizi Oluşturma
C# Uygulamalarında Dictionary Dizi Oluşturma
c# Form Uygulamalarında Ekranın Genişliğini ve Yüksekliğini Bulma
Rastgele Seçilen Bir Sayıyı Basamaklarına Ayıran, Basamak Değerini ve Sayı Değerini Bulan c# Console Uygulaması
Veri Girişi Doğrulama (Input Validation)
Veri Girişi Maskeleme (MaskedTextBox)
LINQ - Gruplama (Grouping) Örnekleri
Konsol Ekranında Kod Yazma ve Çalıştırma
Panel Üzerinde Serbest Çizim Yapan c# Form Uygulaması
c# Console Uygulamalarında Ping Nasıl Kullanılır, Ping Atma
C# Programlama Dilinde Veri Tipleri
Form Sayfalarında Ayrıntılı ListBox Kullanımı
2020 TYT Matematik Ortakatlı Kuralıyla İlgili Sorunun Çözümünü c# Diliyle Kodlama
Belirtilen Sayı Kadar Yıldız Oluşturan c# Form Uygulaması

Yorum Ekle
   
Kötü İyi