Proje Nasıl Başladı?
Oyun geliştirmeyi öğrenirken yalnızca küçük örnekler yapmak yerine üzerinde uzun süre çalışabileceğim gerçek bir proje geliştirmek istedim. Böylece Karanlık Madenci fikri ortaya çıktı.
Temel fikir, oyuncunun yer altında ilerleyerek farklı madenleri toplaması ve kazandığı kaynaklarla yeni özelliklerin kilidini açması üzerine kurulu.
Proje ilerledikçe başlangıçta basit görünen madencilik sistemi; envanter, ekonomi, yardımcı karakterler, dinamit, görevler ve mobil kontrol gibi birçok farklı sisteme dönüştü.
Godot ve GDScript ile Çalışmak
Bu proje Godot motorunu daha iyi anlamamı sağlayan en önemli çalışmalarım arasında yer aldı. Sahne yapısı, node sistemi, sinyaller ve GDScript kullanarak farklı oyun sistemlerini birbirine bağlamayı öğrendim.
Özellikle bir özelliği tek bir büyük script içerisine koymak yerine oyun sistemlerini daha düzenli parçalara ayırmanın geliştirme sürecini kolaylaştırdığını fark ettim.
TileMap ve Madencilik Sistemi
Oyunun temel mekaniklerinden biri blokları kırarak maden toplamaktı. Bunun için Godot'un TileMap sistemiyle çalıştım. Toprak, taş, demir, kömür, altın ve elmas gibi farklı blok türlerini ayırmam gerekiyordu.
Oyuncunun tıkladığı blok ile karakter arasındaki mesafenin kontrol edilmesi de önemliydi. İlk denemelerde oyuncu çok uzaktaki blokları bile kırabiliyordu.
KARŞILAŞTIĞIM PROBLEM
Ekran koordinatları ile TileMap koordinatlarının birbirinden farklı olması nedeniyle madencilik mesafesi yanlış hesaplanıyordu.
TileMap'in local_to_map ve map_to_local dönüşümlerini kullanarak oyuncunun ve seçilen bloğun doğru tile konumlarını hesaplamayı öğrendim.
Envanter ve Ekonomi
Oyuncunun sınırsız miktarda maden taşıması oyunun ilerleme sistemini anlamsız hale getiriyordu. Bu nedenle kapasitesi sınırlı bir çanta sistemi oluşturdum.
Toplanan maden türüne göre farklı değerler belirledim. Böylece değerli madenleri bulmak oyuncu için daha anlamlı hale geldi.
Kömür
Kaynak
Demir
Kaynak
Altın
Değerli
Elmas
Nadir
Çanta
Kapasite
Para
Ekonomi
Dinamit Mekaniği
Oyuncuya yalnızca tek tek blok kırmaktan farklı bir seçenek sunmak için dinamit sistemi geliştirdim.
Oyuncu dinamit moduna geçtiğinde belirli bir mesafe içerisindeki alana dinamit bırakabiliyor. Kısa bir süre sonra patlama gerçekleşiyor ve çevresindeki bloklar kırılıyor.
Bu özellik üzerinde çalışırken zamanlayıcı kullanımı, etki alanı hesaplama, madenleri toplama ve görsel geri bildirim gibi birçok sistemi birlikte kullanmam gerekti.
Mobil Kontroller
Oyunu Android cihazlarda çalıştırmaya başladığımda bilgisayarda düzgün görünen kullanıcı arayüzünün telefonda aynı şekilde görünmediğini fark ettim.
Sol, sağ, zıplama ve dinamit gibi kontroller için özel mobil butonlar hazırladım. Ekran çözünürlükleri değiştikçe butonların doğru konumda kalması için arayüzü daha responsive hale getirmem gerekti.
Buradan çıkardığım ders
Bir oyunun bilgisayarda çalışması mobilde de aynı şekilde çalışacağı anlamına gelmiyor. Kontrolleri, arayüzü ve ekran oranlarını gerçek cihaz üzerinde test etmek gerekiyor.
Oyunu Sadece Koddan İbaret Görmemek
Proje geliştikçe ana menü, ayarlar, görevler, atölye, yardımcı karakterler ve farklı kullanıcı arayüzleri üzerinde de çalıştım.
Bu süreç, kullanıcı arayüzünün oyun deneyiminin önemli bir parçası olduğunu daha iyi anlamamı sağladı. Bir özellik teknik olarak çalışsa bile oyuncu onu kolayca anlayamıyorsa sistem henüz tamamlanmış sayılmıyor.
Bu Projede Neler Öğrendim?
GODOT
Node ve Sahne Yapısı
Farklı oyun sistemlerini sahneler ve node'lar aracılığıyla daha düzenli yönetmeyi öğrendim.
GDSCRIPT
Oyun Mantığı
Karakter hareketinden ekonomi sistemine kadar farklı mekanikleri kodlayarak GDScript pratiği kazandım.
DEBUG
Hata Ayıklama
Hataların yalnızca sonucuna değil, hangi koordinat, değişken veya sistemden kaynaklandığına bakmayı öğrendim.
MOBİL
Gerçek Cihaz Testi
Mobil arayüz ve kontrollerin gerçek Android cihazlarda düzenli olarak test edilmesi gerektiğini öğrendim.
Sonuç
Karanlık Madenci benim için yalnızca bir oyun projesi değil, aynı zamanda oyun geliştirme konusunda öğrendiklerimi gerçek bir projede birleştirebildiğim bir çalışma oldu.
Her yeni özellik yeni bir problem ortaya çıkardı ve bu problemleri çözmeye çalışmak Godot ve programlama konusunda daha fazla deneyim kazanmamı sağladı.
Projeyi geliştirmeye devam ettikçe yeni sistemler eklemeyi, mevcut mekanikleri iyileştirmeyi ve oyunu daha tamamlanmış bir ürün haline getirmeyi hedefliyorum.