项目分析
经典模式的斗地主分了以下几个阶段:
匹配->发牌->叫抢地主->加倍阶段->打牌阶段->结算
功能上分为几大模块:实时在线匹配,牌局推进与更新、托管与守护、消息的推拉结合。由于本文主要讲述的是残局,对于经典玩法是如何实现的就不展开了,主要想对比一下残局玩法和经典玩法的区别:
- 经典玩法中,玩家的出牌使用HTTP请求,而牌局的推送使用socket推送到三个玩家的端上,但是残局玩法实际上是一个用户与AI进行1对1的出牌场景,按斗地主的出牌规则进行出牌;
- 残局玩法是玩家与AI对战,不涉及到多方玩家的匹配;
- 同样的,由于是单人游戏,不涉及异步的请求或牌局的推送问题,因此不需要长链接,可以不使用socket去推送牌局消息,玩家每一次出牌使用HTTP请求服务端即可;
- 经典玩法中,托管的机器人使用的是通过发送延时消息来推进牌局的,残局没有托管和提示,对算法的请求也没必要采用消息的方式来推进;
- 残局没有叫抢地主、加倍等阶段,业务逻辑较经典玩法会简单一些,系统要保证的是牌局能够按预期推进,尤其是有时候会出现各种各样的超时或是依赖下游的抖动,不能够阻塞玩家。
业务思考
首先是定义我们的斗地主残局是什么,以及如何保证对局的挑战性和趣味性。
▐流程概述- 触发活动,获得当日牌局
根据运营策略,AB、人群、来源等判断是否触发活动,再请求当日牌局信息。
牌局要求:玩家必有获胜机会,但是仅有一种出牌方式能获胜;要求生产的牌局一定要保证某一步是唯一解,既不能出现用户随便出都能赢AI,也不能出现无论怎么出都无法赢AI的牌局。
- 进入对局
进入对局后,只有玩家与AI对手两个角色,并且双方手牌都直接展示。
- 用户出牌
开局后直接进入出牌环节,玩家为先出的一方,对局过程中,玩家侧不设定倒计时,每一步没有超时时间,可无限等待下去。
- AI和用户轮流出牌
每当玩家出牌,AI方将有5S的倒计时出牌时间,AI的每次出牌会随机在1~5S间隔
- AI出牌策略
当玩家出牌并在“获胜”的路径上时,AI需要尽量确保后续的出牌也只有1种策略【AI不能认为要输了就摆烂】
当玩家出牌并非“获胜”路径时,AI需要使用合理的牌序策略将玩家击败【只要玩家出错就必败】
- 有一方出完则进入结算
直到双方有一方将手牌打光,即为牌局结束,AI出完用户失败,反之则胜利。