Игра "Крестики-Нолики" алгоритм минимакс

Пробую разобраться с алгоритмом "минимакс", но что-то получается со скрипом. Не могу понять почему не работает код адекватно, очень часто дает выиграть сопернику, танцы с бубном не помогают.

Первым ходит всегда игрок и ставит "Х", далее устройство("О") пробует выиграть или сделать ничью


                            var bestMove = 0
                            var bestScore = 0
                            var score = 0
                            var AIbtns = Array(9,{""})
fun click_O_minimax(){
// делаю копию игрового поля и сохраняю в архив
        val btns = arrayOf(btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8)
        for (a in 0..8){
            if(btns[a].text == "X"){AIbtns[a] = "X" }
            if(btns[a].text == "O"){AIbtns[a] = "O" }
            if(btns[a].text == "") {AIbtns[a] = "" }
        }

        bestScore = -1000
        for (a in 0..8){
            score = 0
            if(AIbtns[a] == "") {AIbtns[a] = "O"
                minimax(false)
                AIbtns[a] = ""
                if (score > bestScore){
                    bestScore = score
                    bestMove = a
                }
            }
        }
        btns[bestMove].text = "O"
        click++
// проверяю состояние игрового поля и передаю ход игроку
        checkWinner()
    }


    fun minimax( isMaximizing: Boolean){

// проверяю копию игрового поля 
        var winner = ""
        if (AIbtns[0] == "X" && AIbtns[1] == "X" && AIbtns[2] == "X") { winner = "X win" }
        if (AIbtns[3] == "X" && AIbtns[4] == "X" && AIbtns[5] == "X") { winner = "X win" }
        if (AIbtns[1] == "X" && AIbtns[4] == "X" && AIbtns[7] == "X") { winner = "X win" }
        if (AIbtns[6] == "X" && AIbtns[7] == "X" && AIbtns[8] == "X") { winner = "X win" }
        if (AIbtns[0] == "X" && AIbtns[3] == "X" && AIbtns[6] == "X") { winner = "X win" }
        if (AIbtns[2] == "X" && AIbtns[5] == "X" && AIbtns[8] == "X") { winner = "X win" }
        if (AIbtns[0] == "X" && AIbtns[4] == "X" && AIbtns[8] == "X") { winner = "X win" }
        if (AIbtns[2] == "X" && AIbtns[4] == "X" && AIbtns[6] == "X") { winner = "X win" }

        if (AIbtns[0] == "O" && AIbtns[1] == "O" && AIbtns[2] == "O") { winner = "O win" }
        if (AIbtns[3] == "O" && AIbtns[4] == "O" && AIbtns[5] == "O") { winner = "O win" }
        if (AIbtns[1] == "O" && AIbtns[4] == "O" && AIbtns[7] == "O") { winner = "O win" }
        if (AIbtns[6] == "O" && AIbtns[7] == "O" && AIbtns[8] == "O") { winner = "O win" }
        if (AIbtns[0] == "O" && AIbtns[3] == "O" && AIbtns[6] == "O") { winner = "O win" }
        if (AIbtns[2] == "O" && AIbtns[5] == "O" && AIbtns[8] == "O") { winner = "O win" }
        if (AIbtns[0] == "O" && AIbtns[4] == "O" && AIbtns[8] == "O") { winner = "O win" }
        if (AIbtns[2] == "O" && AIbtns[4] == "O" && AIbtns[6] == "O") { winner = "O win" }

        if(winner == "X win") {score = -1; return}
        if(winner == "O win") {score = 1; return }
        var checkTIE = 0
        for (a in 0..8){if(AIbtns[a] != ""){checkTIE++}                    }
        if(winner == "" && checkTIE == 9)   {score = 0; return }else{score = 0}

// если никто не выиграл продолжаем 
        if (isMaximizing){
            val maxScore = -1000
            for (a in 0..8){
                if(AIbtns[a] == "") {AIbtns[a] = "O"
                    minimax(false)
                    AIbtns[a] = ""
                }
            }
            score = maxOf(score,maxScore)
            return
        }
        if (!isMaximizing){
            val minScore = 1000
            for (a in 0..8){
                if(AIbtns[a] == "") {AIbtns[a] = "X"
                    minimax(true)
                    AIbtns[a] = ""
                }
            }
            score = minOf(score,minScore)
            return
        }

Ответы (0 шт):