Auto Commit

上级 573e4e72
......@@ -35,7 +35,7 @@ function back() {
const { location: [y, x], type } = records.value.pop()
lattices.value[y][x] = is_empty
// 如果是玩家赢了,只需要退回一步就行
if(type === is_black){
if (type === is_black) {
break;
}
}
......
......@@ -14,6 +14,18 @@ export const directions = [
[1, -1] // / 方向
]
Array.prototype.group = function (fn) {
return this.reduce((r, item, index, arr) => {
const key = fn(item, index, arr)
if (r[key]?.length) {
r[key].push(item)
} else {
r[key] = [item]
}
return r
}, {})
}
/**
* 检查 n 是否在 start 与 end 之间,但不包括 end。
* 如果 end 没有指定,那么 start 设置为0。
......@@ -31,25 +43,6 @@ function inRange(n, start = 0, end) {
}
return n >= start && n < end
}
/**
* 产生一个包括 lower 与 upper 之间的数。
* 如果只提供一个参数返回一个0到提供数之间的数。
* @param {number} lower
* @param {number} upper
*/
function random(lower = 0, upper = 1) {
// 交换 lower 和 upper 的值(如果 lower 大于 upper)
if (lower > upper) {
[lower, upper] = [upper, lower];
}
// 计算范围内的整数数量
const range = upper - lower + 1;
// 生成随机整数
const randomInteger = Math.floor(Math.random() * range) + lower;
return randomInteger;
}
/**
* 检查四个方向连续的棋子数
......@@ -92,6 +85,7 @@ export function checkWin({ row, col, board, player, win_size }) {
return res;
}
}
console.log(res)
// 当前空位,可以结成多少颗连珠
return false;
}
......@@ -116,26 +110,35 @@ export function robotPlay(board, win_size) {
[is_black]: 0,
[is_white]: 0
})
if (score[is_black] == 0 && score[is_white] == 0) return []
const _b_score = score[is_black]
const _w_score = score[is_white]
if (_b_score == 0 && _w_score == 0) return []
return [{
[`${row}_${col}`]: score
[`${row}_${col}`]: Math.max(_b_score, _w_score)
}]
} else {
return []
}
})
}).flat(1)
const _scores = scores.sort((black_score, white_score) => {
const [b_s1, b_w1] = Object.values(Object.values(black_score)[0])
const [w_s1, w_w1] = Object.values(Object.values(white_score)[0])
const score1 = Math.max(b_s1, b_w1)
const score2 = Math.max(w_s1, w_w1)
return score2 - score1
// 按分数分组
const scores_group_obj = scores.group((item) => {
return Object.values(item)[0]
})
console.log(_scores)
// 找到最高分数
const max_key = Math.max(...Object.keys(scores_group_obj))
const max_scores_arr = scores_group_obj[max_key]
let res_key = ''
if (max_scores_arr.length === 1) {
res_key = Object.keys(max_scores_arr[0])[0]
} else if (max_scores_arr.length > 1) {
const random_index = Math.floor(Math.random() * max_scores_arr.length)
res_key = Object.keys(max_scores_arr[random_index])[0]
return Object.keys(_scores[0])[0].split('_');
}
return res_key.split('_').map(item => parseInt(item, 10));
}
/**
......@@ -166,16 +169,6 @@ export function robotPlay(board, win_size) {
*
*/
/**
* 获取获取边界距离
* @param {number} size
* @param {number} num
*/
function getBoundary(size, num) {
const HALF = Math.floor(size / 2) // 先下取整
return (num > HALF ? size - num : num) + 1 // 当前位置算进去
}
/**
* 获取这一边方向的信息,连珠颗数,延伸出去的空位数
* @param {(is_empty|is_white|is_black)[][]} board 棋盘
......@@ -194,9 +187,11 @@ function getJoinInfo(board, row, col, [y, x], player) {
let _row = row + y
let _col = col + x
const villain = player === is_black ? is_white : is_black;
while (inRange(_row, ROW) && inRange(_col, COL)) {
const item = board[_row][_col]
if (item === is_white) {
if (item === villain) {
break;
}
// 连珠计数
......@@ -216,9 +211,6 @@ function getJoinInfo(board, row, col, [y, x], player) {
empty_num
}
}
function pow(num = 0) {
return 10 ** num
}
/**
* 根据棋子位置信息,计算分数
* @param {(is_empty|is_white|is_black)[]} board 棋盘
......
......@@ -4,12 +4,9 @@ import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
server: {
host: true,
},
define: {
'process.env': {
INSCODE_API_KEY: process.env.INSCODE_API_KEY
}
}
},
})
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册