1 Ağustos 2014 Cuma

Akıl Oyunları #3 - Python ile Taslak Oluşturma

Öncelikle bu bölüm için tahmin edebileceğinizden daha fazla uğraştığımı ve çok zahmetli olduğunu itiraf etmeliyim. Her ne kadar algoritma sorunsuzmuş gibi görünse de programın düzgün bir şekilde çalışabilmesi için ciddi anlamda zaman harcadım, hem de böylesi kısa bir script için.

Solda yer alan resimde de görüldüğü gibi örnek olarak oluşturulan 8*8 boyutlu karede rastgele bir başlangıç noktası (x,y) belirledik. Başlangıç noktasından gidilebilecek olası yerleri de olası hareket notları olarak işaretledik. Bulunduğumuz hücre neresi olursa olsun, gidebilmemiz için kontrol etmemiz gereken noktalar, o noktaya solda gösterilen noktalar kadar uzak olmalı.

Başlangıç noktası: (x,y)
a ==> (x, y+3)
b ==> (x-2, y+2)
c ==> (x-3, y)
d ==> (x-2, y-2)
e ==> (x, y-3)
f ==> (x+2, y-2)
g ==> (x+3, y)
h ==> (x+2, y+2)

Başlangıç noktasına göre olası hareket noktalarının uzaklıklarını belirlemiş olduk.
Bunları kabaca yazdıktan sonra daha öncelikli işlerimizi yapmamız lazım. Oyunu oynamamız için gerekli olan "board"u oluşturalım. Yani daha açık bir şekilde söyleyecek olursak, oyunu oynayacağımız n*n'lik kareyi oluşturmamız lazım.
Bu şekilde bir kare oluşturmak için aklıma gelen ilk yapı matris oldu. Tabii Python dilinde bilinen adıyla "list", NumPy dilindeki adıyla 2D array kullanalım. NumPy'ı kullanmayı tercih etmedim çünkü henüz Python 3.x versiyonlarında sıkıntı oluşturuyor.
Matrisi oluştururken bir takım sıkıntılar yaşadığımı söylemeden edemeyeceğim. Oluşturamamamın nedenini ve çözümünü görmek için "Stack Overflow"a sorduğum sorunun linkini ekliyorum:

2D Matris oluştururken yaşadığım sorun ve çözümü: http://goo.gl/cWZXOE

Birazcık sıkıntılı olsa da programın ilk adımını atalım ve kareyi oluşturalım:


n*n'lik matrisimizi oluşturduktan sonra rastgele birer sayı üreterek bunu başlangıç noktası yapıyoruz. İstatistik çıkarma ihtimalimiz olursa diye (mesela 1 nereden başlarsa oyunda daha fazla ilerleyebiliyoruz sorusunu merak edecek olursak) ilk x ve y değerlerini kaydediyoruz.


44'üncü satırdan itibaren yaptığımız şey, bulunduğumuz noktadan nereye hareket edeceğimizi seçeneklendirdiğimiz yer. Seçenekler bir string olarak depo ediliyor. Örneğin, her yöne gidebildiğimiz bir nokta için seçenek = "abcdefgh" olacak ve aşağıda gösterilen kısımda ise bu 'string'den bir tane harf (yani seçenek) rastgele olarak seçilecek.

Aşağıdaki kısım ise artık son dokunuşlarımız:


Bakın, çok ilginçtir; Daha yaklaşık 15 denemeden sonra 6*6'lık karede "rastlantısal" olarak sonuca ulaşabildi. Öyleyse sonuca ulaşmak bu işin fıtratında var. Başka bir seferinde ise 35 sayısına ulaştım.


Aşağıda yer alan ise 5*5'lik kareler için biri başarısız biri başarılı denemenin sonuçları yer almaktadır.



Şimdilik programı burada bırakalım ve olayı biraz daha geliştirelim. Mesela raporu bir dosyaya yazalım. Daha detaylı bir rapor oluşturalım. Kesin sonuca ulaşmak için gittiğimiz yolu kaydedelim. Hatta tüm bunları "Tkinter" ile bir de görsel arayüze kavuşturdum mu tam olur. Ama şimdi değil...

Yukarıdaki kodların Türkçesine ve İngilizcesine tıklayarak ulaşabilirsiniz.
Karele-v0.1 versiyonunun Github deposuna buradan erişebilirsiniz.


Hiç yorum yok:

Yorum Gönder