Mon Jul 3 02:34:00 UTC 2023 inscode

上级 cc0b6e8e
...@@ -26,12 +26,12 @@ async function playChess(item, row, col) { ...@@ -26,12 +26,12 @@ async function playChess(item, row, col) {
isWin = test isWin = test
return return
} else { } else {
// const [x, y] = robotPlay(lattices.value, is_white, win_size.value) const [x, y] = robotPlay(lattices.value, is_white, win_size.value)
// lattices.value[x][y] = is_white lattices.value[x][y] = is_white
// const test = checkWin({ row: x, col: y, board: lattices.value, player: is_white, win_size: win_size.value }) const test = checkWin({ row: x, col: y, board: lattices.value, player: is_white, win_size: win_size.value })
// if (test.length >= win_size.value) { if (test.length >= win_size.value) {
// isWin = test isWin = test
// } }
} }
} }
......
...@@ -107,38 +107,44 @@ export function robotPlay(board, robot, win_size) { ...@@ -107,38 +107,44 @@ export function robotPlay(board, robot, win_size) {
return maxScorePos; return maxScorePos;
} }
const direction_8 = [ const direction_4 = [
[-1, -1], // \
[0, -1], [[-1, -1],
[1, -1], [1, 1]],
[-1, 0], // |
[1, 0], [[0, -1],
[-1, 1], [0, 1]],
[0, 1], // /
[1, 1] [[1, -1],
[-1, 1]],
// -
[[-1, 0],
[1, 0]]
] ]
// 获取一个一个方向上的棋子数 // 获取一个一个方向上的棋子数
function getDirectionScore(board, row, col, direction) { function getDirectionScore(board, row, col, [x, y]) {
let res = 0 let res = 0
const [x, y] = direction
let _row = row + x let _row = row + x
let _col = col + y let _col = col + y
while (true) { while (true) {
if (_row < 0 || _col < 0 || !board[_row] || board[_row][_col] !== is_black) { if (_row < 0 || _col < 0 || !board[_row] || board[_row][_col] !== is_black) {
return res break;
} }
res += 1 res += 1
_row += x _row += x
_col += y _col += y
} }
return res
} }
/** /**
* 计分 * 计分
* 一颗棋子记 个位数 的积分 * 零颗棋子记 个位数 的积分
* 两颗棋子记 十位数 的积分 * 一颗棋子记 十位数 的积分
* 三颗棋子记 百位数 的积分 * 两颗棋子记 百位数 的积分
* 三颗棋子记 千位数 的积分
* 以此类推 * 以此类推
* 计算公式 10**(n)
* *
* 是以一条线的记录积分,一个位置上正负方向为一条线 * 是以一条线的记录积分,一个位置上正负方向为一条线
* 当一个位置上 横 竖 斜 反斜 位置上都有棋子 * 当一个位置上 横 竖 斜 反斜 位置上都有棋子
...@@ -148,7 +154,7 @@ function getDirectionScore(board, row, col, direction) { ...@@ -148,7 +154,7 @@ function getDirectionScore(board, row, col, direction) {
/** /**
* 评估每个空位置的价值,从八个方向去计算, * 评估每个空位置的价值,从八个方向去计算,
* 计分规则 0,1,10,100,1000,10000,100000 根据棋子数量计分,每多一颗棋子,分数乘以10 * 计分规则 1,10,100,1000,10000,100000 根据棋子数量计分,每多一颗棋子,分数乘以10
* @param {object} Estimate * @param {object} Estimate
* @param {object} Estimate.board * @param {object} Estimate.board
* @param {number} Estimate.row * @param {number} Estimate.row
...@@ -156,13 +162,8 @@ function getDirectionScore(board, row, col, direction) { ...@@ -156,13 +162,8 @@ function getDirectionScore(board, row, col, direction) {
* @return {number} * @return {number}
*/ */
function estimateScore({ board, row, col }) { function estimateScore({ board, row, col }) {
const arr = direction_8.map((_direction) => { return direction_4.reduce((r, [p1, p2]) => {
const square = getDirectionScore(board, row, col, _direction) const square = getDirectionScore(board, row, col, p1) + getDirectionScore(board, row, col, p2)
if (square === 0) return square return r + 10 ** square
return 10 ** (square - 1)
})
return arr.reduce((r, item) => {
return r + item
}, 0) }, 0)
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册