Bursa Teknik Üniversitesi, Bilgisayar Mühendisliği Bölümü.
Geliştiriciler: Mustafa Mert ve Efe Aslan.
Projenin temel amacı, son yıllarda yapılmış olan oyun geliştirme yarışmalarından seçtiğimiz bir oyunun temel mekaniklerini HTML5 ve JavaScript ile "canvas" kullanarak geliştirmektir.
Oyunun Zorluğu ve Hedefi: Oyuncunun temel hedefi, mermilerini idareli kullanarak düşmanları yok etmek ve engelleri aşmaktır. Geri tepme (recoil) mekaniği sayesinde oyuncular, silah ateşlendiğinde oluşan itici gücü platformlar arası geçişte stratejik bir avantaj olarak kullanmalıdır.
- Oynanabilir Web Sürümü (GitHub Pages): https://mustafamrtt.github.io/platformer/
- Itch.io Sayfası: https://poonch.itch.io/recoil
- GitHub Kaynak Kodları: https://github.com/mustafamrtt/platformer
- Nişan Alma ve Ateş Etme: Farenin (crosshair) konumu ile hedeflenir ve fare tıklaması ile ateş edilir.
- Hareket ve Zıplama: Karakter sağa/sola koşabilir ve yerdeyken zıplayabilir.
)
Oyunun fizik motoru, gerçek dünya dinamiklerinin oyuna uyarlanmasıyla oluşturulmuştur.
- İvmelenme ve Sürtünme: Karakterin hareketi anlık duruşlar yerine sürtünme katsayısı (friction: 0.125) ile sönümlenir.
- Yerçekimi: Sürekli uygulanan dikey ivme (gravity: 0.1), karakterin boşlukta düşmesini sağlar.
- Zıplama: Karakter sadece yerdeyken (isOnGround) tetiklenen bir dikey hız (-5.0) değişimi ile zıplar.
- DeltaTime (Kare Bağımsız Hız): Karakterin hızı her karede deltaTime ile çarpılarak güncellenir; böylece donanım performansından bağımsız sabit bir oyun hızı sunulur.
- Vektörel Geri Tepme (Recoil): Silah ateşlendiğinde, merminin çıkış açısının tam tersi yönünde karaktere bir itme kuvveti (impulse: 7.0) uygulanır.
- Düşmanlar (Enemies): Temas edildiğinde karakteri öldüren ve vurulduğunda animasyonunu tamamlayarak bellekten silinen sınıflardır.
- Tuzaklar (Spikes): Mermilerden etkilenmeyen, ancak temas anında bölümü başa döndüren statik engellerdir.
- AABB Collision (Çarpışma Testi): Tüm objeler arasındaki etkileşim, dikdörtgen sınırlayıcı kutuların kesişimini kontrol eden bir algoritma ile yönetilir.
- Görsel ve Animasyon Sistemi: Karakter animasyonları tek bir görsel üzerinden kare kare okunur (Sprite Sheet). Hareket yönüne göre context.scale(-1, 1) komutu kullanılarak varlıklar aynalanır.
Mustafa Mert Oyunun temel omurgasından, performansından ve fizik kurallarından sorumludur.
- requestAnimationFrame kullanarak ana oyun döngüsünün (gameLoop) kurulması ve deltaTime optimizasyonunun yazılması.
- Karakterin yerçekimi, zıplama ve sürtünme dinamiklerinin matematiksel olarak koda dökülmesi.
- Karakterin platformlarda durabilmesini ve dikenlere (Spike) çarptığında ölmesini sağlayan Eksen Hizalı Çarpışma (AABB Collision Detection) algoritmasının yazılması.
- Karakter ilerledikçe platformların ve engellerin geriye doğru akmasını sağlayan kaydırma (offset) mantığının ayarlanması.
Efe Aslan Oyunun içindeki aktörlerin, savaş mekaniklerinin ve görselliğin kodlanmasından sorumludur.
- Düşman (Enemy), Mermi (Bullet) ve Silah (Rifle) gibi oyun objelerinin Nesne Yönelimli Programlama (OOP) mantığıyla bağımsız sınıflar olarak yazılması.
- Fare (crosshair) açısına göre trigonometrik hesaplamalarla (Math.cos / Math.sin) mermi yönünün belirlenmesi ve Geri Tepme (Recoil) fiziğinin uygulanması.
- Sprite Sheet görsellerinin parçalanarak kare kare oynatılması ve karakterin yönüne göre görsellerin aynalanması (context.scale).
- Ses efektlerinin eklenmesi ve mermi sistemi yönetimi.

