Video Oyunu Yazarken Nelere Dikkat Edilmeli Bölüm 2

Selamlar;

Aşağıda geçen hafta bahsettiğim BoMan oyununun oynanış videosu bulunmaktadır. Umarım sizde benim kadar keyif alırsınız.

İsterseniz geçen makalede anlattığım BoMan oyununun kodlamasından bahsedelim. Öncelikle karakterimizi hareket ettirelim.

  • Hareketten önce basılan tuşlar kontrol edilir.

  • Eğer yön tuşlarından birine basılmış ise  yürüme sesi çıkarılıp ben bu uygulamada özel bir ses dosyası olan tonysound.cs kullandım ilgili hareket işlemine başlanır.

  • Hareket sırasında oyundaki tüm bölümlere ait çıkış kordinatları ile kahramanımızın kordinatları konrol edilip bir sonraki level’e ilgili özellikler ile birlikte geçilip geçilmediğine bakılır. İlgili özelliklerden kasıt toplanan taş, para, hak ve özellik sayılarıdır.

  • Nitor’ya basılıp basılmadığı yani (shift tuşu) bakılarak hareket aralığı buna göre aşağıda görüldüğü gibi belirlenir. Ayrıca Kyle özelliği alınınca da hareket hızı aynı nitrodaki gibi arttırılmaktadır.

gameover

  • Yapılan hareketin yönüne göre tüm yaratıklar tek tek gezilerek yakınlarda yartık varmı diye bakılır. Varmı() methodu Path.cs altında tanımlı başka bir method’dur. Yakınlık derecesine göre ya takip işlemine başlanır ya da yaratığa dokunulmuş ise hem oyun başa döner hem de hakkımız -1 azalır. Eğer hiç hak kalmamış ise geri sayan bir ekranla karşılaşırız. Takip işlemine Path.cs’deki TakipVarmi() function’ı ile yapılır. İlgili kod aşağıdadır. TakipVarmı()’da kasıt BoMan yaratıklardan birine belirli bir mesafe yaklaşınca yaratık tarafından kovalanır. İşte belirlenen meseafeye gelinmiş mi diye bakılan method TakipVarmi() methodudur.
  • Path.cs’deki Varmı() function’ile hareket yapılınca taşlara gelinmiş ise taş yenir ve para 10 Tl artar. Ayrıca tüm taşlar yenmiş mi diye kotrol edilir. Tüm taşlar yenmiş ise çıkış kapısı açılır. Ayrıca gazlı bir içecek içilirse nitro özelliği dolar. İlgili kod aşağıdadır.
  • Yapılan hareketin ardından tüm buttonlar gezilerek, burada buttonlar duvarlar manasına geliyor; ilgili hareketi duvarların sınırları içinde yapılıp yapılmadığına kısaca herhangi bir duvar engeli olup olmadığına bakılır.

Level2

  • Yukarıdaki örnekte de görüldüğü gibi tüm yaratıklar önceden tanımlanan Timer ile belli bir alan içinde random olarak hareket ederler. Yaratıkların duvarları geçememesi ve kendilerine bellirlenen alanı geçmiş ise mesela takip anında tekrardan eski yerlerine dönmeleri Direction.cs’deki aşırı yüklenmiş diğer bir Move() methodu ile yapılır.
  • Canavarların her timer anında kendi sınırlarında olup olmadıkları değiller ise kendi sınırlarına gitmelerini Direcition.cs’deki Boundery() Move() method’u ile birlikte sağlamaktadır. Tüm levellerdeki yaratıkların sınırları bu method içinde tanımlıdır. İlgili kodlar aşağıdadır.

  • Levellar arasında haklar, para, toplanan taşlar ve özellik sayıları constructer’a parametreler atanarak aşağıda görüldüğü gibi atılmaktadır.

  •  Yaratık ‘da takip yoksa ve sınırı aşmamış ise yani kendisine belirlenen alan içinde ise, random hareketi aşağıda görüldüğü gibi önce random yön belirlenir, daha sonra Direction’daki Move() methodu ilgili parametreler ile aşağıda görüldüğü gibi çağrılır.

  • Eğer sınırı aşmış ise nitro açık bir şekilde kendisine belirlenen alana yine Direction.cs’deki Move() methodu ile hızlıca aşağıda görüldüğü gibi döner.

  •  Eğer yaratık için takip var ise BoMan’e X veya Y ekseninde random olarak nitro olmadan yaklaşılır. Yaklaşma komutu gene Direction.cs’deki Move() komutudur.

Tüm yukarıda bahsedilen bu işlemler bütün bölümlerdeki yaratıklar için geçerlidir.

Direction.cs (Boundery()) : Tüm levellerdeki yaratıklar için kendilerinen atanan lokasyonda olup olmadıkları aşağıdaki kod ile bakılır.

Direction.cs( Move()) : BoMan için geçerli hareket komutlarının ve ilgili hareket sırasında gerekli kontrollerin yapıldığı kodlar aşağıdaki gibidir.

Direction.cs(Move()): Yaratıklar için olan bu hareket komutlarının tanımlamdığı kısm aşağıda görüldüğü gibidir.

Path.cs (TakipVarmi()): Yaratıkların BoMa’e belli bir mesefe kadar yaklaşıp  takip sınırları içine girip girmediği aşağıdaki kodlar ile check edilir.

Path.cs (Varmi()):

form3

  • Form’larda yani bölümler geçilince çıkan ara ekranlarda para ile taş ve taş ile de özellik alınmaktadır. Örnek kod aşağıda görülmektedir. Bu örnek de diğer formlar ile aynı mantıkda çalışmaktadır.

Form3.cs: Tüm tanımlamalar ve InitializeComponent içerisi kodun rahat okunması için temizlenmiştir.

level1

 Level1.cs: Öncelikle  BoMan diğer 3 yaratık, toplanması gereken mavi taşlar , kırmızı taşlar, duvarlar ve giriş çıkış kapıları nesneleri tanımlanır. 6 tane timer tanımlıdır. Timer ve Timer2 nitronun zamanla artıp azalması için tanımlanmıştır. Timer3 oyun başlarken ki geri sayım amaçlı kullanılır. Timer4,Timer5 ve Timer6  oyundaki yaratıkların random hareketleri için tanımlanmıştır. “Esc” tuşuna basılınca oyundan çıkılır. “D” tuşuna basılınca oyun ve buna bağlı tüm timer’lar stop edilir. Kısaca pause edilir. Yaratıklar takip mesafesine girince htable[“monster2”] hastable’ına değer atanır. Ekranın sol üstünde siren ve takip eden yaratığın ismi yazılır. Kısaca takip eden yaratığın ismi hastable’a eklenir. Sonra da varmı diye aşağıdaki gibi bakılır.

 Level1.cs : Tüm tanımlamalar ve InitializeComponent içerisi kodun rahat okunması için temizlenmiştir.