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
Veri Girişi Doğrulama (Input Validation)
Basit Veri Bağlama (Simple Data Binding)
Veri Girişi Maskeleme (MaskedTextBox)
c# Programında Bigpara Sayfasından Borsa Verilerini Selenium Kütüphanesini Kullanarak Çekme
Kompleks Veri Bağlama (Complex Data Binding)
TabControl Panelini Kullanarak Lokantalar İçin Müşteri Siparişi Alan c# Form Uygulaması
Yıkıcı Metotlar (Destructors)
Konsol Ekranında Kod Yazma ve Çalıştırma
Form Sınıfı
Kaçan Buton Oyununu Yapan c# Uygulaması
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
c# Console Uygulamalarında Ping Nasıl Kullanılır, Ping Atma
Yapıcı Metotlar (Constructors)
Faktöriyel Hesabı Yapan c# Windows Form Uygulaması
2020 TYT Matematik Ortakatlı Kuralıyla İlgili Sorunun Çözümünü c# Diliyle Kodlama
Kredi Kartı Taksitlendirme İşlemini Yapan c# Uygulaması
Rastgele Seçilen Bir Sayıyı Basamaklarına Ayıran, Basamak Değerini ve Sayı Değerini Bulan c# Console Uygulaması
c# Console Uygulamalarında params Dizisi Tanımlama
Yazı Tura Oyunu Yapan c# Uygulaması

Yorum Ekle
   
Kötü
İyi