From 13d33c21b00dcc41fbc4328269558630b793166a Mon Sep 17 00:00:00 2001 From: 63db3122f0950a2aef64df95 <63db3122f0950a2aef64df95@devide> Date: Mon, 3 Jul 2023 02:34:00 +0000 Subject: [PATCH] Mon Jul 3 02:34:00 UTC 2023 inscode --- src/App.vue | 12 ++++++------ src/utils/index.js | 49 +++++++++++++++++++++++----------------------- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/src/App.vue b/src/App.vue index 5e5664e..106a6e2 100644 --- a/src/App.vue +++ b/src/App.vue @@ -26,12 +26,12 @@ async function playChess(item, row, col) { isWin = test return } else { - // const [x, y] = robotPlay(lattices.value, is_white, win_size.value) - // lattices.value[x][y] = is_white - // const test = checkWin({ row: x, col: y, board: lattices.value, player: is_white, win_size: win_size.value }) - // if (test.length >= win_size.value) { - // isWin = test - // } + const [x, y] = robotPlay(lattices.value, is_white, win_size.value) + lattices.value[x][y] = is_white + const test = checkWin({ row: x, col: y, board: lattices.value, player: is_white, win_size: win_size.value }) + if (test.length >= win_size.value) { + isWin = test + } } } diff --git a/src/utils/index.js b/src/utils/index.js index 235a08b..33db1e7 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -107,38 +107,44 @@ export function robotPlay(board, robot, win_size) { return maxScorePos; } -const direction_8 = [ - [-1, -1], - [0, -1], - [1, -1], - [-1, 0], - [1, 0], - [-1, 1], - [0, 1], - [1, 1] +const direction_4 = [ + // \ + [[-1, -1], + [1, 1]], + // | + [[0, -1], + [0, 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 - const [x, y] = direction let _row = row + x let _col = col + y while (true) { if (_row < 0 || _col < 0 || !board[_row] || board[_row][_col] !== is_black) { - return res + break; } res += 1 _row += x _col += y } + return res } /** * 计分 - * 一颗棋子记 个位数 的积分 - * 两颗棋子记 十位数 的积分 - * 三颗棋子记 百位数 的积分 + * 零颗棋子记 个位数 的积分 + * 一颗棋子记 十位数 的积分 + * 两颗棋子记 百位数 的积分 + * 三颗棋子记 千位数 的积分 * 以此类推 + * 计算公式 10**(n) * * 是以一条线的记录积分,一个位置上正负方向为一条线 * 当一个位置上 横 竖 斜 反斜 位置上都有棋子 @@ -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.board * @param {number} Estimate.row @@ -156,13 +162,8 @@ function getDirectionScore(board, row, col, direction) { * @return {number} */ function estimateScore({ board, row, col }) { - const arr = direction_8.map((_direction) => { - const square = getDirectionScore(board, row, col, _direction) - if (square === 0) return square - return 10 ** (square - 1) - }) - - return arr.reduce((r, item) => { - return r + item + return direction_4.reduce((r, [p1, p2]) => { + const square = getDirectionScore(board, row, col, p1) + getDirectionScore(board, row, col, p2) + return r + 10 ** square }, 0) } -- GitLab