Ejemplo n.º 1
0
        // timer1 her çalıştığında yani normal durumda 300ms'de bir
        // bu fonksiyon çalışacaktır
        private void update(object sender, EventArgs e)
        {
            // Şekil her hareket ettiğinde önceki kareler eski haline gelmeli
            // ve şeklin bulunduğu kareler tekrar renklendirilmelidir
            // bu fonksiyon ile bu işlemi sağlıyoruz
            Alan.AlanSifirla();

            // Eğer şekil yer veya başka bir şekil ile çarpışmadıysa
            if (!Alan.Carpisma())
            {
                // Şekil aşağı yönde harekete devam eder
                Alan.suankiSekil.Asagi();
            }
            // Eğer şekil yer veya başka bir şekil ile çarpıştıysa
            else
            {
                // Şuanki şekli haritanın bütünü ile birleştir ve kaldığı konuma kaydet
                Alan.Birlestir();
                // Tetris yapılmış mı? diye kontrol et
                Alan.TetrisKontrol();
                // timer1 tekrar 300ms'e ayarlansın
                timer1.Interval = Alan.Interval;
                // Inıt() kısmında zaten şekli tanımlamıştık,
                // Şekli sıfırlıyoruz, rastgele yeni bir şekil atıyoruz
                // X = 3 ve Y = 0, konumlarına yerleştiriyoruz
                Alan.suankiSekil.SekilSifirla(3, 0);

                // Eğer hala çarpışma var ise
                if (Alan.Carpisma())
                {
                    // timer1.Tick eventinden update() fonksiyonunu kaldır.
                    timer1.Tick -= new EventHandler(update);
                    // Bütün timerları durdur
                    timer1.Stop();
                    puanSay.Stop();
                    tusKontrol.Stop();

                    // 'kontrolTusu' değişkenine de ESC tuşunu atıyoruz ki, bir sonraki başlatma son bastığımız
                    // tuş çalışmasın
                    kontrolTusu = Keys.Escape;
                    // oyun bittiği için bu değişken true oluyor
                    oyunBitti = true;
                }
            }
            // Eğer hiç bir sıkıntı yoksa şeklimiz ve mevcut alan birleşir
            Alan.Birlestir();

            // OnPaint() eventi tekrar çalışmasın istiyoruz, bu yüzden Invalidate() metodunu çağırdık
            Invalidate();
        }
Ejemplo n.º 2
0
        // Tuşların kontrol edildiği Timer, 100ms'de bir basılan tuşları kontrol eder
        private void tusKontrol_Tick(object sender, EventArgs e)
        {
            // Eğer oyun başladıysa yani Başlat butonu çalışmıyorsa
            if (button1.Enabled == false)
            {
                // kontrolTusu kontrol metoduna alınır
                switch (kontrolTusu)
                {
                // İleri yön tuşuna basıldıysa
                case Keys.Up:

                    // ve etrafında dönmesine engel olacak bir şekil yok ise
                    if (!Alan.Kesisim())
                    {
                        // Şekil her hareket ettiğinde önceki kareler eski haline gelmeli
                        // ve şeklin bulunduğu kareler tekrar renklendirilmelidir
                        // bu fonksiyon ile bu işlemi sağlıyoruz
                        Alan.AlanSifirla();
                        // Şekli döndürüyoruz
                        Alan.suankiSekil.SekilCevir();
                        // Mevcut harita ile şekli birleştiriyoruz
                        Alan.Birlestir();
                        // OnPaint() eventi tekrar çalışmasın istiyoruz, bu yüzden Invalidate() metodunu çağırdık
                        Invalidate();
                        // Tuş işlemini tamamladı artık bu işlemden çıkabiliriz
                        break;
                    }
                    break;

                // Geri yön tuşuna basıldıyse
                case Keys.Down:
                    // timer1 tekrarlama değeri 10ms olur,
                    // ve update() metodu 10ms'de 1 tekrarladığı için
                    // biz müdahale edemeden
                    // şekil hızlıca aşağıya düşer
                    timer1.Interval = 10;
                    break;

                // Eğer sağ yön tuşuna basıldıysa
                case Keys.Right:
                    // Şeklin sağında çarpacağı bir nesne yok ise
                    if (!Alan.CarpismaYatay(1))
                    {
                        // Şekil sağa gider
                        Alan.AlanSifirla();
                        Alan.suankiSekil.Saga();
                        Alan.Birlestir();
                        Invalidate();
                        break;
                    }
                    break;

                case Keys.Left:
                    // Şeklin solunda çarpacağı bir nesne yok ise
                    if (!Alan.CarpismaYatay(-1))
                    {
                        // Şekil sola gider
                        Alan.AlanSifirla();
                        Alan.suankiSekil.Sola();
                        Alan.Birlestir();
                        Invalidate();
                        break;
                    }
                    break;
                }
                // 'kontrolTusu' değişkeni herhangi bir tuşa bir kere basıldıktan sonra
                // Esc tuşuna ayarlanır, bunun sebebi ise program tuşa basılı kalmış gibi davranmamalı
                kontrolTusu = Keys.Escape;
            }
        }