Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
aa152147
五子棋
提交
7d6e1a07
五
五子棋
项目概览
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看板
提交
7d6e1a07
编写于
7月 03, 2023
作者:
6
63db3122f0950a2aef64df95
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Mon Jul 3 06:35:00 UTC 2023 inscode
上级
3601b359
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
26 addition
and
28 deletion
+26
-28
src/App.vue
src/App.vue
+10
-8
src/assets/main.css
src/assets/main.css
+3
-2
src/utils/index.js
src/utils/index.js
+13
-18
未找到文件。
src/App.vue
浏览文件 @
7d6e1a07
...
...
@@ -16,22 +16,24 @@ function confirm() {
isWin
=
[]
lattices
.
value
=
Array
(
size
.
value
).
fill
([]).
map
(()
=>
Array
(
size
.
value
).
fill
(
is_empty
))
}
// 玩家下棋
async
function
playChess
(
item
,
row
,
col
)
{
if
(
is_load
.
value
)
return
if
(
isWin
.
length
||
item
!==
is_empty
)
return
// 玩家下棋
lattices
.
value
[
row
][
col
]
=
is_black
const
test
=
checkWin
({
row
,
col
,
board
:
lattices
.
value
,
player
:
is_black
,
win_size
:
win_size
.
value
})
if
(
test
)
{
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
)
{
isWin
=
test
}
}
return
// 机器人下棋
const
[
x
,
y
]
=
robotPlay
(
lattices
.
value
,
is_white
,
win_size
.
value
)
lattices
.
value
[
x
][
y
]
=
is_white
const
testRobo
=
checkWin
({
row
:
x
,
col
:
y
,
board
:
lattices
.
value
,
player
:
is_white
,
win_size
:
win_size
.
value
})
if
(
testRobo
)
{
isWin
=
testRobo
}
}
...
...
src/assets/main.css
浏览文件 @
7d6e1a07
...
...
@@ -49,12 +49,13 @@ input {
.content-lattice
{
display
:
flex
;
justify-content
:
center
;
flex-direction
:
column
;
align-items
:
center
;
}
.row
{
display
:
flex
;
flex-direction
:
column
;
flex-direction
:
row
;
}
.col
{
...
...
src/utils/index.js
浏览文件 @
7d6e1a07
...
...
@@ -11,25 +11,20 @@ export const directions = [
[
1
,
-
1
]
// 左下方向
]
/**
* @typedef Param
* @property {object} param 对象a
* @property {number} param.row 行
* @property {number} param.col 列
* @property {(is_empty|is_white|is_black)[]} param.board 棋盘
* @property {is_white|is_black|is_empty} [param.player] 当前棋子类型
* @property {number} param.win_size 需要几个棋子才赢
*/
/**
* 检查四个方向连续的棋子数
* @param {Param}
* @param {object} param
* @param {number} param.row 行
* @param {number} param.col 列
* @param {(is_empty|is_white|is_black)[]} param.board 棋盘
* @param {is_white|is_black|is_empty} [param.player] 当前棋子类型
* @param {number} param.win_size 需要几个棋子才赢
* @returns {[number, number][] | false} 赢棋的下标二维数组 或者 不能赢
*/
export
function
checkWin
({
row
,
col
,
board
,
player
,
win_size
})
{
const
_row
=
board
.
length
;
const
_col
=
board
[
0
].
length
const
pieceType
=
player
??
board
[
row
][
col
]
const
ROW
=
board
.
length
;
const
COL
=
board
[
0
].
length
const
TYPE
=
player
??
board
[
row
][
col
]
let
res
=
[]
...
...
@@ -40,7 +35,7 @@ export function checkWin({ row, col, board, player, win_size }) {
let
y
=
col
+
dy
;
// 向正反两个方向扩展,检查是否有连续的五个相同棋子
while
(
x
>=
0
&&
x
<
_row
&&
y
>=
0
&&
y
<
_col
&&
board
[
x
][
y
]
===
pieceType
)
{
while
(
x
>=
0
&&
x
<
ROW
&&
y
>=
0
&&
y
<
COL
&&
board
[
x
][
y
]
===
TYPE
)
{
res
.
push
([
x
,
y
])
x
+=
dx
;
y
+=
dy
;
...
...
@@ -48,7 +43,7 @@ export function checkWin({ row, col, board, player, win_size }) {
x
=
row
-
dx
;
y
=
col
-
dy
;
while
(
x
>=
0
&&
x
<
_row
&&
y
>=
0
&&
y
<
_col
&&
board
[
x
][
y
]
===
pieceType
)
{
while
(
x
>=
0
&&
x
<
ROW
&&
y
>=
0
&&
y
<
COL
&&
board
[
x
][
y
]
===
TYPE
)
{
res
.
push
([
x
,
y
])
x
-=
dx
;
y
-=
dy
;
...
...
@@ -90,7 +85,7 @@ export function robotPlay(board, robot, win_size) {
if
(
win
)
{
return
[
row
,
col
]
}
else
{
// 判断对手是否能在
下一步
获胜
// 判断对手是否能在
这一个空位上
获胜
const
oppWin
=
checkWin
({
row
,
col
,
board
,
player
:
is_black
,
win_size
});
if
(
oppWin
)
{
return
[
row
,
col
]
...
...
@@ -192,7 +187,7 @@ function getDirectionScore(board, row, col, [x, y], piece_type) {
*/
function
estimateScore
({
board
,
row
,
col
,
win_size
})
{
return
direction_4
.
reduce
((
r
,
[
p1
,
p2
])
=>
{
const
square
=
getDirectionScore
(
board
,
row
,
col
,
p1
,
win_size
,
is_
black
)
+
getDirectionScore
(
board
,
row
,
col
,
p2
,
win_size
,
is_black
)
const
square
=
getDirectionScore
(
board
,
row
,
col
,
p1
,
win_size
,
is_
white
)
+
getDirectionScore
(
board
,
row
,
col
,
p2
,
win_size
,
is_white
)
return
r
+
10
**
square
},
0
)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录