Object-Oriented Software Engineering (CS319) dersi için bu dönem bir proje yapmamız gerekiyordu. Gurup arkadaşlarım Bomberman isimli oyunu yapmayı seçti, ve ben de Java ile oyunu yaptım.

Java ile daha önce baştan sona bir 2D oyun yapmadığım için çok eksiğim olduğunu gördüm. Yaklaşık üç ay boyunca çeşitli araştırmalar, deneme yanılmalar sonucunda oyunu final versiyonuna getirebildim. Temel olarak Space Bomber isimli bir flash oyununu aldığımız için, yaptığım oyunun teması ve ismi de Space Bomber oldu. Tabi tema olarak benim gibi birinden janjanlı, çiçekli böcekli bir oyun beklemek yanlış olur; dolayısıyla "You will never survive(Asla hayatta kalamazsın)" ve "Nobody survives forever(Kimse sonsuza dek hayatta kalamaz)" sloganları eşliğinde Alien vs Predator filmini de temanın içine katarak bir oyun yaptım.

Bir sonraki blog girdimde "Java 2D Game Programming" (Java ile 2 boyutlu oyun programlama) konusunda edindiğim tecrübeleri ve yaptığım kazmalıkları paylaşacağım. Tabi sizler de o zamana kadar oyunu deneyebilirsiniz.

Oyunu indirdikten sonra zip dosyasından çıkararak klasörün içinde bulunan SpaceBomber Launcher.cmd isimli dosyayı çift tıklayarak çalıştırabilirsiniz. Linux için çıkardığınız klasörün içine gelerek Terminal açtıktan sonra java SpaceBomber yazarsanız oyunu açabilirsiniz. Tabi oyunu çalıştırmak için bilgisayarınızda Java yüklü olması gerekiyor. JRE'yi yüklemek için buraya tıklayarak gerekli adımları izleyebilirsiniz.

İngilizce eğitim gördüğüm için projenin tamamı da İngilizce durumda. O yüzden burada birkaç bilgi vermem gerekiyor.

Oynanış:

- Bomberman'i hareket ettirmek: Ok tuşları
- Bomba bırakmak: Space tuşu
- Oyunu durdurmak: P
- Durdurulan oyunu devam ettirmek: P
- Menüye dönmek: ESC
- Bombayı patlatmak: Enter (gerekli bonusu almış olmanız gerekir)

Oyunda yapmanız gereken belirli süre içerisinde ekrandaki tüm düşmanları öldürerek tellerin arkasında saklı olan kapıyı bularak bir sonraki seviyeye geçmek. Eğer süre biterse ekrana 4 adet 4. seviye düşman girecektir. Eğer kapıyı patlatırsanız, ekrana 3 adet 2. seviye düşman girecektir.
Tellerin altında bonuslar çıkabilir. Bir bölümde 1 veya 2 bonus olabilir, veya hiç bonus olmayabilir. Şansınıza ve arama yeteneğinize bağlı.

Seviye sınırı yok, en az 1 canınız olduğu sürece istediğiniz kadar ilerleyebilirsiniz. Ben mesela deneme amaçlı 100. bölüme kadar geldim :)

Bonuslar, Düşmanlar vs.

Oyunda 6 adet bonus var:
- Bombanın menzilini artıran
- Bırakabileceğiniz bomba sayısını arttıran
- Bombayı süreyle değil de Enter ile patlatmanızı sağlayan
- Bir adet ekstra can veren (çok ihtiyacınız olacak)
- 20 saniye süreyle daha hızlı hareket etmenizi sağlayan
- 15 saniye süreyle sizi dokunulmaz yapan (ateşlerden ve düşmanlardan etkilenmeyeceğiniz gibi size dokunan düşmanlar da ölecektir.)
bonuslar mevcut. Genellikle simgelerinden belli, eğer bir bomba ve bir kutu olan bir bonusun ne olduğunu anlamadıysanız, dinamit patlatmada kullanılan kutuyu bilmiyorsunuz demektir. Enter ile bomba patlatma bonusudur o.

Düşmanlar ise 4 türden oluşuyor. 2. ve 4. seviye düşmanlar tellerin üzerinden geçebilirler. 3. ve 4. seviye düşmanlar ise sizin iki katınız hızla hareket ederler. Hepsi farklı puanlar vermektedir, en zoru en fazla puan verir.

Kaydetme, Yükleme, Ayarlar

Oyuna başladıktan sonra ESC ile menüye dönerek oyunu Save butonu ile kaydedebilirsiniz. Kaydettiğiniz oyunu Save/Load butonuna tıklayarak göreceğinis kayıt listesinden Load ile yükleyebilirsiniz. Yüklediğiniz oyun aynı seviyeden aynı özellikleriniz ile baştan başlayacaktır. Yani checkpoint sistemi yok.

Oyun başlarken ekran kartınızı tanımlayacak ve yeterli özellikleri sergiliyorsa eğer rendering işini ekran kartınıza yükleyecektir. Bu aşamada sizden Direct3D veya OpenGL seçmenizi isteyecektir. Eğer windows makinedeyseniz herhangi birini seçebilirsiniz, eğer Linux veya Mac'teyseniz OpenGL'i seçmelisiniz, çünkü Direct3D sadece Windows platformuna özgü bir kütüphanedir. Seçiminizi daha sonra Change Settings kısmından değiştirebilirsiniz.

Bilinen sorunlar

Eğer Linux'ta çalıştırıyorsanız Sun Java'yı defult yaptığınza emin olun, çünkü OpenJDK istenen performansı vermiyor. Ayrıca bazı Linux makinelerde ses kütüphaneleri sıkıntı çıkarabilir.

Oyun motorunda bir optimizasyon hatası var. Ne olduğunu bulamadım henüz maalesef. Oyun 5. seviyeden sonra kasmaya başlayabilir. Sizin makinenizde değişiklik de gösterebilir. Eğer böyle bir sorunla karşılaşırsanız oyunu kaydedip kapatın. Tekrar açarak kaydettiğiniz oyunu yükleyin. Evet, belki seviye yeniden başlayacak; ama en azından performans sorunu yaşamazsınız. Eğer hatayı bulursam düzeltilmiş versiyonu yayınlarım.


Her türlü sorun ve öneriyi buraya yorum olarak ekleyebilirsiniz. Sağda solda paylaşmak istiyorsanız paylaşabilirsiniz, ne de olsa kaynak kodu bende. Ama ben yaptım diye yedirmeye kalkmayın, yemezler; ayrıca Bilkent Güz dönemi projesi olduğu için resmiyete sahiptir.

-Bomberman resimlerini buradan aldım: http://sourceforge.net/projects/javabomberman/
GIF haline kendim getirdim.
-Düşman resimlerini buradan aldım: http://www.iconarchive.com/category/movie/alien-vs-predator-2-icons-by-iconshock.html
- Oyundaki sesler ücretsiz ses efektleri bulabileceğiniz sitelerden indirilmiştir.
- Onun dışında kalan tüm resim ve kodlamayı ben yaptım. Dolayısıyla copyright'ı benim üstümedir, izinsiz ve görgüsüz bir şekilde kullanmayın.

Edit: 23.12.2010 itibariyle ufak birkaç güncelleme ekledim. Genellikle optimizasyon.
Halen linux'ta keylistener'ın overbuffer olması sorununu çözebilmiş değilim.

Edit: 30.12.2010 itibariyle ufak birkaç güncelleme ekledim. Arka plan müziği ve yaratıkların tellerin üstünden geçmek yerine altından geçmesi.

Edit: 11.11.2011 Linux olayının neden kaynaklandığını çözdüm; ama üzerinden bir yıl geçmiş bir projenin kodlarını tekrar açmak istemiyorum.

  Space Bomber v1.0.2 (668,8 KiB, 478 indirilme)


İyi eğlenceler!