2017-02-09 2 views
0

Ich versuche, Minimax für Tic-Tac-Toe zu implementieren. Das Problem ist, es ist nicht immer wie erwartet. Ich habe versucht, es zu debuggen und festgestellt, dass in Fällen, in denen es nicht die richtige Bewegung auswählt, es ist, wenn die Punktzahl für diese Bewegung aus irgendeinem Grund "negative Unendlichkeit" ist. Hier ist der Code:Mein Minimax wählt nicht immer den besten Zug

`

function minimaxMove(board) { 

    let nextMove = null; 

    const mmRecurse = function (board, lastPlayer, depth) { 
     let winner = checkGameState(board); 

     if(winner == state.AIplayer) { 
     return -1000 + depth; 
     } else if(winner == state.playerIs) { 
     return depth - 1000; 
     } 

     let nextPlayer = lastPlayer == state.playerIs ? state.AIplayer : state.playerIs; 


     let moves = [], scores = []; 

     for(let i = 0; i < state.board.length; i++) { 
     let boardCopy = board.slice(); 
     if(boardCopy[i] == "E") { 
      boardCopy[i] = nextPlayer; 
      moves.push(i); 
      scores.push(mmRecurse(boardCopy, nextPlayer, depth+1)); 
     } 
     } 

     if(depth === 0) { 
     nextMove = moves[scores.indexOf(Math.max.apply(null,scores))]; 
     console.log(moves, scores, nextMove); 
     } else { 
     if(depth == 9) { 
      return 0; 
     } 
     if(nextPlayer == state.AIplayer) { 
      return Math.max.apply(null, scores); 
     } else if(nextPlayer == state.playerIs){ 
      return Math.min.apply(null, scores) 
     } 
     } 

    } 

    mmRecurse(board, state.playerIs, 0); 

    state.turn = state.playerIs; 
    return nextMove; 
    } 

`

Manchmal ist es funktioniert gut, manchmal ist es nicht der richtige Schritt zu wählen.

+0

Können Sie eine Arbeitsgeige erstellen? –

+0

@IvanModric - https://jsfiddle.net/Askerov/ypgv4e8e/ - hier. – askerovlab

Antwort

0

Es stellte sich heraus, meine Probleme waren, wenn jemand es brauchen wird, änderte ich Nummer 1000 auf 10, wenn Sie überprüfen, was Sie zurückgeben. Ich hatte auch nichts für Draw Game Staaten. Wenn Sie die Quelle sehen möchten on github

+1

Können Sie bitte Ihre eigene Antwort akzeptieren? – marli

+0

@marli, sicher. Danke für die Erinnerung, ich konnte die ersten zwei Tage nicht und dann habe ich es vergessen. – askerovlab

Verwandte Themen