Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
aa152147
五子棋
提交
96094e72
五
五子棋
项目概览
aa152147
/
五子棋
与 Fork 源项目一致
Fork自
inscode / VueJS
通知
1
Star
43
Fork
23
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
五
五子棋
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
96094e72
编写于
7月 05, 2023
作者:
6
63db3122f0950a2aef64df95
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Wed Jul 5 09:26:00 UTC 2023 inscode
上级
9092eba3
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
72 addition
and
6 deletion
+72
-6
src/utils/index.js
src/utils/index.js
+72
-6
未找到文件。
src/utils/index.js
浏览文件 @
96094e72
...
@@ -14,6 +14,43 @@ export const directions = [
...
@@ -14,6 +14,43 @@ export const directions = [
[
1
,
-
1
]
// / 方向
[
1
,
-
1
]
// / 方向
]
]
/**
* 检查 n 是否在 start 与 end 之间,但不包括 end。
* 如果 end 没有指定,那么 start 设置为0。
* 如果 start 大于 end,那么参数会交换以便支持负范围。
* @param {number} n
* @param {number} start
* @param {number|undefined} end
*/
function
inRange
(
n
,
start
=
0
,
end
)
{
if
(
end
===
undefined
)
{
[
start
,
end
]
=
[
0
,
start
]
}
if
(
start
>
end
)
{
[
start
,
end
]
=
[
end
,
start
]
}
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
;
}
/**
/**
* 检查四个方向连续的棋子数
* 检查四个方向连续的棋子数
* @param {object} param
* @param {object} param
...
@@ -102,11 +139,17 @@ export function robotPlay(board, win_size) {
...
@@ -102,11 +139,17 @@ export function robotPlay(board, win_size) {
*
*
* 是以一条线的记录积分,一个位置上正负方向为一条线
* 是以一条线的记录积分,一个位置上正负方向为一条线
* 当一个位置上 横 竖 斜 反斜 位置上都有棋子
* 当一个位置上 横 竖 斜 反斜 位置上都有棋子
* 积分最
多
为 4 * (10**8) = 400000000
* 积分最
大
为 4 * (10**8) = 400000000
* 积分最小为 4 * (10**0) = 4
* 积分最小为 4 * (10**0) = 4
*
*
* 边界判断
* 边界判断
* 如果在棋盘边缘,需要判断连子最多有几颗,小于 win_size 颗,可以直接放弃当前位置
* 如果在棋盘边缘,需要判断连子最多有几颗,小于 win_size 颗,可以直接放弃当前位置
*
* 黑白棋棋盘积分判断
* 比较黑白棋的棋盘最高积分,积分大的位置优先下,避免总是在防守
*
* 随机下棋
* 如果一个判定回合,棋盘积分中最高的积分有多个,则随机选择一个位置,避免有规律
*/
*/
/**
/**
...
@@ -119,6 +162,34 @@ function getBoundary(size, num) {
...
@@ -119,6 +162,34 @@ function getBoundary(size, num) {
return
(
num
>
HALF
?
size
-
num
:
num
)
+
1
// 当前位置算进去
return
(
num
>
HALF
?
size
-
num
:
num
)
+
1
// 当前位置算进去
}
}
/**
* 获取当前方向的
* @param {*} board
* @param {*} row
* @param {*} col
* @param {*} win_size
*/
function
getScore
(
board
,
row
,
col
,
win_size
)
{
const
ROW
=
board
.
length
const
COL
=
board
[
0
].
length
let
res
=
0
let
_row
=
row
+
y
let
_col
=
col
+
x
while
(
true
)
{
if
(
inRange
(
_row
,
ROW
)
&&
inRange
(
_col
,
COL
)
&&
board
[
_row
][
_col
])
{
res
+=
1
_row
+=
y
_col
+=
x
}
else
{
if
(
_row
>=
0
&&
_col
>=
0
)
{
}
}
}
}
/**
/**
* 获取一个方向上的棋子数,八个方向
* 获取一个方向上的棋子数,八个方向
* @param {(is_empty|is_white|is_black)[]} board 棋盘
* @param {(is_empty|is_white|is_black)[]} board 棋盘
...
@@ -133,8 +204,6 @@ function getDirectionScore(board, row, col, [y, x], win_size) {
...
@@ -133,8 +204,6 @@ function getDirectionScore(board, row, col, [y, x], win_size) {
let
_res
=
0
let
_res
=
0
let
_row
=
row
+
y
let
_row
=
row
+
y
let
_col
=
col
+
x
let
_col
=
col
+
x
const
ROW
=
board
.
length
const
COL
=
board
[
0
].
length
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
)
{
break
;
break
;
...
@@ -154,9 +223,6 @@ function getDirectionScore(board, row, col, [y, x], win_size) {
...
@@ -154,9 +223,6 @@ function getDirectionScore(board, row, col, [y, x], win_size) {
_row
-=
y
_row
-=
y
_col
-=
x
_col
-=
x
}
}
// 横线判断
const
distance
=
getBoundary
(
COL
,
col
)
// 判断边距
return
res
+
_res
return
res
+
_res
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录