Java 求解tictactoe最佳移动的minimax算法
我正在尝试用android创建一个Tictatcoe游戏,使用minimax算法为电脑找到最佳的移动方式。但它每次都返回板上的下一个可用位置。我试图寻找这个问题的教程和解决方案,但仍然没有答案 这是我的代码,我试过的Java 求解tictactoe最佳移动的minimax算法,java,minimax,Java,Minimax,我正在尝试用android创建一个Tictatcoe游戏,使用minimax算法为电脑找到最佳的移动方式。但它每次都返回板上的下一个可用位置。我试图寻找这个问题的教程和解决方案,但仍然没有答案 这是我的代码,我试过的 private void compMove() { final String pos =bestMove(); matrix[turn][turn2] = 'O'; vars.get(pos).setImageDrawable(getDrawable(R.
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;
}
private void compMove(){
最终字符串pos=bestMove();
矩阵[turn][turn2]=“O”;
vars.get(pos.setImageDrawable(getDrawable(R.drawable.zero));//将O放置到位
whosmov=“pm”;
getWinner(checkWinner());//检查O是否赢了
}
//为计算机寻找最佳可能的移动
私有字符串bestMove(){
int最佳分数=100,a=0,b=0;
对于(int i=0;i)这可能会有帮助。没有帮助对不起,我不明白我做错了什么。