Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
微笑面对bug
ddz
提交
17935f22
ddz
项目概览
微笑面对bug
/
ddz
通知
5
Star
2
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
ddz
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
17935f22
编写于
9月 25, 2020
作者:
C
changjiuxiong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
AI 地主接牌
上级
45347a06
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
356 addition
and
14 deletion
+356
-14
src/doudizhu/AI.js
src/doudizhu/AI.js
+355
-13
src/doudizhu/Player.js
src/doudizhu/Player.js
+1
-1
未找到文件。
src/doudizhu/AI.js
浏览文件 @
17935f22
...
@@ -298,15 +298,37 @@ class AI{
...
@@ -298,15 +298,37 @@ class AI{
};
};
}
}
//接牌1
//接牌1
最小接 不拆 炸
getByObj1
(
lastObj
){
getByObj1
(
lastObj
){
let
obj
;
let
obj
;
obj
=
this
.
getSmallestObjByObj
(
lastObj
);
obj
=
this
.
getSmallestObjByObj
(
lastObj
);
if
(
!
obj
){
obj
=
this
.
getByBoom
(
lastObj
);
}
return
obj
;
}
}
//接牌2
//接牌2
最小接 炸 拆
getByObj2
(
lastObj
){
getByObj2
(
lastObj
){
let
obj
;
obj
=
this
.
getByObj1
(
lastObj
);
if
(
!
obj
){
obj
=
this
.
getBySplit
(
lastObj
);
}
return
obj
;
}
//接牌3 最小接 不拆 不炸 不出王、2、AAA
getByObj3
(
lastObj
){
let
obj
;
obj
=
this
.
getSmallestObjByObj
(
lastObj
);
if
(
obj
){
if
(
lastObj
){
}
}
return
obj
;
}
}
//接牌4
//接牌4
...
@@ -321,17 +343,36 @@ class AI{
...
@@ -321,17 +343,36 @@ class AI{
return
obj
;
return
obj
;
}
}
//接牌5
getByBoom
(
lastObj
){
getByObj5
(
lastObj
){
let
classifyObj
=
this
.
player
.
classifyObj
;
let
classifyObj
=
this
.
player
.
classifyObj
;
let
obj
;
let
obj
;
let
poker
;
let
poker
;
if
(
lastObj
.
type
===
'
sx
'
){
return
null
;
}
if
(
classifyObj
.
four
.
length
>
0
){
if
(
classifyObj
.
four
.
length
>
0
){
poker
=
classifyObj
.
four
[
0
];
if
(
lastObj
.
type
===
'
four
'
){
}
else
if
(
classifyObj
.
poker15
.
length
===
4
){
for
(
let
i
=
0
;
i
<
classifyObj
.
four
.
length
;
i
++
){
poker
=
classifyObj
.
poker15
;
if
(
classifyObj
.
four
[
i
][
0
].
number
>
lastObj
.
four
[
0
].
number
){
poker
=
classifyObj
.
four
[
i
];
break
;
}
}
}
else
{
poker
=
classifyObj
.
four
[
0
];
}
}
}
if
(
!
poker
){
if
(
classifyObj
.
poker15
.
length
===
4
){
poker
=
classifyObj
.
poker15
;
}
}
if
(
poker
){
if
(
poker
){
obj
=
{
obj
=
{
type
:
'
four
'
,
type
:
'
four
'
,
...
@@ -348,12 +389,22 @@ class AI{
...
@@ -348,12 +389,22 @@ class AI{
}
}
}
}
if
(
!
poker
){
return
obj
;
obj
=
{
}
type
:
'
one
'
,
poker
:
[
this
.
player
.
pokerList
[
this
.
player
.
pokerList
.
length
-
1
]],
//接牌5
one
:
[
this
.
player
.
pokerList
[
this
.
player
.
pokerList
.
length
-
1
]],
getByObj5
(
lastObj
){
};
let
obj
=
this
.
getByBoom
();
if
(
!
obj
){
if
(
this
.
player
.
pokerList
[
this
.
player
.
pokerList
.
length
-
1
].
number
>
lastObj
.
one
[
0
].
number
){
obj
=
{
type
:
'
one
'
,
poker
:
[
this
.
player
.
pokerList
[
this
.
player
.
pokerList
.
length
-
1
]],
one
:
[
this
.
player
.
pokerList
[
this
.
player
.
pokerList
.
length
-
1
]],
};
}
}
}
return
obj
;
return
obj
;
...
@@ -363,6 +414,16 @@ class AI{
...
@@ -363,6 +414,16 @@ class AI{
//接牌
//接牌
playByObj
(
lastObj
){
playByObj
(
lastObj
){
let
obj
;
let
obj
;
if
(
lastObj
.
type
===
'
sx
'
){
obj
=
{
type
:
'
pass
'
,
poker
:
[
'
pass
'
],
};
this
.
player
.
deleteFromPokerListAndSendByObj
(
obj
);
return
;
}
if
(
this
.
player
.
type
===
'
dizhu
'
){
if
(
this
.
player
.
type
===
'
dizhu
'
){
if
(
this
.
player
.
next
.
pokerList
.
length
===
1
||
this
.
player
.
last
.
pokerList
.
length
===
1
){
if
(
this
.
player
.
next
.
pokerList
.
length
===
1
||
this
.
player
.
last
.
pokerList
.
length
===
1
){
obj
=
this
.
getByObj4
(
lastObj
);
obj
=
this
.
getByObj4
(
lastObj
);
...
@@ -1033,6 +1094,287 @@ class AI{
...
@@ -1033,6 +1094,287 @@ class AI{
return
obj
;
return
obj
;
}
}
//接牌 拆牌
getBySplit
(
lastObj
){
let
pokerList
=
this
.
player
.
pokerList
;
let
lastPoker
=
pokerList
[
0
];
let
curList
=
[
lastPoker
];
let
lists
=
[];
for
(
let
i
=
1
;
i
<
pokerList
.
length
;
i
++
){
if
(
pokerList
[
i
].
number
!==
lastPoker
.
number
){
lists
.
push
(
curList
);
curList
=
[
pokerList
[
i
]];
}
else
{
curList
.
push
(
pokerList
[
i
]);
}
lastPoker
=
pokerList
[
i
];
}
lists
.
push
(
curList
);
let
Count1List
=
[];
let
Count2List
=
[];
let
Count3List
=
[];
let
Count4List
=
[];
for
(
let
i
=
0
;
i
<
lists
.
length
;
i
++
){
if
(
lists
[
i
].
length
===
3
){
Count3List
.
push
(
lists
[
i
]);
}
else
if
(
lists
[
i
].
length
===
2
){
Count2List
.
push
(
lists
[
i
]);
}
else
if
(
lists
[
i
].
length
===
1
){
Count1List
.
push
(
lists
[
i
]);
}
else
if
(
lists
[
i
].
length
===
4
){
Count4List
.
push
(
lists
[
i
]);
}
}
let
type
=
lastObj
.
type
;
let
obj
=
null
;
if
(
type
===
'
two
'
){
if
(
Count2List
.
length
>
0
){
for
(
let
i
=
0
;
i
<
Count2List
.
length
;
i
++
){
if
(
Count2List
[
i
][
0
].
number
>
lastObj
.
two
[
0
].
number
){
obj
=
{
type
:
type
,
poker
:
Count2List
[
i
],
two
:
Count2List
[
i
],
};
break
;
}
}
}
else
if
(
Count3List
.
length
>
0
){
for
(
let
i
=
0
;
i
<
Count3List
.
length
;
i
++
){
if
(
Count3List
[
i
][
0
].
number
>
lastObj
.
two
[
0
].
number
){
let
poker
=
Count3List
[
i
].
slice
(
0
,
2
);
obj
=
{
type
:
type
,
poker
:
poker
,
two
:
poker
,
};
break
;
}
}
}
}
else
if
(
type
===
'
threeWithOne
'
){
if
(
Count3List
.
length
>
0
){
for
(
let
i
=
0
;
i
<
Count3List
.
length
;
i
++
){
if
(
Count3List
[
i
][
0
].
number
>
lastObj
.
three
[
0
].
number
){
let
one
;
if
(
Count1List
.
length
>
0
){
one
=
Count1List
[
0
];
}
else
if
(
Count2List
.
length
>
0
){
one
=
Count2List
[
0
].
slice
(
0
,
1
);
}
else
if
(
Count3List
.
length
>
0
){
for
(
let
j
=
0
;
j
<
Count3List
.
length
;
j
++
){
if
(
j
===
i
){
continue
;
}
one
=
Count3List
[
j
].
slice
(
0
,
1
);
}
}
if
(
one
){
obj
=
{
type
:
type
,
poker
:
Count3List
[
i
].
concat
(
one
),
three
:
Count3List
[
i
],
one
:
one
,
};
}
break
;
}
}
}
}
else
if
(
type
===
'
threeWithTwo
'
){
if
(
Count3List
.
length
>
0
){
for
(
let
i
=
0
;
i
<
Count3List
.
length
;
i
++
){
if
(
Count3List
[
i
][
0
].
number
>
lastObj
.
three
[
0
].
number
){
let
two
;
if
(
Count2List
.
length
>
0
){
two
=
Count2List
[
0
];
}
else
if
(
Count3List
.
length
>
0
){
for
(
let
j
=
0
;
j
<
Count3List
.
length
;
j
++
){
if
(
j
===
i
){
continue
;
}
two
=
Count3List
[
j
].
slice
(
0
,
2
);
}
}
if
(
two
){
obj
=
{
type
:
type
,
poker
:
Count3List
[
i
].
concat
(
two
),
three
:
Count3List
[
i
],
two
:
two
,
};
}
break
;
}
}
}
}
else
if
(
type
===
'
threeWithOneList
'
){
if
(
Count3List
.
length
>=
lastObj
.
list
.
length
){
for
(
let
i
=
0
;
i
<
Count3List
.
length
-
lastObj
.
list
.
length
+
1
;
i
++
){
if
(
Count3List
[
i
][
0
].
number
>
lastObj
.
list
[
0
].
three
[
0
].
number
&&
Count3List
[
i
][
0
].
number
+
lastObj
.
list
.
length
-
1
===
Count3List
[
i
+
lastObj
.
list
.
length
-
1
][
0
].
number
&&
Count3List
[
i
+
lastObj
.
list
.
length
-
1
][
0
].
number
<=
14
){
let
oneList
=
[];
for
(
let
j
=
0
;
j
<
Count1List
.
length
&&
oneList
.
length
<
lastObj
.
list
.
length
;
j
++
){
oneList
.
push
(
Count1List
[
j
]);
}
for
(
let
j
=
0
;
j
<
Count2List
.
length
&&
oneList
.
length
<
lastObj
.
list
.
length
;
j
++
){
oneList
.
push
(
Count2List
[
j
].
slice
(
0
,
1
));
if
(
oneList
.
length
<
lastObj
.
list
.
length
){
oneList
.
push
(
Count2List
[
j
].
slice
(
1
,
2
));
}
}
for
(
let
j
=
0
;
j
<
Count3List
.
length
&&
oneList
.
length
<
lastObj
.
list
.
length
;
j
++
){
if
(
j
>=
i
&&
j
<=
i
+
lastObj
.
list
.
length
-
1
){
continue
;
}
oneList
.
push
(
Count3List
[
j
].
slice
(
0
,
1
));
if
(
oneList
.
length
<
lastObj
.
list
.
length
){
oneList
.
push
(
Count3List
[
j
].
slice
(
1
,
2
));
}
if
(
oneList
.
length
<
lastObj
.
list
.
length
){
oneList
.
push
(
Count3List
[
j
].
slice
(
2
,
3
));
}
}
if
(
oneList
.
length
===
lastObj
.
list
.
length
){
let
poker
=
[];
let
list
=
[];
for
(
let
j
=
0
;
j
<
lastObj
.
list
.
length
;
j
++
){
poker
.
concat
(
Count3List
[
i
+
j
]);
poker
.
concat
(
oneList
[
i
]);
let
threeOne
=
{
three
:
Count3List
[
i
+
j
],
one
:
oneList
[
i
],
};
list
.
push
(
threeOne
);
}
obj
=
{
type
:
type
,
poker
:
poker
,
list
:
list
,
};
}
break
;
}
}
}
}
else
if
(
type
===
'
threeWithTwoList
'
){
if
(
Count3List
.
length
>=
lastObj
.
list
.
length
){
for
(
let
i
=
0
;
i
<
Count3List
.
length
-
lastObj
.
list
.
length
+
1
;
i
++
){
if
(
Count3List
[
i
][
0
].
number
>
lastObj
.
list
[
0
].
three
[
0
].
number
&&
Count3List
[
i
][
0
].
number
+
lastObj
.
list
.
length
-
1
===
Count3List
[
i
+
lastObj
.
list
.
length
-
1
][
0
].
number
&&
Count3List
[
i
+
lastObj
.
list
.
length
-
1
][
0
].
number
<=
14
){
let
twoList
=
[];
for
(
let
j
=
0
;
j
<
Count2List
.
length
&&
twoList
.
length
<
lastObj
.
list
.
length
;
j
++
){
twoList
.
push
(
Count2List
);
}
for
(
let
j
=
0
;
j
<
Count3List
.
length
&&
twoList
.
length
<
lastObj
.
list
.
length
;
j
++
){
if
(
j
>=
i
&&
j
<=
i
+
lastObj
.
list
.
length
-
1
){
continue
;
}
twoList
.
push
(
Count3List
[
j
].
slice
(
0
,
2
));
}
if
(
twoList
.
length
===
lastObj
.
list
.
length
){
let
poker
=
[];
let
list
=
[];
for
(
let
j
=
0
;
j
<
lastObj
.
list
.
length
;
j
++
){
poker
.
concat
(
Count3List
[
i
+
j
]);
poker
.
concat
(
twoList
[
i
]);
let
threeOne
=
{
three
:
Count3List
[
i
+
j
],
two
:
twoList
[
i
],
};
list
.
push
(
threeOne
);
}
obj
=
{
type
:
type
,
poker
:
poker
,
list
:
list
,
};
}
break
;
}
}
}
}
else
if
(
type
===
'
oneList
'
){
if
(
Count1List
.
length
>=
lastObj
.
list
.
length
){
for
(
let
i
=
0
;
i
<
Count1List
.
length
-
lastObj
.
list
.
length
+
1
;
i
++
){
if
(
Count1List
[
i
][
0
].
number
>
lastObj
.
list
[
0
].
one
[
0
].
number
&&
Count1List
[
i
][
0
].
number
+
lastObj
.
list
.
length
-
1
===
Count1List
[
i
+
lastObj
.
list
.
length
-
1
][
0
].
number
&&
Count1List
[
i
+
lastObj
.
list
.
length
-
1
][
0
].
number
<=
14
){
let
list
=
Count1List
.
slice
(
i
,
i
+
lastObj
.
list
.
length
);
obj
=
{
type
:
type
,
poker
:
list
.
flat
(
1
),
list
:
list
.
map
(
function
(
item
)
{
return
{
one
:
item
,
}
}),
};
break
;
}
}
}
}
else
if
(
type
===
'
twoList
'
){
if
(
Count2List
.
length
>=
lastObj
.
list
.
length
){
for
(
let
i
=
0
;
i
<
Count2List
.
length
-
lastObj
.
list
.
length
+
1
;
i
++
){
if
(
Count2List
[
i
][
0
].
number
>
lastObj
.
list
[
0
].
two
[
0
].
number
&&
Count2List
[
i
][
0
].
number
+
lastObj
.
list
.
length
-
1
===
Count2List
[
i
+
lastObj
.
list
.
length
-
1
][
0
].
number
&&
Count2List
[
i
+
lastObj
.
list
.
length
-
1
][
0
].
number
<=
14
){
let
list
=
Count2List
.
slice
(
i
,
i
+
lastObj
.
list
.
length
);
obj
=
{
type
:
type
,
poker
:
list
.
flat
(
1
),
list
:
list
.
map
(
function
(
item
)
{
return
{
two
:
item
,
}
}),
};
break
;
}
}
}
}
else
if
(
type
===
'
threeList
'
){
if
(
Count3List
.
length
>=
lastObj
.
list
.
length
){
for
(
let
i
=
0
;
i
<
Count3List
.
length
-
lastObj
.
list
.
length
+
1
;
i
++
){
if
(
Count3List
[
i
][
0
].
number
>
lastObj
.
list
[
0
].
two
[
0
].
number
&&
Count3List
[
i
][
0
].
number
+
lastObj
.
list
.
length
-
1
===
Count3List
[
i
+
lastObj
.
list
.
length
-
1
][
0
].
number
&&
Count3List
[
i
+
lastObj
.
list
.
length
-
1
][
0
].
number
<=
14
){
let
list
=
Count3List
.
slice
(
i
,
i
+
lastObj
.
list
.
length
);
obj
=
{
type
:
type
,
poker
:
list
.
flat
(
1
),
list
:
list
.
map
(
function
(
item
)
{
return
{
three
:
item
,
}
}),
};
break
;
}
}
}
}
return
obj
;
}
sortFunction
(
a
,
b
){
sortFunction
(
a
,
b
){
return
a
.
number
-
b
.
number
;
return
a
.
number
-
b
.
number
;
}
}
...
...
src/doudizhu/Player.js
浏览文件 @
17935f22
...
@@ -521,7 +521,7 @@ class Player{
...
@@ -521,7 +521,7 @@ class Player{
obj
=
{
obj
=
{
type
:
type
,
type
:
type
,
poker
:
poker
,
poker
:
poker
,
one
:
poker
,
two
:
poker
,
};
};
break
;
break
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录