斗地主AI算法——第十七章の总结整理

news/2024/11/17 2:43:11/

2.0版本的斗地主AI算法在这里就算告一段落了。

**********************完结撒花**********************

不过后续应该还会开发更智能的版本,毕竟当前版本还有很多策略没有加入。

比如说角色位置(地主上家下家打法)、比如说记牌算牌、又比如对于一些残局的分析等等。

斗地主规则看似简单,实际变幻莫测,可胜可负的局面非常多,不但涉及到基本的策略,还有配合、判断,甚至涉及到暗示与反暗示的心理战。而我想做的AI,不一定要做到最牛逼,天下无敌。因为斗地主和象棋围棋不一样,首先是非完全信息博弈。其次是非公平局势博弈。所以胜负是把控不了的,那么我想达到的效果就是符合正常人的思维,给出正常人选择的操作。从现在的2.0版本来看,和我想象中的还有很长的距离,革命尚未成功,同♂志仍需努力。



【关于枚举牌型】牌型蛮多的,所以看起来代码量很大,不过很多牌型的逻辑都是共通的,比如单牌、对牌、三不带等。像这种分支枚举不是low逼,而是让逻辑更简单,让代码更规矩。对人对机器都是好事。但是下文中飞机逻辑里我做的分支,就是100%的low逼了。

【关于飞机策略】我最恶心的就是飞机,这个东西真的烦死。首先就是长度不确定,带出去牌的个数不确定而无法统一构造出带出牌的序列。其次就是飞机打破了很多种策略上本应可以筛选的情况。比如说飞机里面可能存在炸弹,又比如说3连飞机带了3张相同的牌。看起来蛮怪的,但是实际对局中这种策略确实有可能成为最佳选择,所以不能忽视。

【关于权值设计】权值的设计我想了很久,也改了很多次,因为确实有些地方价值赋予的不是很公平。尤其是考虑拆分价值的时候,因为原来我的想法是考虑该牌型拆分后与不拆分的双重价值。举个例子,AAAKKK其实拆成两手出威力也很大。但是因为后期必须要考虑到轮次参数,计算权值的时候就不能再把拆分价值算进去了,不然四带二什么的权值爆炸。但是不考虑拆分价值又感觉有点对不起222等牌型。这也是我时至今日也很苦恼的一点。

【关于地主叫分】地主叫分策略里我只考虑了权值而不考虑轮次,因为实际打牌中其他两个人确实会针对你进行出牌,地主必须保证要有绝对的控手能力。确实我们实际玩牌时是否叫地主还是取决于你大牌的数量的。

【关于嵌入交互】交互相关的代码就不放出来了,根据自身实际的需求而定吧。我个人比较喜欢的方式是生成一个服务当做一个伪客户端。当然也可以封装成类库供调用,像我现在使用的方式是skynet里lua脚本调用类库,数据以json串形式传递。或许哪天闲着了我也会封装一个lua特有的库。这样通过struct lua_State交互数据会更可视化一些。



最后强调一下,策略中带有我自己本人主观因素太多,比如说炸弹拆分处理等。我给出的策略并非斗地主游戏最佳策略,所以希望大家如果引用的话最好根据自己的想法稍作修改。




就先这样吧,非常感谢你的观看,同时也非常希望可以给我一些建议或针对一些问题进行讨论。

可以加QQ 1397097104  微信 nine_sun666或者评论留言。



http://www.ppmy.cn/news/583568.html

相关文章

天天QQ记牌器2.37 去广告绿色版

帮一个朋友忙 把这款软件的广告nop掉 听说是挺好的一款记牌器 已经上传到资源里 简单说下步骤 1.脱壳.. 用看雪大牛的 Aspr2.XX_unpacker_v1.0SC.osc 脚本脱壳 具体用法就不说了 gg下就知道了 2.最简单的方法是 搜索 tntn.cn 把字符串都替换成 about:blank 就OK了 不过还…

斗地主笔记

很喜欢斗地主,一起交流下。 文章目录 牌力分析王牌双鬼炸弹 一流强牌飞机大鬼22 强牌小鬼2AA,KK顶A顺子(长顺子)3连对(或以上) 大牌一般顺子三张A、KQQ 中牌(小牌)送命牌 叫牌哪些情况可以叫牌 对局 牌力分析 王牌 顶级牌,使用几乎无限制&…

js实现斗地主计分器

文章目录 起因实现1、页面html2、js操作--全局变量3、js操作--数据初始化4、js操作--每局结算5、js操作--撤销 源码获取 起因 现在大家斗地主的时候往往喜欢在每局结束后进行微信转账,然而这样的转帐过程往往比较浪费时间,所以咱们可以自己写一个简单的…

人机(AI)四人斗地主

最近在使用Cocos Creator做一款四人斗地主的手机游戏,半成品(仅前端)代码附在最后,仅供参考。游戏中的单机(人机)模式以及游戏过程中的托管都需要出牌算法的设计,因此借这篇博客梳理一下现有的一…

InnoDB的三种行锁(提供具体sql执行案例分析)

InnoDB存储引擎有3种行锁的算法,其分别是: Record Lock(记录锁):单个行记录上的范围 (锁住某一行记录)Gap Lock(间隙锁):间隙锁,锁定一个范围,但不包含记录本…

php斗地主

php斗地主判断大小&#xff0c;地主规则引入 <?php //是不是单 function isDan($temp) {if (count($temp) ! 1) {return false;} else {return {"type":"dan","value":".$temp[0]."};} }//是不是对 function isDui($temp) {if (…

java 记牌_(笔记)JAVA--集合实现斗地主洗牌、发牌、看牌(利用TreeSet排序)

创建HashMap&#xff0c;键是编号&#xff0c;值是牌 创建ArrayList&#xff0c;存储编号 创建花色数组和点数数组 从0开始往HashMap里面存储编号&#xff0c;并存储对应的牌。同时往ArrayList里面存储编号 洗牌(洗的是编号)&#xff0c;用Collections的shuffle()方法实现 发牌…

斗地主+三人+叫地主+作弊(可设置)+积分属性+记牌器(可设置)

斗地主+三人+叫地主+作弊(可设置)+积分属性+记牌器(可设置) 版权声明原作品版权声明本文版权声明一、相关文章二、新增功能记牌器 RecordCards类设置记牌 SetRecordCards类三、运行展示四、代码代码框架其余代码PlayWithLandlord_CallPoints_NoTip_HasBP_Record_V1RecordCa…