斗地主AI JavaScript篇(1)

今天 有幸在这里做一下关于斗地主AI的 JS实现讲解

在处理AI的过程中 首先 我们要对模拟人类赞牌的过程 实现机器人算出最合理的出牌路线!

 

在这个过程中 我们需要用到的函数

1:排序函数:PxFux 返回一个经过对牌组排序的数组 不要干涉原来的数组

2:抽牌函数:MChouPai  返回一个被抽出的片段 和 抽出后剩余的部分

3:查找存在的牌型函数:SerCh 返回查找到的单牌 火箭 对子 3张 顺子 只要它有可能存在 就加入到队列去!

4:计算Pn值函数:GetTaMax 这里的Pn值 是计算出遍历出来的牌的好坏程度 用来筛选最好的牌

5:遍历除炸弹火箭2以外的所有剩余路径:GetAllPai
6:在GetAllPai 中使用到 GetAllLast函数 该函数是计算遍历出顺子组合后 剩下的牌在进行 3张 对子 和 单牌的加入

7:GetAllSun 遍历出所有 3张 单顺 双顺 3顺的组合 (记住为机器人赞牌,我们不必要去理会 3带1 3带2 或者飞机 等情况 因为这个情况我们可以再出牌的时候依据剩余的单牌 或对牌去决定要出飞机还是3带1 我们只需要找出 3张一样的 或者顺子啊等等)
8:GetAllSunLess 遍历出所有的顺子

9:GetAll2SunLess 遍历出所有的双顺

10:GetAll3SunLess 遍历所有的3顺

 

以上 遍历的值 都是以阶梯式的 并不等级

 

好比如 有两个顺子 两个 双顺

 

GetAllSunLess 得到的阶梯是这样的

 

顺子1--杂牌

顺子1-顺子2-杂牌

 

双顺1--杂牌

双顺1-双顺2-杂牌

 

那么在GetAllSun 的函数中 剩余的杂牌 可以依照3种情况在进行排列 格式如下

                              |顺子2--杂牌

           | 取顺子部分-+

           |                  | 顺子2-顺子3-杂牌

           |                     |双顺2--杂牌

顺子1--+取双顺部分 ---+

           |                     |双顺2-双顺3-杂牌

 

顺子1-顺子2-杂牌

 

双顺1--杂牌

双顺1-双顺2-杂牌

 如此类推 得到所有 顺子中的配对形式

 

每个末端节点 都取得一条完整的 顺子片段+没有顺子的杂牌

然后在用GetAllLast 对没有顺子的末端节点 的没有顺子的杂牌  再去取 3张 2张 1张

这样 最后返回一组没有杂牌的完整路径片段 Splt 的Array()

 

在用 GetTaMax 去计算PN值 取出一条合适的路径----------

 

以下给出 一些函数算法 ---

 

 

抽牌的函数----

   

 

查找存在牌型的函数--- 

 

 在这里 处理机器人赞牌的函数

下面是遍历的所有函数========

筛选函数=========

SetTlIofo 是为该筛选路径添加而外的属性信息 这里先不介绍---

筛选的Pn值对整个AI起着很关键的作用 在这里可以用来选出一副好牌,而在后期 他还可以用来判断是否压别人 或者是否拆牌来打

是否该出大牌了 或者依靠这个值 能大概知道自己能不能打完这手牌

比如基本上Pn值在<=10的时候 估计这个牌已经很好了 甚至可以打完

或者 如果拆牌后 再对拆牌后剩下的牌进行一次赞牌 发现拆牌后的Pn 大过 没有拆的Pn 证明此次拆牌是有损失的

可以依靠损失度 适当出牌!!

调整 这个函数的一些 调水值 用合理的思路去分析调整 可以更接近真人判断~~

 

今天 先介绍这么多~ 以后接着介绍 主动出牌 与被动出牌~

附带一个 赞牌后的输出--

 

Array
   (
      [0]=>Object Object
      (
         [data]=>Array
         (
            [0]=>Object Object
            (
               [num]=>15
               [txt]=>2
               [key]=>1
               [name]=>草花2
            )
            [1]=>Object Object
            (
               [num]=>15
               [txt]=>2
               [key]=>1
               [name]=>草花2
            )
            [2]=>Object Object
            (
               [num]=>15
               [txt]=>2
               [key]=>1
               [name]=>草花2
            )
         )
         [type]=>3
         [max]=>15
         [len]=>3
      )
      [1]=>Object Object
      (
         [data]=>Array
         (
            [0]=>Object Object
            (
               [num]=>11
               [txt]=>11
               [key]=>1
               [name]=>草花11
            )
            [1]=>Object Object
            (
               [num]=>10
               [txt]=>10
               [key]=>1
               [name]=>草花10
            )
            [2]=>Object Object
            (
               [num]=>9
               [txt]=>9
               [key]=>1
               [name]=>草花9
            )
            [3]=>Object Object
            (
               [num]=>8
               [txt]=>8
               [key]=>1
               [name]=>草花8
            )
            [4]=>Object Object
            (
               [num]=>7
               [txt]=>7
               [key]=>1
               [name]=>草花7
            )
         )
         [type]=>8
         [max]=>11
         [len]=>5
      )
      [2]=>Object Object
      (
         [data]=>Array
         (
            [0]=>Object Object
            (
               [num]=>6
               [txt]=>6
               [key]=>1
               [name]=>草花6
            )
            [1]=>Object Object
            (
               [num]=>6
               [txt]=>6
               [key]=>1
               [name]=>草花6
            )
            [2]=>Object Object
            (
               [num]=>5
               [txt]=>5
               [key]=>1
               [name]=>草花5
            )
            [3]=>Object Object
            (
               [num]=>5
               [txt]=>5
               [key]=>1
               [name]=>草花5
            )
            [4]=>Object Object
            (
               [num]=>4
               [txt]=>4
               [key]=>1
               [name]=>草花4
            )
            [5]=>Object Object
            (
               [num]=>4
               [txt]=>4
               [key]=>1
               [name]=>草花4
            )
            [6]=>Object Object
            (
               [num]=>3
               [txt]=>3
               [key]=>1
               [name]=>草花3
            )
            [7]=>Object Object
            (
               [num]=>3
               [txt]=>3
               [key]=>1
               [name]=>草花3
            )
         )
         [type]=>9
         [max]=>6
         [len]=>8
      )
      [3]=>Object Object
      (
         [data]=>Array
         (
            [0]=>Object Object
            (
               [num]=>14
               [txt]=>1
               [key]=>1
               [name]=>草花1
            )
            [1]=>Object Object
            (
               [num]=>14
               [txt]=>1
               [key]=>1
               [name]=>草花1
            )
            [2]=>Object Object
            (
               [num]=>14
               [txt]=>1
               [key]=>1
               [name]=>草花1
            )
            [3]=>Object Object
            (
               [num]=>13
               [txt]=>13
               [key]=>1
               [name]=>草花13
            )
            [4]=>Object Object
            (
               [num]=>13
               [txt]=>13
               [key]=>1
               [name]=>草花13
            )
            [5]=>Object Object
            (
               [num]=>13
               [txt]=>13
               [key]=>1
               [name]=>草花13
            )
         )
         [type]=>10
         [max]=>14
         [len]=>6
      )
      [4]=>Object Object
      (
         [data]=>Array
         (
            [0]=>Object Object
            (
               [num]=>11
               [txt]=>11
               [key]=>1
               [name]=>草花11
            )
         )
         [type]=>1
         [max]=>11
         [len]=>1
      )
      [Pn]=>2
      [Step]=>5
      [nDan]=>1
      [xDan]=>1
      [nDui]=>0
      [xDui]=>0
      [dDui]=>0
      [nSan]=>1
      [nZha]=>0
      [nSun1]=>1
      [nSun2]=>1
      [nSun3]=>1
      [nHuo]=>0
      [wDan]=>-2
      [nTow]=>3
   )
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值