Minimax Algoritması ile TicTacToe Oyunu

Bu yazıda Minimax Algoritması’nı ve onu örneklemek için, oldukça popüler bir oyun olan TicTacToe’dan bahsedeceğiz. Tarayıcı üzerinde çalışacak şekilde basitçe kodlayıp, yapay zekaya karşı mücadele etmeye çalışacağız. Hazırsanız başlayalım!

Minimax Algoritması Nedir?

Minimax algoritması, ihtimaller havuzu içinden en iyi ve en kötü senaryoları değerlendiren bir karar verme algoritmasıdır.

Şekil 1. 3x3 TicTacToe için ihtimaller
Şekil 2. İhtimal ağacı
Şekil 3. Puanlandırma
Şekil 4. Son durum

TicTacToe Uygulaması

Hazırsanız, Minimax algoritmasını uygulamak için TicTacToe oyununu kodlamaya geçebiliriz. Oyunumuzu tarayıcıda kolaylıkla çalıştırabilmek için JavaScript ile kodlayacağız. Ayrıca biraz görsellik katmak için de, güzel ve basit bir grafik kütüphanesi olan p5.js kütüphanesini kullanacağız.

  • update: Her bir hamleden sonra çalıştırılır. Hamle sırasının kime geçtiği ve oynanan hamle sayısını bu fonksiyon günceller.
  • finishGame: finished değişkenine true değer atayarak oyunu bitirir.
  • Get ve Set fonksiyonları, haritaya veya haritada belirli bir hücrede tutulan değerlere ulaşmak ve güncellemek için kullanılmaktadır.
  • checkWinner ve equals3 fonksiyonları, haritanın son durumuna bakarak yatayda, dikeyde veya çaprazda herhangi bir kazanan olup olmadığına bakar. Beraberlik durumunda -1, ‘X ‘kazandıysa 0 ve ‘O’ kazandıysa 1 değerini döndürür. Eğer henüz bir kazanan yoksa ve oyun halen devam edebiliyorsa null değerini döndürür.
  • Sorgulama fonksiyonları ise; sıranın kimde olduğuna, oyunun bitip bitmediğine ve sorgulanan hücrenin boş olup olmadığın dair true/false değerler döndürür.
  • Şimdi de asıl olayımız olan Minimax Algoritması’nı kodlamaya geçelim:
  • Ardından gelen değer score değişkenine atanıyor ve az evvel üzerine yazdığımız hücre tekrar null değer alacak şekilde eski haline döndürülüyor. Bu sayede, en iyi ihtimali bulasıya kadar oyun haritasına kalıcı bir müdahalede bulunmuyoruz. Ardından hesaplanan en iyi değer, maksimize edileceğinden, max fonksiyonu ile bestScore değişkenine atıyoruz.
  • Aynı işlemleri else durumu için de yapalım:
  • Son olarak minimax algoritmasını çalıştıracak fonksiyonu yazalım Game sınıfıyla ilgilenmeyi burada bitirelim:
  • Oyunumuzun esas çalıştırıldığı sketch.js dosyasına geri döndük. draw fonksiyonu içinde oyun döngüsünü oluşturalım. (draw fonksiyonu da, tıpkı setup gibi, otomatik çalışan bir diğer p5.js fonksiyonudur. Uygulama çalıştığı müddetçe, belirli bir FPS değeriyle sürekli çalışıtırılmaktadır):
  • İnsan olan oyuncunun da ekran üzerinde hamle yapabilmesi için, aşağıdaki kodları çalıştırıyoruz:

Son olarak

Bu yazıda TicTacToe oyununda insan zekasıyla mücadele edecek, Minimax Algoritması’nı kullanan, basit yapay zeka geliştirmeye çalıştık. Kodları denerken karşılaştığım bir kaç hatayı/yanlışı, siz değerli okuyucularımın dikkatine sunuyorum. :)

Kaynak

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store