|
对于斗地主AI的兴趣,一方面来源于工作需要,另一方面也是一种自我挑战:能否模拟出类似真人斗地主的思维,并在人机对战中获得更高的胜率和得分。
首先来谈谈为什么需要游戏AI?
- 游戏上线运营初期凑人气陪玩。减少玩家匹配等待的时间,让玩家随时能玩。这种陪玩AI一般追求的是模拟真人出牌思维。
- 提升玩家体验。比如,玩家连输次数太多,派AI让玩家虐一局。这种被虐AI一般比较傻,拿的牌也比较差,就是去送的。
- 比赛中补缺。比如,35人报名参加比赛,按3人一桌还剩余2人,此时需要AI凑桌。
- 玩家掉线托管玩牌。
- 游戏压力测试。使用AI对游戏进行压力测试模拟大量用户游戏的场景。
目前有哪些主流斗地主玩法?
- 经典玩法:叫三分
- 欢乐玩法:抢地主
- 癞子玩法
- 不洗牌玩法
- 二人斗地主
- 四人斗地主
- 找朋友玩法
斗地主的玩法丰富,对于AI来说核心中的核心是如何出牌和跟牌。每个玩法也需要相应的AI功能支持,比如经典玩法需要如何叫分的AI。而癞子斗地主对于AI的运算要求相对较高一些。
斗地主AI主要有哪些功能?
- 斗地主游戏各环节的AI逻辑
- 不同应用场景的不同AI逻辑
- 模拟真人陪玩
- 玩家托管
- 提升玩家体验
- 比赛
- 压力测试
不同应用场景中,模拟真人陪玩是最复杂的,也是我们要讨论的场景。
叫分
一般的经典斗地主采用叫分的方式确定地主。1,2,3分别代表不同的底分,谁叫的分高,谁当地主。叫分逻辑会分析已发的手牌,并根据已现牌推算其他玩家手牌的可能性。分析结果一般包括: 必胜,概率胜,必输。处理逻辑也比较简单:
- 必胜当然是叫高分抢地主
- 必输当然不叫
- 概率胜,则需要根据获胜的概率,确定叫不同的分数。
叫地主/抢地主
在欢乐玩法中采用叫地主、抢地主的方式确定地主。AI逻辑同样分析手牌,并推算其他玩法手牌的可能性。分析结果一般包括:必胜,概率胜,必输。大致处理逻辑:
- 必胜尽量叫地主或抢地主
- 必输就不叫,如果三人都不叫,可以获得重新发牌的机会
- 概率胜,根据获胜的概率确定是否叫地主,根据实际AI效果调整概率阈值
加倍
欢乐斗地主玩法中抢完地主还可以选择加倍。同样根据已知牌分析输赢可能性,并根据是否获得地主进行综合考虑:
- 必胜则继续加倍,扩大胜果
- 必输则不加倍
- 概率胜,根据获胜的概率确定是否加位
出牌
是一个最复杂的AI逻辑,要考虑非常多的情况来确定出哪一套牌。AI需要一个记牌器,记录所有已现牌,从而推测对手手牌的可能性。需要使用规则+推演+概率+角色等多种方式进行计算。在保证规则、策略、推演正确的情况下,尽量出获胜概率最高的一套牌。需要考虑的因素有:
- 是否有必胜出法,如果有,则按照必胜出法选一套牌
- 是否可以放走队友,比如,队友已经报单报双,或者推测队友是个3带1牌型。直接去队友能接上的牌,让队友跑掉
- 是否有能收回来的牌
- 是否有队友能接上的牌
- 考虑防止出对手能大起的牌
- 考虑不得不出的牌
跟牌
虽然跟牌也非常复杂,但是由于必须出相同类型的牌或者炸弹,选择范围较小,所以相对出牌要简单那么一点点。AI也需要根据记牌器,记录所有已现牌,推测对手、队友手牌。然后,结果规则、策略、概率、角色等多方面综合算出一个概率,选最大获胜可能的一套牌或者选择不要。需要考虑的因素有:
- 选择能打过上家出牌的牌型
- 是否需要顶对手
- 是否需要让牌给队友
- 是否需要搭顺风车出一套牌
- 是否能炸了抢过出牌权后有必胜的出法
开篇主要是简单梳理一下斗地主AI的需求,后续对斗地主AI的规则、策略、概率和角色进行讨论,希望有志同道合的朋友一起研究讨论,欢迎评论或留言,谢谢。 |
|