提交 5407e651 编写于 作者: U u014301111

Thu Sep 18 17:36:00 CST 2025 inscode

上级 96f98cfa
...@@ -4,6 +4,7 @@ export const is_empty = 'e'; ...@@ -4,6 +4,7 @@ export const is_empty = 'e';
*/ */
export const is_white = 'w'; export const is_white = 'w';
export const is_black = 'b'; export const is_black = 'b';
export const is_same = 'same'
/** /**
* [y, x] === [row, col] === [行,列] * [y, x] === [row, col] === [行,列]
*/ */
...@@ -134,13 +135,13 @@ export function robotPlay(board, win_size) { ...@@ -134,13 +135,13 @@ export function robotPlay(board, win_size) {
} }
}, {}) }, {})
} }
// 空位 对每个空位进行评分 // 空位 对每个空位进行评分,
const scores = board.map((item, row) => { const scores = board.map((item, row) => {
return item.flatMap((_item, col) => { return item.flatMap((_item, col) => {
if (_item === is_empty) { if (_item === is_empty) {
if (aroundIsEmpty(pan_info, row, col)) return [] if (aroundIsEmpty(pan_info, row, col)) return []
// 评估每个空位置的价值,从八个方向去计算 // 评估每个空位置的价值,从八个方向去计算
const score = directions.reduce((r, [y, x]) => { const _score = directions.reduce((r, [y, x]) => {
r[is_black] += getDirectionScore(pan_info, row, col, [y, x], win_size, is_black) r[is_black] += getDirectionScore(pan_info, row, col, [y, x], win_size, is_black)
r[is_white] += getDirectionScore(pan_info, row, col, [y, x], win_size, is_white) r[is_white] += getDirectionScore(pan_info, row, col, [y, x], win_size, is_white)
return r return r
...@@ -148,17 +149,17 @@ export function robotPlay(board, win_size) { ...@@ -148,17 +149,17 @@ export function robotPlay(board, win_size) {
[is_black]: 0, [is_black]: 0,
[is_white]: 0 [is_white]: 0
}) })
const _b_score = score[is_black] const _b_score = _score[is_black]
const _w_score = score[is_white] const _w_score = _score[is_white]
const key = `${row}_${col}_${_b_score === _w_score ? is_same : _w_score > _b_score ? is_white : is_black}`
return [{ return [{
[`${row}_${col}`]: Math.max(_b_score, _w_score) [key]: Math.max(_b_score, _w_score)
}] }]
} }
return [] return []
}) })
}).flat(1) }).flat(1)
console.log(scores) console.log(scores);
// 按分数分组 // 按分数分组
const scores_group_obj = scores.reduce((r, item) => { const scores_group_obj = scores.reduce((r, item) => {
const key = Object.values(item)[0] const key = Object.values(item)[0]
...@@ -183,7 +184,8 @@ export function robotPlay(board, win_size) { ...@@ -183,7 +184,8 @@ export function robotPlay(board, win_size) {
res_key = Object.keys(max_scores_arr[random_index])[0] res_key = Object.keys(max_scores_arr[random_index])[0]
} }
return res_key.split('_').map(item => parseInt(item, 10)); const [_row, _col, type] = res_key.split('_')
return [parseInt(_row, 10), parseInt(_col, 10), type];
} }
/** /**
...@@ -225,7 +227,6 @@ function getDirectionsInfo({ ROW, COL, OBJ }, row, col, [y, x], player) { ...@@ -225,7 +227,6 @@ function getDirectionsInfo({ ROW, COL, OBJ }, row, col, [y, x], player) {
const _inChessboard = inChessboard(ROW, COL) const _inChessboard = inChessboard(ROW, COL)
while (_inChessboard(_row, _col)) { while (_inChessboard(_row, _col)) {
const item = OBJ[`${_row}_${_col}`] const item = OBJ[`${_row}_${_col}`]
console.log(_row, _col);
if (item === villain) { if (item === villain) {
break; break;
...@@ -244,7 +245,6 @@ function getDirectionsInfo({ ROW, COL, OBJ }, row, col, [y, x], player) { ...@@ -244,7 +245,6 @@ function getDirectionsInfo({ ROW, COL, OBJ }, row, col, [y, x], player) {
obstacle_num += 1 obstacle_num += 1
} }
debugger
return [ return [
empty_num, empty_num,
...@@ -277,6 +277,9 @@ function getDirectionScore(pan_info, row, col, [y, x], win_size, player) { ...@@ -277,6 +277,9 @@ function getDirectionScore(pan_info, row, col, [y, x], win_size, player) {
* *
* 随机下棋 * 随机下棋
* 如果一个判定回合,棋盘积分中最高的积分有多个,则随机选择一个位置,避免有规律 ===== * 如果一个判定回合,棋盘积分中最高的积分有多个,则随机选择一个位置,避免有规律 =====
*
* 进攻性
* 如果一个位置,两方都可以下,优先我方落子
*/ */
const SIZE = r_piece_num + l_piece_num const SIZE = r_piece_num + l_piece_num
// 没有棋子 // 没有棋子
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册