Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
aa152147
五子棋
提交
13d33c21
五
五子棋
项目概览
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看板
提交
13d33c21
编写于
7月 03, 2023
作者:
6
63db3122f0950a2aef64df95
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Mon Jul 3 02:34:00 UTC 2023 inscode
上级
cc0b6e8e
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
31 addition
and
30 deletion
+31
-30
src/App.vue
src/App.vue
+6
-6
src/utils/index.js
src/utils/index.js
+25
-24
未找到文件。
src/App.vue
浏览文件 @
13d33c21
...
@@ -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
//
}
}
}
}
}
}
...
...
src/utils/index.js
浏览文件 @
13d33c21
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录