Wed Jul 26 01:02:00 CST 2023 inscode

上级 5c0009b0
......@@ -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
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册