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"


















-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to