Ben pytonda 7x7 lik bir XOX oyunu yaptım ve buna minmax algoritmasını ekledim. Oyun ilerleyişinde seçenekler çok olduğu için bu minmax algoritmasını alpha beta budaması yapmam gerekiyor
Bu konnu hakkında yardımcı olabilirmisiniz
minmax algoritması:
def minimax(self, isMaximazing):
if self.who_wins_for_sanal() == "-1":
return -1
elif self.who_wins_for_sanal() == "1":
return 1
elif self.who_wins_for_sanal() == "0":
return 0
if isMaximazing == 1:
# Aİ CHOOİCE
bestscore = -10
for i in range(7):
for j in range(7):
if self.push_list[i][j].text() == "":
self.push_list[i][j].setText("O")
self.push_list[i][j].setEnabled(False)
score = self.minimax(isMaximazing=0)
self.push_list[i][j].setText("")
self.push_list[i][j].setEnabled(True)
print(bestscore, score)
if score > bestscore:
bestscore = score
return bestscore
if isMaximazing == 0:
bestscore = 10
for i in range(7):
for j in range(7):
if self.push_list[i][j].text() == "":
self.push_list[i][j].setText("X")
self.push_list[i][j].setEnabled(False)
score = self.minimax(isMaximazing=1)
self.push_list[i][j].setText("")
self.push_list[i][j].setEnabled(True)
print(bestscore, score)
if score < bestscore:
bestscore = score
return bestscore
Iki tarafin da bestscore’larini tutup, asagi, recursive minimax fonksiyonuna paslayip siralari degistigi anda bakmayi birakabilirsin.
Minimizing oyuncunun skoru -1 ise maximizing oyuncu bundan daha yuksek bir degere gelemeyecektir, yani ne yapsa yapsin oyunu kaybedecektir. Bu noktada asagidaki 49 harekete ve onlarin alt hareketlerine bakmaya gerek yok, loop’u kirabiliriz.
Evet bestscore erken döndürmem sonuç verdi ama sadece kendi kazanamasına oynuyor mesela diyelimki 3 tane yan yana X var ve kendi hamlesinden 2 tane yan yana X i engellemek yerine kendi hanesine kazanması için bir tane daha ekliyor burda dediğin gibi yaparsak peki bilgisayarın oyuncuyu engellemesi için ne yapmam gerek çünkü sadece 4 tane yan yana dikine ve çapraz bir araya getirmeye çalışıyor