From c599edb7a939f513dd20e91b906135e89127c096 Mon Sep 17 00:00:00 2001 From: 63db3122f0950a2aef64df95 <63db3122f0950a2aef64df95@devide> Date: Wed, 28 Jun 2023 07:21:00 +0000 Subject: [PATCH] Wed Jun 28 07:21:00 UTC 2023 inscode --- src/utils/index.js | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/utils/index.js b/src/utils/index.js index fc2d952..5f14923 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -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; -- GitLab