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.
|