c# Desktop

Tetris Oyununu c# Dilini Kullanarak Form Sayfasında Kodlama13

Arkadaşlar sıra geldi programın TetrisKontrol isimli son metodunu yazmaya. Bu metot şeklin her duruşunda (ya tabana inmiştir ya da alttaki bir şeklin üzerine gelip durmuştur) panoyu baştan aşağı kontrol ediyor. (bu metot timer metodunda çağrılıyordu) Tetris oluşmuşsa onları siliyor, puan veriyor, belli bir puandan sonra tetrisin seviyesini bir yükseltip hızını artırıyor. 

Adım 1: Önce fonksiyon için gerekli değişkenleri tanımlayalım. Silinecek satırı saklayan satırNo, silinecek satırın durumunu saklayan satırSil, seviye, puan ve skor?dan oluşmak üzere 5 tane değişkenimiz var. Bunları daha önceki değişkenlerin altına şu şekilde yazalım.

        bool satirSil;
        int seviye, puan;
        int satirNo, skor;
 
Adım 2: Seviye ve puan değerlerini başlangıçta ilk değerlerine almamız gerekir. Bunları panoTemizle() metodu altında yapacağız.
            puan = 0;
            seviye = 1;
            lblSeviye.Text = "SEVİYE : " + seviye;
            lblPuan.Text = "PUAN : " + puan;
            timer1.Interval = 1000;
 
Adım 3: Şimdi TetrisKontrol() metodunu yazalım.
void TetrisKontrol() {
 
}
Adım 4: Öncelikle satirSil değişkeninin değerini false yapalım. Daha sonra yarışmacı 2500 puan aldığında seviyesini bulalım. Yani her 2500 puan aldığında seviyesini arttıralım.
void TetrisKontrol() {
    satirSil = false;
}
Adım 5: Şimdi seviyeye göre timer setinterval için zaman aralıklarını belirleyelim. Başlangıçta 1000 ms ile başladığı için seviye 1 için bir süre belirlemiyorum.
        void TetrisKontrol()
        {
            satirSil = false;
 
            switch (seviye)
            {
                case 0:
                    timer1.Interval = 1000;
                    break;
                case 1:
                    timer1.Interval = 900;
                    break;
                case 2:
                    timer1.Interval = 800;
                    break;
                case 3:
                    timer1.Interval = 700;
                    break;
                case 4:
                    timer1.Interval = 600;
                    break;
                case 5:
                    timer1.Interval = 500;
                    break;
                case 6:
                    timer1.Interval = 400;
                    break;
                case 7:
                    timer1.Interval = 300;
                    break;
                case 8:
                    timer1.Interval = 200;
                    break;
                case 9:
                    timer1.Interval = 100;
                    break;
                case 10:
                    timer1.Interval = 75;
                    break;
                case 11:
                    timer1.Interval = 50;
                    break;
                case 12:
                    timer1.Interval = 25;
                    break;
            }
 
        }

Adım 6: Tüm satırları alttan yukarı döğru kontrol edelim. Eğer ilgili hücredeki nesne görünür haldeyse orası dolu demektir. Şayet satırlardaki tüm nesneler görünür ise o satır dolduruldu demektir. Onların gizlenmesini sağlayalım. Bir üstteki nesneleri aşağıya alalım. Bu işlemi kontrol etmek için satirSil değişkeninden yararlanacağız.

        void TetrisKontrol()
        {
            satirSil = false;
            
            switch (seviye)
            {
                case 0:
                    timer1.Interval = 1000;
                    break;
                case 1:
                    timer1.Interval = 900;
                    break;
                case 2:
                    timer1.Interval = 800;
                    break;
                case 3:
                    timer1.Interval = 700;
                    break;
                case 4:
                    timer1.Interval = 600;
                    break;
                case 5:
                    timer1.Interval = 500;
                    break;
                case 6:
                    timer1.Interval = 400;
                    break;
                case 7:
                    timer1.Interval = 300;
                    break;
                case 8:
                    timer1.Interval = 200;
                    break;
                case 9:
                    timer1.Interval = 100;
                    break;
                case 10:
                    timer1.Interval = 75;
                    break;
                case 11:
                    timer1.Interval = 50;
                    break;
                case 12:
                    timer1.Interval = 25;
                    break;
            }
 
            for (satirNo = 19; satirNo > 0; satirNo--)
            {
                for (int r = 1; r < 11; r++)
                {
                    if (kare[satirNo * 10 + r].Visible == true)
                    {
                        satirSil = true;
                    }
                    else
                    {
                        satirSil = false;
                        skor = 0;
                        break;
                    }
                }
           }
 
Adım 7: Şimdi satirSil değişkeninin değeri true ise gerekli işlemleri yapalım.Doldurulan her satır için skor değişkenini arttıralım. Bu değere göre yarışmacıya puan verelim. Elde edilen puana göre seviyeyi kontrol edelim Sonuçları ekrana basalım.
        void TetrisKontrol()
        {
            satirSil = false;
            
            switch (seviye)
            {
                case 0:
                    timer1.Interval = 1000;
                    break;
                case 1:
                    timer1.Interval = 900;
                    break;
                case 2:
                    timer1.Interval = 800;
                    break;
                case 3:
                    timer1.Interval = 700;
                    break;
                case 4:
                    timer1.Interval = 600;
                    break;
                case 5:
                    timer1.Interval = 500;
                    break;
                case 6:
                    timer1.Interval = 400;
                    break;
                case 7:
                    timer1.Interval = 300;
                    break;
                case 8:
                    timer1.Interval = 200;
                    break;
                case 9:
                    timer1.Interval = 100;
                    break;
                case 10:
                    timer1.Interval = 75;
                    break;
                case 11:
                    timer1.Interval = 50;
                    break;
                case 12:
                    timer1.Interval = 25;
                    break;
            }
 
            for (satirNo = 19; satirNo > 0; satirNo--)
            {
                for (int r = 1; r < 11; r++)
                {
                    if (kare[satirNo * 10 + r].Visible == true)
                    {
                        satirSil = true;
                    }
                    else
                    {
                        satirSil = false;
                        skor = 0;
                        break;
                    }
                }
 
                if (satirSil == true)
                {
                    skor = skor + 1;
                    switch (skor)
                    {
                        case 1:
                            puan = puan + 100;
                            break;
                        case 2:
                            puan = puan + 200;
                            break;
                        case 3:
                            puan = puan + 300;
                            break;
                        case 4:
                            puan = puan + 400;
                            break;
                    }
 
                    seviye = (int)(puan / 2500);
                    seviye += 1;
                    if (seviye > 12)
                    {
                        timer1.Interval = 15;
                    }
                    lblSeviye.Text = "SEVİYE : " + seviye;
                    lblPuan.Text = "PUAN : " + puan;
                }
             }
Adım 8: Daha sonra doldurulan satırları gizleyip üstteki satırı aşağıya indirelim. Eğer satırlar doldurulmamışsa oyunumuzda satirNo değişkeninin değerini 1 arttıralım. Buna göre TetrisKontrol() metodunun son hali aşağıdaki gibi olacaktır.
        void TetrisKontrol()
        {
            satirSil = false;
            
            switch (seviye)
            {
                case 0:
                    timer1.Interval = 1000;
                    break;
                case 1:
                    timer1.Interval = 900;
                    break;
                case 2:
                    timer1.Interval = 800;
                    break;
                case 3:
                    timer1.Interval = 700;
                    break;
                case 4:
                    timer1.Interval = 600;
                    break;
                case 5:
                    timer1.Interval = 500;
                    break;
                case 6:
                    timer1.Interval = 400;
                    break;
                case 7:
                    timer1.Interval = 300;
                    break;
                case 8:
                    timer1.Interval = 200;
                    break;
                case 9:
                    timer1.Interval = 100;
                    break;
                case 10:
                    timer1.Interval = 75;
                    break;
                case 11:
                    timer1.Interval = 50;
                    break;
                case 12:
                    timer1.Interval = 25;
                    break;
            }
 
            for (satirNo = 19; satirNo > 0; satirNo--)
            {
                for (int r = 1; r < 11; r++)
                {
                    if (kare[satirNo * 10 + r].Visible == true)
                    {
                        satirSil = true;
                    }
                    else
                    {
                        satirSil = false;
                        skor = 0;
                        break;
                    }
                }
 
                if (satirSil == true)
                {
                    skor = skor + 1;
                    switch (skor)
                    {
                        case 1:
                            puan = puan + 100;
                            break;
                        case 2:
                            puan = puan + 200;
                            break;
                        case 3:
                            puan = puan + 300;
                            break;
                        case 4:
                            puan = puan + 400;
                            break;
                    }
 
                    seviye = (int)(puan / 2500);
                    seviye += 1;
                    if (seviye > 12)
                    {
                        timer1.Interval = 15;
                    }
                    lblSeviye.Text = "SEVİYE : " + seviye;
                    lblPuan.Text = "PUAN : " + puan;
                    
                    for (int s = satirNo; s > 0; s--)
                    {
                        for (int r = 1; r < 11; r++)
                        {
                            if (kare[s * 10 + r - 10].Visible == true)
                            {
                                kare[s * 10 + r].BackColor = kare[s * 10 + r - 10].BackColor;
                                kare[s * 10 + r].Visible = true;
                            }
                            else
                            {
                                kare[s * 10 + r].Visible = false;
                            }
                        }
                    }
                    satirNo += 1;
                }
            }
        }
 
Adım 9: Şimdi bu metodu timer olayının içinde SekilSec() metodunun üstünde çağıralım.
            TetrisKontrol();
            SekilSec();
Projemizi kaydedip çalıştıralım. Oyunumuzu bir müddet oynayalım. Satırları sildikçe puan alındığını, puanın her 2500 değeriyle bölümünde seviyenin bir arttırıldığını 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ı
Konsol Ekranında Kod Yazma ve Çalıştırma
LINQ - Gruplama (Grouping) Örnekleri
Veri Girişi Maskeleme (MaskedTextBox)
Panel Üzerinde Serbest Çizim Yapan c# Form Uygulaması
Veri Girişi Doğrulama (Input Validation)
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ı
Form Üzerine Satranç Tahtası Yapan c# Uygulaması
Belirtilen Sayı Kadar Yıldız Oluşturan c# Form Uygulaması

Yorum Ekle
   
Kötü İyi