Geliştirici günlüğü

Geliştirici Günlüğü #12: Zaman serileri ve adla veri okuma

Oyun grafikleri değerleri dönem başında nasıl örnekler? Adla okuma, saklama süresi ve sınırlar.

İçindekiler
Duvarda bir takvim; pirinç iğneler ay başlarını işaretliyor. Önündeki açık defterde noktalı küçük bir çizgi grafiği var

Kısaca: Strateji oyununda bir kentin nüfusunu ya da hazinenin durumunu yıllar boyunca izlemek için her adımda değer saklamak gerekmez. MKA Engine, oyun içeriğinde bildirilen bir zaman serisinden (time series) her dönemin başında bir örnek alır ve ön yüz bu seriyi adıyla okur. Yanlış tanımlanmış bir dönem motoru çökertmez; hatanın dosyasını, satırını ve sütununu gösterir.

Neden her adımda değil, dönem başında?

Bir kentin nüfus grafiğini düşün. Her günü saklasan yüzlerce nokta çıkar, ama oyuncunun sorduğu soru çoğu zaman ay sonu ya da yıl sonu sorusudur: "geçen yıl nüfus ne kadar arttı?" Zaman serisi bu yüzden her dönemde bir örnek tutar.

Zaman serisi, bir değerin zaman içinde sıralı ölçümlerinden oluşan dizidir (NIST İstatistik El Kitabı (yeni sekmede açılır); Vikipedi, Time series (yeni sekmede açılır)). Bizde dönem takvimle belirlenir: gün, ay ya da yıl. Örnek, dönemin ilk adımında alınır: günün ilk adımı, ayın ilk gününü içeren adım ya da yılın ilk gününü içeren adım.

Adım haftalık ya da aylık da olsa kural aynıdır. Ay başı bir haftanın ortasına düşerse o ayın örneği o haftanın adımında alınır; aynı ay içinde ikinci bir örnek alınmaz. Testler bunu haftalık adımlarda sınar.

Bir seri neyi bildirir?

Oyun bir seriyi içerik kaydında dört bilgiyle tanımlar. Kod yazılmaz.

AlanAnlamıÖrnek
KaynakÖrneklenecek sayı sütunuBir kentin nüfus sütunu
ToplamaToplam ya da satır başına ayrı örnekBütün kentlerin toplamı ya da her kent için ayrı çizgi
DönemGün, ay ya da yılAylık: her ayın ilk adımı
SaklamaTutulan dönem sayısı12: son on iki ay
Seri tanımının alanları

Saklama süresini aşan eski örnekler silinir; tablo sınırsız büyümez.

Ön yüz adla okur

Grafik çizen ön yüz seriyi adıyla ister. Motor örnekleri dönem sırasıyla verir; her örnekte dönem, tablo, varlık (hangi kent, ya da toplam serisinde hiçbiri) ve değer bulunur. Çizimi, ölçeği ve açıklamayı ön yüz yapar; motor yalnız sayıyı verir.

Tek bir değer de adla okunur. Veri bağlaması bir adı ya bir kapsam satırının değerine ya da bir çarpan toplamına bağlar. Çarpan toplamında motor sayının yanında onu oluşturan kaynakları da verir: hangi varlıktan hangi miktarın geldiğini. Böylece ön yüz "bu sayı neden bu" sorusunu kendi ekranında cevaplayabilir. Çarpanların ne olduğu olaylar ve çarpanlar günlüğünde anlatılmıştır.

Hata nerede gösterilir?

Oyun içeriğinde adım uzunluğundan ince bir dönem yazılırsa, örneğin haftalık adımda günlük bir seri, içerik yüklemesi durur ve hatanın yeri gösterilir: dosya, satır ve sütun. Bu bir motor hatası değil, oyun verisindeki bir hatadır; bu yüzden motor paniklemez. Bozuk bir veri bağlaması ile sıfır ya da kesirli bir saklama süresi de dosya, satır ve sütunuyla reddedilir. Aynı adla iki seri de içerik yüklenirken reddedilir.

Kayıt ve yükleme

Örnekler oyun dünyasının parçasıdır ve kayda girer. Kaydedilip yüklenen oyun, kesintisiz oynanan oyunla aynı örnekleri ve bir sonraki örneklenecek dönemi gösteren imleci taşır; yüklenen oyun kaldığı yerden aynı biçimde devam eder. Bunu hem motorun hem okuma katmanının testleri sınar.

Bedeli ne?

  • Örnek dönemde bir kez alınır. İki örnek arasındaki değişim görünmez: aylık bir seri ayın içindeki dalgalanmayı göstermez. Daha sık görmek gerekirse oyun daha kısa bir adım ve dönem seçer.
  • Saklanan her örnek kayıtta yer tutar; saklama süresi ve satır sayısı büyüdükçe kayıt da büyür. Bu maliyeti ölçmedik.
  • Bu günlükte süre ya da bellek ölçümü yok. Anlatılan davranış testlerle sınandı; hız ve bellek ölçülmedi.

Sık sorulanlar

Oyunda zaman serisi nasıl tanımlanır?

Oyun içerik kaydında serinin adını, örneklenecek sayı sütununu, toplam ya da satır başına biçimini, dönemini ve saklama süresini yazar. Bunun için kod yazılmaz.

Seri her adımda mı örneklenir?

Hayır. Her dönemin ilk adımında bir kez örneklenir: gün, ay ya da yıl. Adım haftalık ya da aylık olsa da örnek dönemin başladığı adımda alınır.

Ön yüz seriyi nasıl okur?

Adıyla. Motor örnekleri dönem sırasıyla verir; her örnekte dönem, varlık ve değer bulunur.

Yanlış tanımlanmış bir seri ne yapar?

Motor çökmez. İçerik yüklemesi durur ve hatanın yerini gösterir.

Kaynaklar ve kayıtlar

Dış kaynaklar: NIST İstatistik El Kitabı, zaman serisi tanımı (yeni sekmede açılır), Vikipedi, Time series (İngilizce) (yeni sekmede açılır).

İlgili günlükler: Dünyanın bellekteki hali, Olaylar ve çarpanlar.

Bu günlük hakkında sorularınız ya da önerileriniz varsa iletişim sayfasından yazabilirsiniz. Motorun genel tanıtımı için MKA Engine sayfasına, bütün günlükler için Geliştirici Günlükleri listesine bakabilirsiniz.

Kaynaklar ve ilgili belgeler

Bunlar da ilginizi çekebilir