C# Örnekleri – Yılan Oyunu

Yılan oyunu projesinde farklı bir sınıf yardımıyla yılan ve yemi kontrol ettirirken iki farklı oyun modu ekleme şansımız da oldu.

Yılan oyunu için ilk başta bir tane baş belirliyoruz. Her şey bu baş üzerinden yapılacaktır. Baş ve gövde için Button, PictureBox vb. türlerde nesne tanımlanabilir, hiç fark etmez. Ancak ben numaralandırma adımını kolaylaştırmak adına Button kullanmayı tercih ettim.

Yılan Oyunu

Yön Tanımlama

Yılan oyunumuz 2 boyutlu bir düzlemde oynanmakta ve yönünü tanımlayacağımız 4 çeşit durum söz konusu olmaktadır.

Yon adında enum (numaralandırma tipi) oluşturuldu. Bu tip tanımlaması ile eskiYon ve yilaninYonu oluşturuldu. Bu kod bloğu olmasaydı yılan kontrol edilemezdi ve oyunun amacı yerine getirilemezdi.

Yılanın Yönünü Tespit Etme

Bu kod bloğu ile tuşları algılayıp nereye gideceğini belirliyoruz. Ayrıca yılanın kendi üstünden geçmesi engelleniyor. Örneğin sağ tarafa doğru giderken sol tarafa gitmesi için öncelikle ya ukarıya ya da aşağıya doğru gidilmesi gerekiyor, doğrudan sola gitmesi mümkün olmuyor. Bu kod bloğunun çağırılması gereken yer formun KeyDown özelliğidir.

Yılanı Yönlendirme

Bu kod bloğu yukarıda belirlediğimiz yöne göre yılanın hareket etmesini sağlıyor. Bu metotu sürekli çağırmamız gerekiyor. Bu nedenle sonsuz bir döngü veya Timer’ın içinde çağrılmalıdır.

yonDegisti isimli değişkenin kullanım nedeni, ilerletme işleminin Timer ile yapılması sebebiyle henüz yılan bir kare ilerleyemeden zıt yöne doğru ilerlemesini engellemektir. Aksi yılan kendi üzerinden zıt yönde geçmeye çalışacak ve doğal olarak çarpışma algılanacaktı.

Yemin Konumlandırılması

Yılanın amacını yerine getirebilmesi için bir yemin konumu belirliyoruz. Burada dikkat edilecek yer döngü ve içerisindeki kontroldür. Bu kontrol olmasaydı yem oyun içerisinde yılanımızın kuyruğu üstünde çıkabilirdi.  Burada söz konusu olan yem ise herhangi bir nesne olabilir ancak ben PictureBox kullandım. Eğer oluşturulan yem ile yılan üzerinde herhangi bir noktada çakışma var ise yem yeniden oluşturulur.

Sonsuz Geçiş Özelliği

Sonsuz geçiş, her yılan oyununda bulunan bir köşeye girince diğer köşeden çıkma olayıdır. Bu kod bloğu oyunumuzu daha esnek yürütmemizi sağlar. Bu kodu kullanma ilgili formdan çağırma zorunluluğu yoktur. Ancak eğer duvar koymadıysak kenarlardan geçen yılan görüş açımızdan kaybolacaktır. Bunu engellemek için duvar eklenebilir ve başın duvarla teması kontrol edilir.

Duvar ve Labirent Ekleme

Yukarıda bahsi geçen duvar kontrol olayı esnek olarak aşağıdaki kodlar ile tanımlanabilir:

Form yüklenirken (Form_Load) Panel ile oluşturduğumuz duvarlarımızı parametre yardımıyla gönderiyoruz. Bu sayede duvarlarımız 1000 adet olsa bile kontrolümüz gayet basit olacaktır. Duvarların ilgili metoda gönderimi şu şekilde yapılmaktadır:

Eğer bunların yanında labirent gibi çeşitli PictureBox nesneleri de eklenecekse aynı metot şu şekilde kullanılabilir:

Bir metotun değişken sayıda parametre alması params ifadesi ile sağlanmaktadır.

Duvar veya Labirente Çarpma Kontrolü

Artık kontrol etmemiz gereken yere geldik. Şu an yapmamız gereken Bas adlı nesnemizin duvarlar ile temasının olup olmadığını kontrol etmektir. C#’ın bize bu açıdan çok kolaylık sağlayacak hazır bir komutu vardır: IntersectsWith()

IntersectsWith() metodu yardımıyla iki nesnenin birbiri üstine gelip gelmediği kontrol edilebilir.

Eğer yukardan TRUE dönerse yılanın başının duvara çarptığı anlaşılacaktır, dolayısıyla oyun sona erecektir.

Yem Yeme Kontrolü

Bu kod bloğunda yapılan işlem yılanın başının yem ile temasının olup olmadığının kontrol edilmesidir.

Form içerisinde ise yemin yenip yenmediği kontrol edilecektir. Yukarıdan TRUE gelirse yemin yendiği anlaşılıyor ve yemi yeniden konumlandırıp skoru arttırıyoruz. Oyunun daha da zorlaşması için Timer’ın hızını düşürüyoruz, böylece yılanın hızı artıyor.

Yem Yedikçe Yılanın Büyümesi

Şu ana kadar yılan oyunumuz çalışıyor, yem yeniyor, skor artıyor ancak yılan büyümüyor.

Yukarıda yeni bir dinamik Button tanımlıyoruz ve bu nesnenin Top, Left, Height ve Width’ini belirliyoruz. Yılanın gideceği yöne göre son kısma bu nesneyi konumlandırarak yilan isimli listeye bu nesneyi ekliyoruz.

Yılan oyunu ana işlemleri ve mantığı açıklanmıştır. C# ile yapılmış yılan oyunu projesine https://github.com/EmirhanSeyhan/YilanOyunu adresinden ulaşabilirsiniz.

About Emirhan SEYHAN

Esenyurt Kıraç İMKB Meslekî ve Teknik Anadolu Lisesi Bilişim Teknolojileri alanı Veritabanı Programcılığı dalı 11. sınıf öğrencisiyim. Programlama ve oyun yapımı üzerinde çalışıyorum.

View all posts by Emirhan SEYHAN →

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.