【发布时间】:2020-10-27 09:32:11
【问题描述】:
我一直在努力为井字游戏项目创建无与伦比的 AI。
我一直在谷歌上搜索并使用 The Coding Train 教程 - 但是,人工智能似乎仍在选择一个随机方块。 虽然选哪个方格后面肯定有逻辑,但我想不通是什么逻辑!
这是我的代码笔 - https://codepen.io/kath-ldn/pen/oNLZqrp,我已经复制了下面的相关代码。
如果有人可以看看这个,我将不胜感激。我已经卡了好几天了,无法弄清楚问题是什么。
//functions to assess winning combos
function equals3(a, b, c) {
return a === b && b === c && a !== "";
}
function checkWinner(){
let winner = null;
if (equals3(gameBoard[0], gameBoard[1], gameBoard[2])) {
winner = gameBoard[0];
};
if (equals3(gameBoard[3], gameBoard[4], gameBoard[5])) {
winner = gameBoard[3];
};
if (equals3(gameBoard[6], gameBoard[7], gameBoard[8])) {
winner = gameBoard[6];
};
if (equals3(gameBoard[0], gameBoard[3], gameBoard[6])) {
winner = gameBoard[0];
};
if (equals3(gameBoard[1], gameBoard[4], gameBoard[7])) {
winner = gameBoard[1];
};
if (equals3(gameBoard[2], gameBoard[5], gameBoard[8])) {
winner = gameBoard[0];
};
if (equals3(gameBoard[0], gameBoard[4], gameBoard[8])) {
winner = gameBoard[0];
};
if (equals3(gameBoard[2], gameBoard[4], gameBoard[6])) {
winner = gameBoard[2];
};
let openSpots = 0;
for (let i = 0; i < gameBoard.length; i++) {
if (gameBoard[i] === "") {
openSpots = openSpots + 1;
};
};
if (winner === null && openSpots === 0) {
return 'tie';
} else {
return winner;
};
};
let scores = {
X: 10,
O: -10,
tie: 0
};
//function to create impossible-to-beat AI using minimax algorithm
function bestMove() {
let bestScore = -Infinity;
let move;
for (let i = 0; i < gameBoard.length; i++) {
if (gameBoard[i] === "") {
gameBoard[i] = AI;
let score = minimax(gameBoard, 0, false);
gameBoard[i] = "";
if (score > bestScore) {
bestScore = score;
move = i;
}
}
}
gameBoard[move] = AI;
};
//minimax function
function minimax(gameBoard, depth, isMaximizing){
let result = checkWinner();
if (result !== null) {
return scores[result];
}
if (isMaximizing) {
let bestScore = -Infinity;
for (let i = 0; i < gameBoard.length; i++) {
if (gameBoard[i] === "") {
gameBoard[i] = AI;
let score = minimax(gameBoard, depth + 1, false);
gameBoard[i] = "";
bestScore = Math.max(score, bestScore);
}
}
return bestScore;
} else {
let bestScore = Infinity;
for (let i = 0; i < gameBoard.length; i++) {
if (gameBoard[i] === "") {
gameBoard[i] = human;
let score = minimax(gameBoard, depth + 1, true);
gameBoard[i] = "";
bestScore = Math.min(score, bestScore);
}
}
return bestScore;
}
};
【问题讨论】:
标签: javascript artificial-intelligence minimax