Creé un juego de Tic Tac Toe que permite al usuario jugar contra la computadora. Se supone que la computadora implementa el algoritmo mini max donde elige el mejor movimiento para hacer en relación con el usuario humano, ya sea para evitar que el jugador gane o para ganarse a sí mismo. El problema es que no puedo decir si el programa está funcionando correctamente, ya que a veces parece funcionar y otras veces no. El fragmento de código a continuación es la función mini max que agregué a mi código. Aquí está el enlace al código completo https://github.com/1reemy/tictactoe .
const minimax = (newBoard, user) => { let legitMove = emptySquares(); let moves = []; const gameWinner = (user) => { let win = winner.find((combo)=>combo.every((idx) => sector[idx].textContent === user)); if(user === player.humanPlayer){ win; }else if(user === player.machine()){ win; }else if(boardFull()){ return; } return user; }; if(gameWinner(player.humanPlayer)){ return {score:-10}; }else if(gameWinner(player.machine())){ return {score:10}; } for(let i = 0; i < legitMove.length; i++){ let move = {}; move.index = newBoard[legitMove[i]]; newBoard[legitMove[i]] = user; if(user === player.machine()){ let result = minimax(newBoard,player.humanPlayer); move.score = result.score; } else{ let result = minimax(newBoard, player.machine()); move.score = result.score; } newBoard[legitMove[i]] = move.index; moves.push(move); } let bestMove; if(user === player.machine()){ let bestScore = -10000; for(let i = 0; i < moves.length; i++){ if(moves[i].score > bestScore){ bestScore = moves[i].score; bestMove = i; } } } else{ let bestScore = 10000; for(let i = 0; i < moves.length; i++){ if(moves[i].score < bestScore){ bestScore = moves[i].score; bestMove = i; } } } return moves[bestMove]; }