Kızım için, onunla beraber çok uzun zamandır bir oyun yazmayı planlıyordum, geçen 1 mayıs tatilinde ailece yaptığımız Eskişehir gezisi sonrasında Aizanoi antik kentinin de atmosferi ile konu gene alevlendi. Ilgın’ın hayalindeki oyununun hikayesini beraberce kurgulamaya başladık.

ilgin_zeus

Ilgın Zeus Tapınağı’nda
Zeus Tapınağı

Ilgın’ın hikayesinin kahramanı, çeşitli tehlikeli görevleri başardıktan sonra, büyücünün kara kitabına ulaşıp, ülkeyi esir alan büyüyü kaldıracaktır. Yalnız yine Ilgın’ın kurgusuna göre, oyunun başında oyuncu ana karakterin özelliklerini (cinsiyet, büyü gücü, dövüş gücü vs..) belirleyecek ki bu da oyunu biraz adventure biraz da rpg temelli hale getiriyor.

Ilgın’ın her oynadığında farklı bir oyun oynuyormuş hissini alması için, her seviyenin (Ilgın’a göre her görevin) farklı bir harita üzerinde geçmesini hedefledim (Eh bu da işin içine rogue-like oyunu sokuyor). Aynı seviyenin her oynanışında farklı bir haritada geçmesi ise işleme dayalı harita üretimi (procedural map generation) anlamına geliyor.

Peki, her seferinde rassal olarak üretilen ama mantıklı görünen bir haritayı / zindanı nasıl oluşturabiliriz şeklindeki araştırmalarım beni hücresel otomatlara (cellular automaton) kadar götürdü. Hücresel otomatların belki de en bilineni Conway‘in Hayat Oyunu.

Bu oyunda kurallar çok basit aslında,

  • Bir canlı hücrenin, iki’den daha az canlı komşusu varsa “yalnızlık nedeniyle” ölür
  • Bir canlı hücrenin, üç’ten daha fazla canlı komşusu varsa “kalabalıklaşma nedeniyle” ölür
  • Bir canlı hücrenin, iki ya da üç canlı komşusu varsa değişmeden bir sonraki nesile kalır
  • Bir ölü hücrenin tam olarak üç canlı komşusu varsa canlanır.

Her ne kadar bu algoritmanın bir çok uygulaması varsa da, bizim baba-kız oyunumuzda kullanacağım harita üretim algoritmasını anlayarak geliştirebilme adına bir tane de ben yazdım.

Hayat Oyunu

Hayat Oyunu

Uygulama Python 3 ile geliştirildi, sonraki aşamalarda testi kolaylaştırmak adına grid üzerinde canlı / ölü hücre ekleme ve hem başlangıç durumunu hem de mevcut durumu kaydedip, yükleme özelliğine sahip.

Kaynak kodlarına https://github.com/ctengiz/pygol adresinden ulaşabilirsiniz.

Hala daha hem Ilgın’ın hem de benim yapacak çok işimiz var. Ilgın hikayeyi tamamlayacak, ben de kodlayacağım. Gelişmeleri paylaşmaya devam edeceğiz…