<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//√方法:查找存在的牌型---?我都有什么 我能攒什么牌----------
// Obj 进入的牌型数组 代表一组牌 单牌中 有 3个属性 num 是牌面数值 A对应14,2对应15 小王对应 16 大王17
// 返回 一个对象 其中 算出 这幅牌中 有没有火箭 单牌都是那些 对子都是那些
var SerCh = function (Obj) {
if (Obj == null) return null;
var Len = Obj.length;
var Ars = PxFux(Obj, 1);//按大到小排序
var Huo = false; //是否存在火箭---
var Dan = new Array(); //单牌
var Dui = new Array(); //对子
var San = new Array(); //三张
var Siz = new Array(); //四张
var Sun = new Array(); //单顺
var Sun2 = new Array();//双顺
var Sun3 = new Array();//三顺
//在找牌中我们不必要 找 4带1 4带2 或者 3带1 等等 因为这样的牌 待出牌的时候根据单牌数量会自己凑出
if (Len > 1 && Ars[0].number == 14 && Ars[1].number == 14) Huo = true; //牌面中已经排序过了 所以 如果有火箭 就在第1 和第2张中
for (var i = 0; i < Len; i++) {
if (Dan.length == 0 || Ars[i].number != Dan[Dan.length - 1]) //如果没有加入 和 加入的不重复 就吧单牌加入进去
{
if (!(Huo && Ars[i].key == 4)) Dan.push(Ars[i].number);
}
}
for (var i = 0; i < Len - 1; i++)
if (Ars[i].number == Ars[i + 1].number) {
if (Dui.length == 0 || Ars[i].number != Dui[Dui.length - 1]) Dui.push(Ars[i].number);
i++;
} //类似加入 对子
for (var i = 0; i < Len - 2; i++) if (Ars[i].number == Ars[i + 1].number && Ars[i + 2].number == Ars[i].number) {
if (San.length == 0 || Ars[i].number != San[San.length - 1]) San.push(Ars[i].number);
i += 2;
}//加入3张
for (var i = 0; i < Len - 3; i++)
if (Ars[i].number == Ars[i + 1].number && Ars[i + 2].number == Ars[i].number && Ars[i + 3].number == Ars[i].number)
{
if (Siz.length == 0 || Ars[i].number != Siz[Siz.length - 1]) Siz.push(Ars[i].number);
i += 3;
}//加入4张
//查找顺子的最大最小数------
// 顺子中 我们只要找出 最大的 Max 最小的 Len 长度 val 是一个遍历出所有能抽成顺的集合
for (var i = 0; i < Dan.length; i++) {
if (Dan[i] > 12) continue; //A以上的不能顺
if (Dan[i] < 4) break; //开头是 7 以下的也不能顺
for (var k = i; k < Dan.length; k++) {
var N = k + 1;
if (N == Dan.length || Dan[i] - Dan[N] != N - i) {
var len = N - i;
if (len > 4) {
var val = GetSun1List(Dan[i], Dan[k]);
Sun.push({Max: Dan[i], Min: Dan[k], Len: len, nlen: len, val: val})
};
i = k;
break;
}
}
}
//找双顺
for (var i = 0; i < Dui.length; i++) {
if (Dui[i] > 14) continue;
if (Dui[i] < 5) break;
for (var k = i; k < Dui.length; k++) {
var N = k + 1;
if (N == Dui.length || Dui[i] - Dui[N] != N - i) {
var len = N - i;
if (len > 2) {
var val = GetSun2List(Dui[i], Dui[k]);
Sun2.push({Max: Dui[i], Min: Dui[k], Len: len, nlen: len * 2, val: val})
}
;
i = k;
break;
}
}
}
//找三顺
for (var i = 0; i < San.length; i++) {
if (San[i] > 14) continue;
if (San[i] < 4) break;
for (var k = i; k < San.length; k++) {
var N = k + 1;
if (N == San.length || San[i] - San[N] != N - i) {
var len = N - i;
if (len > 1) {
var val = GetSun3List(San[i], San[k]);
Sun3.push({Max: San[i], Min: San[k], Len: len, nlen: len * 3, val: val});
}
i = k;
break;
}
}
}
return {Huo: Huo, Dan: Dan, Dui: Dui, San: San, Siz: Siz, Sun: Sun, Sun2: Sun2, Sun3: Sun3};
}
// 在这里 处理机器人赞牌的函数
//
// [c-sharp] view plain copy
//√方法:机器人赞牌AI---------------
var ZhanPai = function (Arr) {
var Less = PxFux(Arr, 1);//先对进入的牌进行一次高低排序
var Ts = SerCh(Less); //找出有什么牌
var Splt = new Array(); //提取块数组====
if (Ts.Huo) {
var Tobj = MChouPai([17, 16], Less);
if (Tobj != null) {
Splt.push({data: Tobj.Splt, type: 14, max: 17, len: 2});
Less = Tobj.Less;
}
}
//如果有火箭 把火箭加入到我们线路的第一步
//这样 我们认为 机器人 赞出了他的一步 火箭 基本上不参与其他牌型的排列 默认是单独的一步!
for (var i = 0; i < Ts.Siz.length; i++) {
var N = Ts.Siz[i];
var Tobj = MChouPai([N, N, N, N], Less);
if (Tobj != null) {
Splt.push({data: Tobj.Splt, type: 13, max: N, len: 4});
Less = Tobj.Less;
}
}
//如果有炸弹 也加入为一步 也不让他加入其他牌型排列!
//我们认为保留炸弹是最优牌型的首选
if (Ts.San.length > 0 && Ts.San[0] == 15) {
var Tobj = MChouPai([15, 15, 15], Less);
if (Tobj != null) {
Splt.push({data: Tobj.Splt, type: 3, max: 15, len: 3});
Less = Tobj.Less;
}
}
if (Ts.Dui.length > 0 && Ts.Dui[0] == 15) {
var Tobj = MChouPai([15, 15], Less);
if (Tobj != null) {
Splt.push({data: Tobj.Splt, type: 2, max: 15, len: 2});
Less = Tobj.Less;
}
}
// 3个2 和 对2 基本上不参与顺子 的排列 所以 也可以加为一单独步骤
var Obj = {Splt: Splt, Less: Less};// OK 到这里 我们要把 加入到 步骤里的片段 和 剩下的值绑定起来 交给 处理 顺子 和 3张 对牌 单张的 遍历函数去处理了!
var AllPais = GetAllPai(Obj);//得到 遍历的路线数组(优化过的算法 使遍历不要浪费太多CPU)
return GetTaMax(AllPais);// 得到 一条 机器人认为最合适的路线
}
//抽出可能出现第一个单顺的所有遍历 返回 抽出的顺子片段和剩余的杂牌,有多少种单顺能出现就返回多少种路线
function ChouChuSun(Obj) {
var Ts = SerCh(Obj.Less);
if (Ts.Sun.length == 0) return null;
var ZParr = new Array();
for (var i = 0; i < Ts.Sun.length; i++) {
var SunObj = Ts.Sun[i]; //顺的对象------
for (var n = 0; n < SunObj.val.length; n++) {
var nObj = MChouPai(SunObj.val[n], Obj.Less);
if (nObj != null) {
var nSplt = {data: nObj.Splt, type: 8, max: nObj.Splt[0].number, len: nObj.Splt.length};
nObj.Splt = Obj.Splt.concat([nSplt]);
ZParr.push(nObj);
}
}
}
if (ZParr.length == 0) return null;
return ZParr;
}
//抽出可能出现第一个双顺的所有遍历 返回 抽出的顺子片段和剩余的杂牌,有多少种双顺能出现就返回多少种路线
function ChouChu2Sun(Obj) {
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
一款小卖部斗地主游戏。基于CSS3+HTML5+JQUERY为主的PC端页游.zip (153个子文件)
flashanimation.css 33KB
css.css 11KB
Thumbs.db 13KB
火花.gif 77KB
牌型检验.html 17KB
index.html 7KB
小卖部.jpg 983KB
16.jpg 107KB
game.js 161KB
jquery-3.3.1.min.js 85KB
AI提示.js 16B
斗地主背景音乐.mp3 1.77MB
赌神.mp3 801KB
快点吧,我等到花儿都谢了.mp3 51KB
发牌.mp3 18KB
我就两张牌了,小心点.ogg 17KB
炸弹.ogg 16KB
我就一张牌了.ogg 13KB
王炸.ogg 11KB
四带两对.ogg 11KB
加倍.ogg 11KB
14.ogg 11KB
抢地主.ogg 10KB
要不起.ogg 10KB
15.ogg 10KB
三带一对.ogg 10KB
dui10.ogg 10KB
dui5.ogg 10KB
四带二.ogg 10KB
dui8.ogg 10KB
dui4.ogg 10KB
dui6.ogg 10KB
dui1.ogg 9KB
12.ogg 9KB
顺子.ogg 9KB
不加倍.ogg 9KB
9.ogg 9KB
7.ogg 9KB
dui3.ogg 8KB
三带一.ogg 8KB
dui7.ogg 8KB
dui2.ogg 8KB
dui13.ogg 8KB
5.ogg 8KB
dui12.ogg 8KB
大王.ogg 8KB
2.ogg 8KB
6.ogg 8KB
飞机.ogg 8KB
不抢.ogg 8KB
dui11.ogg 8KB
dui9.ogg 8KB
13.ogg 7KB
1.ogg 7KB
连对.ogg 7KB
8.ogg 7KB
3.ogg 7KB
11.ogg 7KB
10.ogg 7KB
4.ogg 6KB
过.ogg 5KB
18.png 1.86MB
VS地主.png 1.16MB
背景2.png 1.06MB
背景.png 1.02MB
17.png 1.02MB
VS农民.png 1.01MB
结算.png 332KB
王炸.png 256KB
菜单.png 219KB
游戏结束.png 211KB
飞机.png 188KB
14.png 125KB
连队.png 125KB
顺子.png 121KB
小人1.png 121KB
小人3.png 120KB
小人2.png 117KB
小人4.png 116KB
12.png 101KB
9.png 100KB
11.png 99KB
10.png 95KB
己方牌面.png 74KB
农民胜利.png 61KB
地主胜利.png 60KB
地主头像.png 58KB
13.png 56KB
2.png 56KB
3.png 56KB
1.png 56KB
7.png 55KB
6.png 55KB
5.png 55KB
4.png 55KB
8.png 54KB
开始游戏.png 49KB
关于我们.png 48KB
游戏结束菜单.png 47KB
农民头像.png 46KB
共 153 条
- 1
- 2
资源评论
博士僧小星
- 粉丝: 1711
- 资源: 5876
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功