Wed Jul 5 07:39:00 UTC 2023 inscode

上级 52368d1f
......@@ -68,30 +68,25 @@ export function checkWin({ row, col, board, player, win_size }) {
export function robotPlay(board, win_size) {
let maxScorePos = [];
let maxScore = -1;
// 空位
const empty_points = board.map((item, row) => {
return item.flatMap((_item, col) => _item === is_empty ? [[row, col]] : [])
}).flat(1)
// 对每个空位进行评分
for (let e_i = 0; e_i < empty_points.length; e_i++) {
const point = empty_points[e_i]
let score = 0;
const [row, col] = point;
// 评估每个空位置的价值,从八个方向去计算
score = directions.reduce((r, [y, x]) => {
const square = getDirectionScore(board, row, col, [y, x], win_size) + getDirectionScore(board, row, col, [y * -1, x * -1], win_size)
return r + (10 ** square)
}, 0)
// 选取分数最高的空位
if (score >= maxScore) {
maxScorePos = [row, col];
maxScore = score;
}
};
// 空位 对每个空位进行评分
board.map((item, row) => {
return item.map((_item, col) => {
if (_item === is_empty) {
let score = 0;
// 评估每个空位置的价值,从八个方向去计算
score = directions.reduce((r, [y, x]) => {
const square = getDirectionScore(board, row, col, [y, x], win_size)
return r + (10 ** square)
}, 0)
// 选取分数最高的空位
if (score >= maxScore) {
maxScorePos = [row, col];
maxScore = score;
}
}
})
})
return maxScorePos;
}
......@@ -120,13 +115,13 @@ export function robotPlay(board, win_size) {
* @param {number} num
*/
function getBoundary(size, num) {
const HALF = size / 2
const HALF = Math.floor(size / 2) // 先下取整
return (num > HALF ? size - num : num) + 1 // 当前位置算进去
}
/**
* 获取一个一个方向上的棋子数
* 获取一个方向上的棋子数,八个方向
* @param {(is_empty|is_white|is_black)[]} board 棋盘
* @param {number} row 行 y
* @param {number} col 列 x
* @param {(is_empty|is_white|is_black)[]} board 棋盘
......@@ -134,11 +129,12 @@ function getBoundary(size, num) {
* @returns
*/
function getDirectionScore(board, row, col, [y, x], win_size) {
const ROW = board.length
const COL = board[0].length
let res = 0
let _res = 0
let _row = row + y
let _col = col + x
const ROW = board.length
const COL = board[0].length
while (true) {
if (_row < 0 || _col < 0 || !board[_row] || board[_row][_col] !== is_black) {
break;
......@@ -147,7 +143,20 @@ function getDirectionScore(board, row, col, [y, x], win_size) {
_row += y
_col += x
}
_row = row - y
_col = col - x
while (true) {
if (_row < 0 || _col < 0 || !board[_row] || board[_row][_col] !== is_black) {
break;
}
_res += 1
_row -= y
_col -= x
}
// 横线判断
const distance = getBoundary(COL, col)
// 判断边距
return res
return res + _res
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册