From 1f6e752b108ae36652b7f734d0a30cc2732e9edb Mon Sep 17 00:00:00 2001 From: 63db3122f0950a2aef64df95 <63db3122f0950a2aef64df95@devide> Date: Wed, 26 Jul 2023 01:02:00 +0800 Subject: [PATCH] Wed Jul 26 01:02:00 CST 2023 inscode --- src/utils/index.js | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/utils/index.js b/src/utils/index.js index 5048f77..e9e1247 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -168,22 +168,21 @@ export function robotPlay(board, win_size) { */ /** - * 获取这一边方向的信息,连珠颗数,延伸出去的空位数。 - * 只需要 [空格,空格,棋子,棋子,空格,空格] 这样的数据 + * 获取这一边方向的信息,空格数,棋子数 * @param {(is_empty|is_white|is_black)[][]} board 棋盘 * @param {number} row 行 * @param {number} col 列 - * @return {{num: number, first_empty_num: number, last_empty_num: number}} 说明:num: 棋子个数;empty_num: 空格数量 + * @return {[number, number, number]} [空位数,棋子数,距离障碍物的距离] */ function getDirectionsInfo(board, row, col, [y, x], player) { const ROW = board.length const COL = board[0].length // 连续棋子数 - let num = 0 + let piece_num = 0 // 棋子前面的空格数 let first_empty_num = 0 - // 棋子后面的空格数 - let last_empty_num = 0 + // 距离障碍物的距离 + let obstacle_num = 0 // 不包括当前位置 let _row = row + y let _col = col + x @@ -197,7 +196,7 @@ function getDirectionsInfo(board, row, col, [y, x], player) { } // 连珠计数 if (!first_empty_num && item === player) { - num += 1 + piece_num += 1 } // 计算棋子前面的空格数 if (item === is_empty) { @@ -208,11 +207,11 @@ function getDirectionsInfo(board, row, col, [y, x], player) { _col += x } - return { - num, + return [ + piece_num, first_empty_num, - last_empty_num - } + obstacle_num + ] } /** * 根据棋子位置信息,计算分数 @@ -221,13 +220,13 @@ function getDirectionsInfo(board, row, col, [y, x], player) { * @param {number} col 列 x * @param {(is_empty|is_white|is_black)[]} board 棋盘 * @param {number} win_size 需要几个棋子才赢 - * @returns + * @returns {number} 分数 */ function getDirectionScore(board, row, col, [y, x], win_size, player) { - const { num: r_num, first_empty_num: r_empty_num } = getDirectionsInfo(board, row, col, [y, x], player) - const { num: l_num, first_empty_num: l_empty_num } = getDirectionsInfo(board, row, col, [y * -1, x * -1], player) + const [r_empty_num, r_piece_num, r_obstacle_num] = getDirectionsInfo(board, row, col, [y, x], player) + const [l_empty_num, l_piece_num, l_obstacle_num] = getDirectionsInfo(board, row, col, [y * -1, x * -1], player) - const SIZE = r_num + l_num + const SIZE = r_piece_num + l_piece_num // 没有棋子 if (SIZE == 0) return 0 // 两边有障碍物且小于 win_size @@ -236,7 +235,7 @@ function getDirectionScore(board, row, col, [y, x], win_size, player) { // 两边都没障碍物 if (r_empty_num != 0 && l_empty_num != 0) { // 单边,哪边空位置多,加分 - if ((r_num != 0 && l_num == 0 && (l_empty_num + 1) > r_empty_num) || (l_num != 0 && r_num == 0 && (r_empty_num + 1) > l_empty_num)) { + if ((r_piece_num != 0 && l_piece_num == 0 && (l_empty_num + 1) > r_empty_num) || (l_piece_num != 0 && r_piece_num == 0 && (r_empty_num + 1) > l_empty_num)) { return (10 ** SIZE) * 2 } } -- GitLab