İçeriğe geç / Skip to content / Zum Inhalt

Ölçülmüş Metriklerle Seviye Tasarımı ve Test Botu

Ahmet Balaman

6 dk okuma

Vibe CodingBOINGWARDGodotSeviye TasarımıOyun TasarımıTestClaude Code
Ölçülmüş Metriklerle Seviye Tasarımı ve Test Botu

Bir platform oyununda en sinir bozucu şey, ulaşılması imkânsız bir platformdur. Oyuncu yirmi kez dener, sonra oyunu siler. Yapay zekâ ajanları parkuru çok hızlı üretebiliyor; ama hızlı üretilen bir parkurun gerçekten geçilebilir olduğunu kim kanıtlayacak?

BOINGWARD'da bunun cevabı iki parçalı: parkurlar elle seçilmiş sayılarla değil, pogonun ölçülmüş hareket değerleriyle üretiliyor ve her parkuru gerçek pogo fiziğiyle oynayan bir bot var. Bu yazı ikisini ve madalya sürelerinin aynı bottan nasıl çıktığını anlatıyor. Pogonun nasıl zıpladığını fizik yazısında, oyunun genel hikâyesini serinin merkez yazısında bulabilirsiniz.

Önce ölç, sonra çiz

Tasarım belgesindeki kural "önce metrikler": fizik ayarı oturduktan sonra standart zıplama yüksekliği, en uzun atlayış ve havada kalma süresi ölçülür, platform kiti bu sayıların etrafında kurulur. BOINGWARD'da bu ölçümler tek bir dosyada, CourseMetrics içinde duruyor. Hepsi saniyede 60 fizik adımında, ekransız çalıştırılan bir testle ölçüldü:

Ölçü Değer Anlamı
En düşük zıplama tepesi 3,0 m En yavaş fırlatmada ucun platformdan yüksekliği
Kararlı zıplama tepesi 4,0 m Kombo oturduktan sonra, girdi yokken
İki zıplama arası 1,18 s Düz zeminde kararlı durumda
Duruştan ilk atlayış 8,7 m Çubuk tam ileri, yeniden doğduktan hemen sonra
Koşarak en uzun atlayış 10,2 m Yatay hız sınırı bunu tutuyor
Gereken tavan boşluğu 7,5 m Kararlı tepe + gövde + pay

Parkur üreten araç bu sayıları doğrudan kullanmıyor, oranlarını kullanıyor. Fizik ayarı değişince ölçümler yenileniyor, parkur tools/build_course.gd ile yeniden üretiliyor ve aradaki her boşluk kendiliğinden yeni ölçüye uyuyor.

En kötü durum: yeni doğmuş bir oyuncu

Gerekli her boşluk, "koşarak en uzun atlayış"a göre değil, "duruştan ilk atlayış"a göre ölçülüyor. Sebep basit: oyuncu düşüp bir kontrol noktasında yeniden doğduğunda hızı sıfır. Parkur yalnızca hız kazanmış bir oyuncunun geçebileceği bir boşluk içeriyorsa, o noktadan sonra her düşüş oyuncuyu çıkmaza sokar.

Spire parkurunun testleri bu yüzden iki sınır koyuyor:

  • Gerekli bir boşluk, duruştan ilk atlayışın en fazla yüzde 60'ı olabilir: 8,7 x 0,6 ≈ 5,2 metre.
  • Bir basamak, en düşük zıplama tepesinin en fazla yüzde 75'i kadar yukarıda olabilir: 3,0 x 0,75 = 2,25 metre.

Uzun tırmanış modunda sınırlar biraz daha sıkı: boşluk için yüzde 55, yükseklik için yüzde 70. Trambolin ve top gibi fırlatıcılardan sonraki atlayış ise o fırlatıcının kendi tepesinin yüzde 75'ini geçemiyor.

Okunabilirlik de test ediliyor

Tasarım belgesinde zorluk sırası yazılı: önce geniş ve sabit platformlar, sonra boşluklar, dar pedler, eğimler, hareketli platformlar, zincirleme hassas inişler, toparlanma yolları ve en sonda uzman kestirmeleri. Her adımda tek bir yeni "fiil" öğretiliyor.

Parkur testleri bu sırayı korumanın yanında başka şeyleri de ölçüyor: platformların üstünde 7,5 metrelik boşluk var mı (pogonun kafası bir sonraki platforma çarpmasın), oyuncu bir sonraki bir ila üç hedefi görebiliyor mu ve parkurun tamamı telefon bütçesinde mi. Spire için sınır 60 çizim çağrısı ve 40.000 üçgen; oyuncu, arayüz ve gökyüzü hariç.

Kontrol noktaları da bir kuralla değişti. İlk sürümde oyuncu kontrol noktasının görünmez hacmine girdiği an kayıt alınıyordu; havada geçerken bile. Şimdi kontrol noktası ancak pogonun ucu pedin üstüne indiğinde sayılıyor. Spire beş kontrol noktası ve bir bitişten oluşuyor; bitiş de aynı kurala tabi.

Bot: her atlamayı gerçek fizikle denemek

Statik kurallar "kâğıt üzerinde mümkün" der. Gerçekten mümkün olduğunu göstermek için bir bot, parkuru gerçek PogoController ile oynuyor. Botun yöntemi, bir oyuncunun düşünme biçimine benzetilerek yazıldı:

  • Atlama atlama: Her deneme bir önceki platformda yeniden doğarak başlıyor. Böylece bir atlamanın başarısı, önceki atlamanın şansına bağlı kalmıyor.
  • Bir kez karar ver: Bot hedefe ancak bir sonraki zıplama yaklaşırken karar veriyor, tıpkı bir oyuncunun ne zaman atlayacağını seçmesi gibi. Karar verdikten sonra fikir değiştirmiyor; yalnızca havada yön düzeltiyor.
  • Yaklaşma atlayışı: Hedef, rahat erişimin ötesindeyse bot önce bulunduğu platformun kenarına doğru küçük bir atlama yapıyor.
  • Hareketli hedefler: Bot hareketli platformun iniş anındaki konumunu tahmin ediyor. Zamanlamaya bağlı hedefler için üç farklı fazda deniyor; birinde inmesi yeterli. En yavaş mekanizmanın iki tam turunu bekleyebilecek kadar zamanı var.
  • Zamanlı platformlar: Kırılan cam ya da çöken plaka gibi parçalar, bot başlamadan önce ilk hâllerine döndürülüyor ve bot ancak ilk iniş tutacakken yola çıkıyor.

Uzun tırmanış modunda aynı yaklaşımın daha büyük bir sürümü çalışıyor: bot en alttan zirveye kadar 804 atlayışın her birini gerçek pogoyla iniyor; test yaklaşık 20 saniye sürüyor. Bot numara yapmıyor; hiçbir platform numara gerektirmemeli.

Bot insandan iyi pilottur

Botun kodundaki bir yorum, bütün yaklaşımın özeti: "Bot bir insandan daha iyi pilot; bu yüzden adalet kontrolü yerleşimin statik sınırlarıdır, bot yalnızca fiziksel olarak ulaşılabildiğini kanıtlar."

Bu ayrım önemli. Bot milisaniye hassasiyetinde yön veriyor ve hiç yorulmuyor. Botun geçebildiği her atlayış oyuncu için adil değildir. O yüzden iki ayrı kontrol var ve ikisi de geçmek zorunda: statik sınırlar "bir insan için makul mü?" sorusunu, bot "gerçek fizikle gerçekten mümkün mü?" sorusunu cevaplıyor. Bot geçemiyorsa parkur kesinlikle yanlış; bot geçiyorsa bu yalnızca gerekli bir şart.

Madalya süreleri bottan geliyor

Madalyaları tahminle koymak kolay ama tutarsız: parkur değişince süreler ya imkânsızlaşıyor ya da anlamsızlaşıyor. BOINGWARD'da temel süre, temiz bir koşunun ölçüsünden hesaplanıyor:

temel süre = atlayış sayısı x 1,18 s + zamanlı parça sayısı x 2,5 s

Spire'ın seviye verisinde 61 atlayış ve beklemeyi gerektiren 9 parça hesaba katılıyor: 61 x 1,18 + 9 x 2,5 ≈ 94,5 saniye. Madalyalar bunun katları:

Madalya Çarpan Süre
Altın 1,3 2:02,8
Gümüş 1,8 2:50,1
Bronz 2,8 4:24,5

Süreler kodda değil, data/levels/spire.tres dosyasında; seviye verisini üreten betik her çalıştığında temel süreyi yeniden hesaplıyor. Parkur değişirse madalyalar kendiliğinden yeni rotaya uyuyor; elle güncellenmesi gereken tek şey çarpanlar. Uzun tırmanış modunda madalya yok; orada en iyi yükseklik ve zirve süresi tutuluyor.

Telefon bütçesi de bir seviye kuralı

Uzun tırmanış modunda performans da yerleşimin parçası. Kule 24 metrelik dilimlere bölünüyor ve her dilimde en fazla üç hareketli ve iki sabit kit parçası olabiliyor. Bütçe dolarsa sıradaki kit parçası, o bölgenin sade bir dekoruyla değiştiriliyor; ama fırlatıcılar asla değiştirilmiyor, çünkü sonraki atlayış onların tepesine göre hesaplanmış. En kötü bakış açısında 40 çizim çağrısı ve yaklaşık 38.000 üçgen ölçüldü.

Sık Sorulan Sorular

Platform oyununda boşluk mesafesi nasıl belirlenir?

Karakterin en kötü durumdaki atlayışını ölçün: çoğu zaman yeniden doğduktan hemen sonraki, hızsız ilk atlayış. Gerekli boşlukları bunun bir oranı (BOINGWARD'da yüzde 55 ile 60 arası) olarak tutun. Daha uzun boşluklar ancak isteğe bağlı kestirmelerde olsun.

Seviye testi için bot yazmaya değer mi?

Parkur kodla ya da yapay zekâ ajanlarıyla üretiliyorsa kesinlikle. Bot, bir platformun gerçek fizikle ulaşılabilir olduğunu her değişiklikten sonra saniyeler içinde kontrol ediyor. Ama bot insandan iyi oynadığı için adaletin ölçüsü olamaz; onun için ayrıca statik sınırlar gerekiyor.

Madalya süreleri nasıl hesaplanmalı?

Elle tahmin etmek yerine temiz bir koşunun süresinden türetin: atlayış sayısı çarpı havada kalma süresi, artı zamanlamalı parçalar için bekleme. Madalyalar bu sürenin katları olsun. Parkur değişince süreler kendiliğinden güncellenir.

Yorumlar