Wed Jun 28 07:21:00 UTC 2023 inscode

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