Я пытаюсь создать игру TicTacToe в android, используя минимаксный алгоритм, чтобы найти наилучший возможный ход для компьютера. Но он возвращает следующее доступное место на доске каждый раз. Я пытался найти учебники и решения для этой проблемы, но до сих пор не получил ответа.
Это мой код, что я пытался.
private void compMove() {
final String pos =bestMove();
matrix[turn][turn2] = 'O';
vars.get(pos).setImageDrawable(getDrawable(R.drawable.zero)); //put O in position
whosmov="pm";
getWinner(checkWinner()); //check if O has won
}
//finding best possible move for computer
private String bestMove(){
int bestscore=100,a=0,b=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(matrix[i][j]==0){
matrix[i][j]='O';
int score=miniMax(matrix,0,true);
matrix[i][j]=0;
if(score<bestscore){
a=i;
b=j;
bestscore=score;
}
}
}
}
turn=a; //position x for matrix
turn2=b; //position y for matrix
return a+""+b;
}
private int miniMax(char[][] matrix,int depth,boolean ismax) {
int result=checkWinner();
if(result!=0){
return result;
}
if(ismax){
int best = -100;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(matrix[i][j]==0){
matrix[i][j]='X';
int score = miniMax(matrix,depth+1, false);
best=Math.max(score,best);
matrix[i][j]=0;
}
}
}
return best;
}
else{
int best = 100;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(matrix[i][j]==0){
matrix[i][j]='O';
int score = miniMax(matrix,depth+1, true);
best=Math.min(score,best);
matrix[i][j]=0;
}
}
}
return best;
}
}
private int checkWinner() {
//horizontal check
for(int i=0;i<3;i++){
if(matrix[i][0]==matrix[i][1] && matrix[i][1]==matrix[i][2]){
if(matrix[i][0]=='X'){
return 1;
}
if(matrix[i][0]=='O'){
return -1;
}
}
}
//vertical check
for(int i=0;i<3;i++){
if(matrix[0][i]==matrix[1][i] && matrix[2][i]==matrix[0][i]){
if(matrix[0][i]=='X'){
return 1;
}
if(matrix[0][i]=='O'){
return -1;
}
}
}
// Diagonal check
if(matrix[0][0]==matrix[1][1] && matrix[1][1]== matrix[2][2]){
if(matrix[0][0]=='X'){
return 1;
}
if(matrix[0][0]=='O'){
return -1;
}
}
if(matrix[2][0]==matrix[1][1] && matrix[1][1]== matrix[0][2]){
if(matrix[2][0]=='X'){
return 1;
}
if(matrix[2][0]=='O'){
return -1;
}
}
return 0;
}
Я думаю, что-то не так в функции минимакса. Пожалуйста, помогите мне.