Csharpta Oyun Programlama: Kaydır Doldur Oyunu

Csharp dilinde oyun yapma vaktinin geldiğini düşünerek küçük bir oyun geliştirdim. Oyunun kod kısmı biraz uzun olduğundan, yalnızca kritik kod bloklarına değineceğim. Oyunun kaynak kodlarını buradan indirip kodlarında aşağıda anlatacağım yöntemlerle değişiklik yaparak oyun programlama mantığı hakkında bilgi sahibi olabilirsiniz. İsterseniz buradan oyunu bilgisayarınıza indirip hemen oynamaya başlayabilirsiniz. Eğer indirme ve deneme işlemini tamamladıysanız oyunun oluşturulma aşamalarını ayrıntılı bir şekilde inceleyelim. Gerekli açıklamalar da zaten kod üzerinde yapılmış durumda.

Kutucuk Hareketleri Nasıl Sağlanıyor?


Kod kısmına girmeden önce kısaca oyun mantığına değinmek gerekirse; oyundaki tüm kutucuklar normalde bir buton. Bazı butonlar pasif yani enabled özelliği false durumda. Kutucukların yer değiştirme mantığını ise renk bazlı bir yaklaşımla oluşturdum. Butonların renklerini belli bir kurala göre değiştirerek hareket efekti kattım. Kural ise şu şekilde; hedefIndis dizisi (Seviyelerin her biri birer kural) aşağıda değineceğim kurallarla 1 ve 0 değerleri alıyor. indis dizisi ise random 1 ve 0 değerleri alıyor. Bu değerlere göre indis değeri 1 olan buton renkDegistir fonksiyonu ile siyaha boyanıyor.


Buton Dizilerinin Kullanım Amacı ve İnteger Dizileri İle İlişkilendirilmesi

Oyun elemanlarının butonlardan oluştuğunu söylemiştim. Bu butonları bir objecet dizisi ile birbiriyle ilişkili halde tuttum. Aralarındaki koordinasyon ve yer değiştirme işlemlerini de indis adındaki bir integer dizisi ile sağladım. Yani görüntü buton dizileri ile sağlanırken, arka tarafta yapılan tüm işlem ve hesaplamalar integer dizisi tarafından yapılıp buton dizilerine uygulanıyor.

Seviyelerin oluşturulması

Vereceğim kritik kodlardan bir tanesi bu kısımda olacak. Zira seviyeleri anlattığım şekilde çoğaltabileceksiniz. Bu kısma yarı dinamik diyebiliriz. Çünkü siz sadece istediğiniz deseni oluşturacak kod bloğunu ekliyorsunuz. Geri kalan tüm hesaplamalar ve boyama işlemleri otomatik yapılıyor. Eğer daha fazla seviye ile oynamak istiyorum diyorsan, buraya yoğunlaşmanı tavsiye ederim.

[cc lang = ‘csharp’]
private void setHedefIndex()
{
switch (level)
{
// Birinci Seviye
case 0:
for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if ((i + j) < 3) { hedefIndis[i, j] = 1; hedefSiyahSayisi++; } else { hedefIndis[i, j] = 0; } } } break; // İkinci Seviye case 1: for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (i == j || i==3 || j==3) { hedefIndis[i, j] = 1; hedefSiyahSayisi++; } else { hedefIndis[i, j] = 0; } } } break; // Üçüncü Seviye case 2: for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (i == j || i+j == 3) { hedefIndis[i, j] = 1; hedefSiyahSayisi++; } else { hedefIndis[i, j] = 0; } } } break; // Dördüncü Seviye case 3: for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if ((i % 2 == 1 && j % 2 == 1) || (i % 2 == 0 && j % 2 == 0)) { hedefIndis[i, j] = 1; hedefSiyahSayisi++; } else { hedefIndis[i, j] = 0; } } } break; } } [/cc] Yukarda gördüğünüz fonksiyon içine bir switch-case yapısı ile seviye atlama ve seviye oluşturma işlemi gerçekleştiriliyor. Her case bloğu içinde farklı bir seviye bulunmakta. Siz de case 4: .... break; şeklinde bir kod bloğu ekleyerek kendi seviyelerinizi oluşturabilirsiniz.

Kutucukların Yer Değiştirmesi

Kutucukların yer değiştirme efektini renklerini değiştirerek verdiğimi söylemiştim. Sağa-Sola-Aşağı-Yukarı öteleme tuşlarının click eventlerinde yapılması gereken kodları yazdım. 16 tane hareketi kontrol eden tuş var ama ben her bir click event’ a kod yazmak yerine 4 tane fonksiyon ile hareket işlemini gerçekleştirdim. Şöyle ki;

[cc lang = ‘csharp’]

private void fnkSagaOtele(int i)
{
int[,] temp = new int[4, 4];
temp = indis;
for (int j = 1; j < 4; j++) { if (temp[i, j - 1] == 1 && temp[i, j] != 1)//siyah kare en sonda değilse ve indis 1 e eşitse { indis[i, j - 1] = 0; indis[i, j] = 1; renkDegistir(); j++; hamleSayisi++; break; } } } private void btn_sagaOtele0_Click(object sender, EventArgs e) { fnkSagaOtele(0); lbl_hamleSayisi.Text = hamleSayisi.ToString(); sonucuKarsilastir(); } private void btn_sagaOtele1_Click(object sender, EventArgs e) { fnkSagaOtele(1); lbl_hamleSayisi.Text = hamleSayisi.ToString(); sonucuKarsilastir(); } private void btn_sagaOtele2_Click(object sender, EventArgs e) { fnkSagaOtele(2); lbl_hamleSayisi.Text = hamleSayisi.ToString(); sonucuKarsilastir(); } private void btn_sagaOtele3_Click(object sender, EventArgs e) { fnkSagaOtele(3); lbl_hamleSayisi.Text = hamleSayisi.ToString(); sonucuKarsilastir(); } [/cc] Sağa öteleme tuşlarının indislerine göre gönderdiğim parametreler, fnkSagaOtele fonksiyonu içinde sağa ötelenecek satırın numarasını ifade ediyor. Bu şekilde 4 ayrı işi bir fonksiyonda yapabildim. Diğer fonksiyonları da benzer şekilde oluşturdum. Genel olarak csharpta ilk oyunum olan Aynen Doldur, bu şekilde oluşturuldu tarafımdan. Çok karışık bir oyun değil aslında. Hatta basit bile denebilir. Ama bir yerden başlamak gerekiyordu. Meraklılarına ve yeni başlayanlara çok uygun bir örnek olduğunu düşünüyorum…

Oyunun ikinci versiyonu için tıklayınız.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir