diff --git a/src/utils/index.js b/src/utils/index.js index c50ea6b52b0fb7b5cf737ecfc8804a6b0c783da2..99cb726a5c33317a57916bdab49612cc9281df8c 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -4,6 +4,7 @@ export const is_empty = 'e'; */ export const is_white = 'w'; export const is_black = 'b'; +export const is_same = 'same' /** * [y, x] === [row, col] === [行,列] */ @@ -134,13 +135,13 @@ export function robotPlay(board, win_size) { } }, {}) } - // 空位 对每个空位进行评分 + // 空位 对每个空位进行评分, const scores = board.map((item, row) => { return item.flatMap((_item, col) => { if (_item === is_empty) { 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_white] += getDirectionScore(pan_info, row, col, [y, x], win_size, is_white) return r @@ -148,17 +149,17 @@ export function robotPlay(board, win_size) { [is_black]: 0, [is_white]: 0 }) - const _b_score = score[is_black] - const _w_score = score[is_white] - + const _b_score = _score[is_black] + 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 [{ - [`${row}_${col}`]: Math.max(_b_score, _w_score) + [key]: Math.max(_b_score, _w_score) }] } return [] }) }).flat(1) - console.log(scores) + console.log(scores); // 按分数分组 const scores_group_obj = scores.reduce((r, item) => { const key = Object.values(item)[0] @@ -183,7 +184,8 @@ export function robotPlay(board, win_size) { 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) { const _inChessboard = inChessboard(ROW, COL) while (_inChessboard(_row, _col)) { const item = OBJ[`${_row}_${_col}`] - console.log(_row, _col); if (item === villain) { break; @@ -244,7 +245,6 @@ function getDirectionsInfo({ ROW, COL, OBJ }, row, col, [y, x], player) { obstacle_num += 1 } - debugger return [ empty_num, @@ -277,6 +277,9 @@ function getDirectionScore(pan_info, row, col, [y, x], win_size, player) { * * 随机下棋 * 如果一个判定回合,棋盘积分中最高的积分有多个,则随机选择一个位置,避免有规律 ===== + * + * 进攻性 + * 如果一个位置,两方都可以下,优先我方落子 */ const SIZE = r_piece_num + l_piece_num // 没有棋子