Wed Jun 28 07:21:00 UTC 2023 inscode

上级 5c11abb1
......@@ -68,12 +68,10 @@ export function checkWin({ row, col, board, player, win_size, direction }) {
* @returns {number[]}
*/
export function robotPlay(board, robot, win_size) {
// 深度复制一份棋盘
const _board = JSON.parse(JSON.stringify(board))
const maxScorePos = {};
let maxScore = -1;
// 空位
const empty_points = _board.map((item, row) => {
const empty_points = board.map((item, row) => {
return item.flatMap((_item, col) => _item === is_empty ? [[row, col]] : [])
}).flat(1)
......@@ -85,28 +83,25 @@ export function robotPlay(board, robot, win_size) {
const [i, j] = point;
// 判断下子后是否获胜
_board[i][j] = is_white;
const win = checkWin({ row: i, col: j, board: _board, player: robot, win_size });
const win = checkWin({ row: i, col: j, board, player: robot, win_size });
if (win.length >= win_size) {
return [i, j]
} else {
// 判断对手是否能在下一步获胜
const oppWin = checkWin({ row: i, col: j, board: _board, player: is_black, win_size });
const oppWin = checkWin({ row: i, col: j, board, player: is_black, win_size });
if (oppWin.length >= win_size) {
return [i, j]
} else {
// 计算当前棋盘局面的得分
const horizontal = checkWin({ row: i, col: j, board: _board, player: is_black, win_size, direction: getDirection("horizontal") });
const vertical = checkWin({ row: i, col: j, board: _board, player: is_black, win_size, direction: getDirection("vertical") });
const diagonalDown = checkWin({ row: i, col: j, board: _board, player: is_black, win_size, direction: getDirection("diagonalDown") });
const diagonalUp = checkWin({ row: i, col: j, board: _board, player: is_black, win_size, direction: getDirection("diagonalUp") });
const horizontal = checkWin({ row: i, col: j, board, player: is_black, win_size, direction: getDirection("horizontal") });
const vertical = checkWin({ row: i, col: j, board, player: is_black, win_size, direction: getDirection("vertical") });
const diagonalDown = checkWin({ row: i, col: j, board, player: is_black, win_size, direction: getDirection("diagonalDown") });
const diagonalUp = checkWin({ row: i, col: j, board, player: is_black, win_size, direction: getDirection("diagonalUp") });
score = Math.max(horizontal.length, vertical.length, diagonalDown.length, diagonalUp.length);
}
}
_board[i][j] = is_empty; // 恢复棋盘状态
// 选取分数最高的空位
if (score > maxScore) {
maxScorePos.x = i;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册