我尝试同时添加最佳的Move和minimax算法,以使我的井字游戏无与伦比,但它不起作用
function computerMove() {
var blanks = [];
for (var i = 1; i <= 9; i++) {
var place = document.getElementById("s" + i).innerText;
if (place == "") blanks.push([i]);
}
if (blanks.length > 0) {
var bestMove = Math.floor(Math.random() * blanks.length);
nextMove(document.getElementById("s" + blanks[bestMove]));
}
var moves = [];
if (currentTurn === computer) {
var bestScore = -100000;
for (var k = 0; k < moves.length; k++) {
if (moves[k].score > bestScore1) {
bestScore = moves[k].score;
bestMove = k;
}
}
} else {
var bestScore = 100000;
for (var l = 0; l < moves.length; l++) {
if (moves[l].score < bestScore2) {
bestScore = moves[l].score;
bestMove = l;
}
}
}
return moves[bestMove];
}
它应该选择最好的动作并且无与伦比
var human = "X";
var computer = "O";
function startGame() {
var td = document.getElementsByTagName('td');
for( let i=0; i<td.length;i++){
td[i].innerHTML="";
td[i].style.background="none";
}
for (var i= 1; i<=9; i++) {
clearBoard(i);
}
currentTurn = human
document.winner=null;
setMessage( "Player "+ currentTurn + " turn.");
}
function setMessage(message) {
document.getElementById("message").innerText = message;
}
function nextMove(square) {
if (document.winner != null) {
setMessage(currentTurn + " has already won.");
} else if ( square.innerText==""){
square.innerText= currentTurn
}
swapTurn();
}
function swapTurn(){
if (winner(currentTurn)){
setMessage(" Player " + human + " You win!");
} if (winner(computer)){
setMessage("computer "+ " win!");
}
document.winner =currentTurn;
if (checkDraw()){
setMessage("Draw");
} else if ( currentTurn==human){
currentTurn=computer;
computerMove();
setMessage("Player " + currentTurn + " turn");
}
else if ( currentTurn=human){
setMessage("Player " + currentTurn + "turn")
}
}
function Winner(move) {
var result = false;
if (checkRow(1,2,3, move) ||
checkRow(4,5,6, move) ||
checkRow(7,8,9, move) ||
checkRow(1,4,7, move) ||
checkRow(2,5,8, move) ||
checkRow(3,6,9, move) ||
checkRow(1,5,9, move) ||
checkRow(3,5,7, move))
{
result = true;
}
return result;
}
function computerMove(){
return minimax (origboard,computer)
}
function minimax(newBoard, player){
var availSpots = this.empty(newBoard);
if(this.winner(newBoard, computer)){
return {score: 10};
}
else if(this.winner(newBoard, human)){
return {score: -10};
}
else if(availSpots.length === 0){
return {score: 0};
}
var moves = [];
for(var j = 0; j < availSpots.length; j++){
var move = {};
move.index = availSpots[j];
newBoard[availSpots[j]] = player;
if(player === computer){
var result1 = this.minimax(newBoard, human);
move.score = result1.score;
}
else{
var result2 = this.minimax(newBoard, computer);
move.score = result2.score;
}
newBoard[availSpots[j]] = move.index;
moves.push(move);
}
var bestMove;
if(player === computer){
var bestScore1 = -100000;
for(var k = 0; k < moves.length; k++){
if(moves[k].score > bestScore1){
bestScore1 = moves[k].score;
bestMove = k;
}
}
}
else{
var bestScore2 = 100000;
for(var l = 0; l < moves.length; l++){
if(moves[l].score < bestScore2){
bestScore2 = moves[l].score;
bestMove = l;
}
}
}
return moves[bestMove];
}
function checkDraw(){
for (var i = 1; i <= 9; i = i + 1)
if(getBox(i)=="")
return false;
return true;
}
function checkRow(a, b, c, move) {
var result = false;
if(getBox(a) == move && getBox(b) == move && getBox(c) == move) {
result = true;
}
return result;
}
function getBox(number) {
return document.getElementById("s" + number).innerText;
}
function clearBoard(number) {
document.getElementById("s" + number).innerText = "";
}