上一章,我们已经完成了测试模块的开发。至此我们已经可以进行整体测试了。本章主要内容就是对随机生成的对局情况进行简单的分析。

实际上整个开发过程绝大部分时间都是用在样例分析上,通过样例给出的返回操作分析自己设计的策略是否合理,然后不断的调整策略,调整权值等等。

这个过程持续了蛮久的,而且很多地方都反复的修改,感觉git都快要被我玩坏了。

下面具体拿出一组测试数据进行简单的分析

发牌阶段:

0号玩家牌为:
color_nHandCardList:
小王,黑桃2,梅花2,红桃A,方块A,红桃K,梅花K,黑桃Q,方块Q,红桃J,方块J,黑桃10,梅花9,红
桃8,梅花8,黑桃7,梅花71号玩家牌为:
color_nHandCardList:
红桃2,梅花A,黑桃K,方块K,红桃10,方块10,红桃9,黑桃9,方块8,红桃6,方块6,黑桃5,梅花5,
方块4,梅花4,方块3,梅花32号玩家牌为:
color_nHandCardList:
方块2,黑桃A,红桃Q,梅花Q,黑桃J,梅花J,梅花10,黑桃8,方块7,黑桃6,梅花6,红桃5,方块5,
红桃4,黑桃4,红桃3,黑桃3底牌为:
方块9,红桃7,大王

此时我们人工计算一下3个玩家的手牌权值

0号玩家:

最佳出牌策略是:78910J(+2分)+7(-3分)+8(-2分)+J(+1分)+QQKKAA(+5分)+22(+5分)+小王(+6分)。

总分14分,轮数为7

1号玩家:

最佳出牌策略是:33445566(-3分)+8(-2分)+99(-1分)+1010(+0分)+KK(+3分)+A(+4分)+2(+5分)。

总分为6分,轮数为7

2号玩家:

最佳出牌策略是:33445566(-3分)+7(-3分)+8(-2分)+10(+0分)+JJ(+1分)+QQ(+2分)+A(+4分)+2(+5分)。

总分为4分,轮数为8

叫分阶段:

SumValue is :14,NeedRound is :7
SumValue is :6,NeedRound is :7
SumValue is :4,NeedRound is :8
0号玩家是地主,叫分为:1

这个结果跟我们想的是一样的。

叫分结束后:

0号玩家牌为:
color_nHandCardList:
大王,小王,黑桃2,梅花2,红桃A,方块A,红桃K,梅花K,黑桃Q,方块Q,红桃J,方块J,黑桃10,方
块9,梅花9,红桃8,梅花8,红桃7,黑桃7,梅花71号玩家牌为:
color_nHandCardList:
红桃2,梅花A,黑桃K,方块K,红桃10,方块10,红桃9,黑桃9,方块8,红桃6,方块6,黑桃5,梅花5,
方块4,梅花4,方块3,梅花32号玩家牌为:
color_nHandCardList:
方块2,黑桃A,红桃Q,梅花Q,黑桃J,梅花J,梅花10,黑桃8,方块7,黑桃6,梅花6,红桃5,方块5,
红桃4,黑桃4,红桃3,黑桃3

地主手牌发生了改变,出牌策略变成了77788+99+10+JJQQKKAA+22+大王小王。

故第一轮出牌为:

0号玩家出牌:
红桃7,黑桃7,梅花7,红桃8,梅花81号玩家出牌:2号玩家出牌:

没人管的上,第二轮出牌为:

0号玩家出牌:
方块9,梅花91号玩家出牌:
红桃10,方块102号玩家出牌:
黑桃J,梅花J0号玩家出牌:
黑桃2,梅花21号玩家出牌:2号玩家出牌:

对2管上之后,剩余手牌为10+JJQQKKAA+大王小王,故此时打出10,之后因为只剩天牌及一手牌,所以先打出王炸然后JJQQKKAA收尾

0号玩家出牌:
黑桃101号玩家出牌:
梅花A2号玩家出牌:
方块20号玩家出牌:
大王,小王1号玩家出牌:2号玩家出牌:0号玩家出牌:
红桃J,方块J,黑桃Q,方块Q,红桃K,梅花K,红桃A,方块A地主0号玩家获胜

地主取得了胜利!

——————————————————————————————————

更多的对局信息在这里就不详说了,大家可以多跑程序从而分析一下目前算法中的优缺点再进行改善。

另外再放出几张不同策略的图片以供大家参考。

至此我们的2.0版本斗地主AI就算是接近尾声了,下一章我们做一个阶段性的总结整理。

敬请关注下一章:斗地主AI算法——第十七章の总结整理

斗地主AI算法——第十六章の样例分析相关推荐

  1. 斗地主AI算法——第十五章の测试模块

    前面几章已经把整个斗地主AI算法工程完成的差不多了,接下来进入整合联调以及模拟测试模块. 测试模块主要任务就是代替服务器给出我们需要的数据.因为我们本来的计划是封装成类库通过服务器调用获取,其调用的接 ...

  2. 斗地主AI算法——第十四章の主动出牌(3)

    上一章已经排除了飞机.三带等牌型,那么除去炸弹王炸以外,我们只剩下单牌.对牌.三牌以及单顺.双顺.三顺了. 首先说单牌.对牌.三牌.其逻辑基本一样,只是出牌的个数有差别,即:如果该i牌数量满足这种牌型 ...

  3. 斗地主AI算法——第十二章の主动出牌(1)

    本章开始,我们介绍主动出牌的算法,和被动出牌类似,我们第一步把主要架子搭起来. 首先清空出牌序列 clsHandCardData.ClearPutCardList(); 主动出牌的策略按照优先级大体可 ...

  4. 斗地主AI算法——第十三章の主动出牌(2)

    上一章我们已经搭好了出牌算法的基本框架,本章主要实现优先处理的三带.飞机等牌型. 首先定义一些基本变量: //暂存最佳的价值HandCardValue BestHandCardValue;BestHa ...

  5. 斗地主AI算法——第十一章の被动出牌(5)

    本章是被动出牌的最后一章,截止目前,我们已经解决了大部分牌型.只剩下飞机和炸弹了. 飞机无疑是最复杂的类型,他等于顺子和三带的结合体,但又增加了很多难度. 根据上一章的算法,我们可以大概想到,若是带出 ...

  6. 斗地主AI算法——第六章の牌型判断

    本章实现了上一章提到的检查当前是否只是一手牌函数ins_SurCardsType /* 检查剩余的牌是否只是一手牌是: 返回手牌类型数据 不是:返回错误类型(cgERROR) */ CardGroup ...

  7. 斗地主AI算法——第九章の被动出牌(3)

    上一章已经说明了被动出牌算法基本的出牌思路,且以单牌为例给出了具体的代码. 对牌.三不带牌型实现方法与单牌基本类似.改动的地方主要是枚举牌类型,出牌时value_nPutCardList的处理,回溯时 ...

  8. 斗地主AI算法——第七章の被动出牌(1)

    哎,之前扯了那么多蛋,终于讲出牌了! 本章开始讲被动出牌的逻辑算法.首先我们先把架子搭起来,被动出牌我们肯定是要知道场上目前打出的是什么牌型. 在第二章数据结构里我们定义过,游戏全局类里面有一个存放当 ...

  9. 斗地主AI算法——第四章の权值定义

    第一章业务逻辑结尾部分我提到了权值的计算方法: ①每个单牌都有一个基础价值②组合牌型的整体价值与这个基础价值有关,但显然计算规则不完全一样.③整手牌可以分成若干个组合牌,但分法不唯一. 当时,我说了① ...

最新文章

  1. C语言\b回退一格!多点的!_只愿与一人十指紧扣_新浪博客
  2. Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能
  3. python 学习源
  4. 在Ubuntu 7.04上安装Xfce 4.4.1
  5. python中的单下划线和双下划线_python 里面的单下划线与双下划线的区别(私有和保护)...
  6. 在Myeclipse中没有部署jeesite项目,但是每次运行其他项目时,还是会加载jeesite项目...
  7. seata的部署和集成
  8. [线性代数]Note3--乘法和逆矩阵
  9. RasbbitMQ 交换机、路由键与队列绑定
  10. 【重识 HTML + CSS】盒子模型相关知识点
  11. C# 如何将List拆分成多个子集合
  12. (转)Palantir: 神秘的大数据公司
  13. 机器学习之微积分零基础学习
  14. 计算机道德 英语作文,关于道德英语作文
  15. 慕尼黑大学计算机研究生申请,慕尼黑大学读研
  16. Java对pdf文件进行压缩打包并执行下载
  17. 普通文档怎么换成php,wps只读文档怎么修改为普通文档
  18. Android动画 补间动画
  19. 快速查找MySQL数据库中表编码字符集,再修改为指定字符集
  20. 2021年3月最新的山东大学网络认证的网址

热门文章

  1. 9.2 LSMW程序创建操作手册 第3 4步
  2. python是脚本语言_上海python脚本语言课程
  3. 计算机应用技术基础-2答案,2017年计算机应用技术基础练习题及答案
  4. wince 开发_大牛总结: 入行嵌入式开发之前,先来看看这个规划
  5. python 梯度提升树_机器学习:梯度提升算法|python与r语言代码实现
  6. 面向对象的特征有哪些方面?
  7. [Matlab] 传入 dsolve 的方程组必须是行向量才能求解
  8. 黑苹果找不到触控板_苹果高管告诉你为何要添加触控板功能
  9. MUI框架:移动端底部固定mui-bar-tab布局 - 案例篇
  10. 简单FTP服务器(ccd) v1.0