Tic Tac Toe AI

-Ana Sayfa- OpenHTML- -Hakkımda- -İletişim- -Yazılar- -Programlar- -Resimler-

 

 
[ Geri ] [ İleri ]

Download

Tic Tac Toe (veya XOX), bildiğiniz gibi 3 X 3 'lük küçük bir karede iki kişi tarafından oynanabilen bir oyun. Oyun zekadan çok hız ve dikkate dayanıyo diyebiliriz. Oyunun amacı yatay,dikey veya çapraz olarak 3 adet kendi taşını ardışık biçimde sıralamak. Sanırım işin buray kadar olan kısmını herkes biliyordur.

Bundan sonrası, bu oyun için bir yapay zeka geliştirmekle ilgili. Google'da "Tic Tac Toe AI" diye arattığınız da yeterli miktarda bilgiye erişebileceğinize inanıyorum. Genel olarak özetlemek gerekirse TTT AI için kullanılan en genel yöntem NegaMax adı verilen, recursive bir şekilde yapılan her hamlenin rakip için ne kadar kıymetli olduğunu hesaplayıp, rakip için en kötü hamleyi seçen bir yöntem.

Bu sayfada bulabileceğiniz örnekte ise bu algoritma kullanılmadı. Onun yerine Internet'te bulduğum farklı bir algoritmayı denedim. İlk başta çok başarılı sonuçlar vermese de, sonradan benim eklediğim ufak bir değişiklikle mükemmel hale geldi diyebilirim. Peki TTT için mükemmel ne demek? Bildiğiniz gibi oyunda iki tarafta hiç hata yapmazsa oyun berabere bitiyor. AI bu haliyle kendi ile oynadığı zaman tüm oyunlar berabere bitiyor. (Pek çok AI için bu geçerli değil). Bu da oyunun hata yapmadığını gösterebilir. Ayrıca herhangi bir hatanızı da çok hızlı değerlendiriyor.

Bu algoritma hakkında detaylı bilgiyi şu adreste bulabilirsiniz: http://www.mvps.org/EDais/Tutorials/TTTAI/

Ancak genel olarak özetlemek gerekirse, bu algoritma oyunun o anki durumuna göre her kareye bir puan veriyor, ve en yüksek puanlı karelerden birini ragele seçerek hamle yapıyor. Kareleri puanlarken rakip'in ve kendisinin o hat (yatay,dikey,çapraz üçlü) üstündeki gücünü değerlendiriyor.

Benim bu algoritmaya eklediğimi şu oldu. Tahtadaki kareleri 0-8 şeklinde şu şekilde numaralandırırsak:

0 1 2
3 4 5
6 7 8

Görülebileceği üzere 4 numaralı kareden 4 hat, 0-2-6-8 nolu karelerden 3'er hat 1-3-5-7 nolu karelerden 2'şer hat geçiyor. Bu da bize bir önem sırası veriyor. Yani şöyle bir önem piramidimiz var

4
0 2 6 8
1 3 5 7

Ben en yüksek puanlı karelerden rasgele birini seçerken, piramidin mümkün olan en üst basamağından bir karenin seçilmesini sağladım diyebilirim.

Şimdi gelelim kodun yapısına, kod iki parçadan oluşuyor

1.VB kısmı: Bu kısım bir arayüz sağlamaktan öteye gitmiyor.
2.Java kısmı: Burada TTT_AI : yapay zeka,tahta ve oyunu aklında tutuyor, TTTtoVB, TTT_AI dosyasına VB'den veya herhangi başka bir yerden kolay erişimli bir arayüz sunuyor. TTTtoVB için daha detaylı bir yardım belgesini ZIP dosyası içinde bulabilirsiniz.

TTT_AI hakkında bir kaç kısa açıklama gerekebilir, notlar halinde sıralayayım:

1.getMove ile başlayan fonksiyonların hepsi farklı zorluk seviyelerinde AI'ler içeriyor, hepsi yukarıdaki algoritmayı içermiyor.
getMove(): NegaMax için ayrılmıştı, ancak henüz yapılmadaı,şimdilik getMove2()'i çağırıyor.


getMove2(): Boş bir kareye rasgele bir hamle yapıyor.

getMove3(): Tek hamlede galibiyet varsa onu yapıyor, yoksa tek hamlede rakip galibiyetini engelliyor, o da yoksa rasgele hamle yapıyor.

getMove35(): Bu üsttekine ek olarak, bir sonraki hamle için 2 hattın tehdit edilip edilemeyeceğini araştırıyor, ayrıca piramide göre rasgele kare seçiyor.

getMove4():Yukarıdaki algoritma.

getMove5():Yukarıdaki algoritmaya, piramide göre rasgele seçim eklenmiş kod.

Download

TicTacToe_AI.zip 27.4 KB Bu sayfada anlatılanlar.
TicTacToe.zip 34.5 KB Sun'ın ürettiği, NegaMax ile yapılmış TTT AI. Applet şeklinde yazılmış. Kaynak kodu da içinde.

 

 

Telif Hakkı Ahmet ALTAY'a aittir ve tüm hakları sakldır. İzinsiz olarak tamamı veya bir parçası kopyalanamaz, yayınlanamaz, basılı ve online olarak yeniden çoğaltılamaz.