Minmax tictactoe :c Cannot understand why this does not work
fifii.geral at gmail.com
fifii.geral at gmail.com
Tue Apr 24 18:57:53 EDT 2018
class AiMove:
def __init__(self):
self.x = -1
self.y=-1
self.score = 0
def Imprimir(Matriz,n):
for i in range(n):
linea ="|"
for j in range(n):
if (Matriz[i][j] == 0):
linea+=" "
elif (Matriz[i][j]==- 1):
linea+="X"
elif (Matriz[i][j]== 1):
linea+="O"
linea+="|"
print linea
print "---------"
def Gameover(Matriz,n):
#Condicion tablero lleno
blancos=0;
for i in range(n):
contJfilas = 0
contCfilas = 0
contJcol = 0
contCcol = 0
for j in range(n):
if(Matriz[i][j]==0):
blancos = blancos + 1
if (Matriz[i][j]==1):
contCfilas= contCfilas+1
elif(Matriz[i][j]==-1):
contJfilas = contJfilas +1
if (Matriz[j][i]==1):
contCcol= contCcol +1
elif (Matriz[j][i]==-1):
contJcol= contJcol +1
#Condicion 3 en raya en fila o 3 en raya columna
if (contJcol==3 or contJfilas ==3):
return -1
elif (contCfilas==3 or contCcol ==3):
return 1
if blancos == 16:
return 2
else:
return 0
def getMejorM(Matriz, player,n):
rv = Gameover(Matriz,n)
if(rv== 1):
a = AiMove()
a.score = 10
return a
elif rv==-1:
a = AiMove()
a.score = -10
return a
elif rv ==2: #Si es empate
a = AiMove()
return a
movimientos = []
for i in range (n):
for j in range (n):
if(Matriz[i][j] == 0):
movimiento = AiMove()
movimiento.x = i
movimiento.y = j
Matriz[i][j] = player
if (player == 1):
movimiento.score = getMejorM(Matriz, -1,n).score
else:
movimiento.score = getMejorM(Matriz, 1,n).score
movimientos.append(movimiento)
Matriz[i][j] = 0
#Escoger
auxb = 0
if player==1:
mejorscore = -100000
for i in range (len(movimientos)):
if movimientos[i].score > mejorscore:
auxb= i
mejorscore = movimientos[i].score
elif player==-1:
peorscore = 100000
for i in range (len(movimientos)):
if movimientos[i].score < peorscore:
auxb= i
peorscore = movimientos[i].score
#Retornar el mejor movimiento
return movimientos[auxb]
n=4
Matriz = [[0 for i in range(n)] for j in range(n)]
for i in range(n):
for j in range(n):
Matriz[i][j] = 0
Imprimir(Matriz,n)
while True:
fila = int(raw_input("Ingresa casilla x: "))-1
columna = int(raw_input("Ingresa casilla y: "))-1
if (Matriz[fila][columna] == 0):
Matriz[fila][columna] = -1
#Mover(Matriz,n)
Imprimir(Matriz,n)
bestM = AiMove()
bestM = getMejorM(Matriz, 1, n)
Matriz[bestM.x][bestM.y] = 1
Imprimir(Matriz,n)
if Gameover(Matriz,n) != 0:
break
print "FIN"
More information about the Python-list
mailing list