斗地主教程新手入门规则,斗地主新手入门基本规则

首页 > 游戏 > 作者:YD1662023-07-30 17:46:06

▐设计上的考虑

由于残局对算法侧依赖很大,如果请求算法出现问题,拿不到今日牌局,或者玩家出牌后拿不到AI出牌信息等,会导致牌局无法正常进行,阻塞玩家流程。实际联调时发现调用时候会出现算法侧返回报错或者RPC超时等问题的,另外也本着不信任依赖的原则,需要有兜底。面对这些问题,设计了以下解决方案:

斗地主教程新手入门规则,斗地主新手入门基本规则(17)

一、配置监控报警,监控调用算法时长和成功率的指标,当出现抖动时及时报警

二、设计兜底方案:

  1. 第一层backup:将出牌的可能情况写在图数据库中,当没有拿到算法侧返回的AI出牌信息时,会构建查询key直接查图数据库,这样能够减少一部分查询算法失败直接走到兜底的情况第二层兜底:当出现数据库出问题或者查询不到的时候,此时系统的业务逻辑自己会做一层兜底,根据当前双方手牌和出牌信息出牌,但是这个策略是自己实现的,所以出的牌并不保证百分百符合机器人胜利原则。最终兜底:当前面都出问题的时候,选最简单的方式,如果此时玩家出牌了,那么机器人就不出牌,如果此时玩家跳过,此时机器人不能跳过,选择自己手牌第一张。【此时认为本局对玩家是送分局】

斗地主此类游戏场景和一般的请求有不同,要求端上渲染信息和服务端存储的信息必须一致,但是在交互过程中有可能出现的异常有:

端上网络问题:

  1. 前端请求服务端失败、
  2. 前端请求成功,服务端做出了响应但是网络问题前端没有拿到结果

服务端依赖的下游出现问题

  1. 牌局缓存更新失败:
  2. 牌局缓存更新超时返回错误,但是实际上已经更新成功

上面说的问题会有一个表现:用户出了一手牌之后,前端没有拿到这次请求的结果,或者拿到了包装的异常,此时本轮出牌渲染出现问题。

如果说此次请求服务端真的失败,其实倒也没什么问题,用户重新出牌就好了;但是麻烦的是服务端走了业务逻辑,更新了缓存,但是端上因为各种各样的原因没能正常渲染,此时玩家再出牌时候就会抛本张手牌已出的异常了,此时是会阻塞用户的。因此设计了以下解决方案:

  1. 参考CAS的思想,在用户每一次请求参数中加入order字段:a.这个order字段实际上就是牌局进行的轮次,当请求order和Redis中version不一致时,直接将最新的牌局缓存返回,端上重新渲染,玩家拿到最新牌局信息;b.在更新缓存的时候,会对比version字段,只有符合当前轮次时,才会更新缓存;c.当每一次更新缓存后,缓存的version会自动 1,将此version即作为order字段,不用手动维护。
  2. 对缓存操作考虑到多并发的情况,update时不会使用参数0强制更新,会带上version字段来更新。
  3. 前端做了状态锁防止连点,以及出现特定异常时直接拉取最新牌局的逻辑

这里涉及了两个缓存,理论上这两个缓存要求数据一致性,但是Redis并没有传统说的事务特性,想要做到两者状态强一致性几乎是不可能的,因此笔者在设计上考虑以下方案保证玩家不会因为数据不一致而阻塞或损失权益:

  1. 使用了基于消息队列的重试方案,当更新缓存出现异常时,会发送MQ消息,利用消息重试的机制来保证缓存更新尽量成功;
  2. 配置监控报警,在进入对局时检查用户两者状态不一致会打错误日志
  3. 如果出现本局缓存更新失败的情况,实际上这时候已经向上抛出了异常,不会再更新十局缓存中的进度信息。此时在用户测的表现:最后一次出牌失败,那么重新出最后一手牌即可,会重新结算;
  4. 如果出现本局缓存更新成功,但是十局缓存中的对局进度更新失败情况,此时在用户侧表现是:本次结算失败,玩家手动重试,重新走到结算逻辑;
  5. 奖励的发放构造了幂等,保证了用户当天完成同一场对局奖励不会重复发放,不会发生资损的问题;
  6. 在数据库中记录每一局的状态,可以通过定时扫表方式做对账,检查是否有问题。

当一局牌局结束的时候(结算或用户选择重开),会将本局玩家和AI出牌的记录、玩家挑战次数、本关挑战时长、进度等等信息打印到日志中,并通过日志同步到数据平台中,联合算法侧对不同玩家的发牌策略表join,来判断什么样的分发策略能够提升用户时长和留存,也用来分析不同的残局难度应该如何衡量,为之后固定关卡的牌局选择沉淀信息。

斗地主教程新手入门规则,斗地主新手入门基本规则(18)

总结

残局玩法是淘宝斗地主上线的全新玩法,用户的状态流转和设计思路上倒并不多难,主要集中在业务逻辑上判断比较多,针对各种异常链路要有完整的思考理解。残局玩法上线后获得了不少用户的积极反馈,同时作为双十一活动承接了部分用户,对斗地主用户游戏时长有一定提升。我们会设计一些简单而巧妙的牌局,看起来很容易赢,但是怎么出都会被AI击败,往往需要某一妙手比如拆一个对子才能获胜。除此以外我们已经在迭代通过做任务获得胜利路径提示等功能,进一步提升玩法的完整性,希望能尽快够给大家呈上一个更完美的残局,更丝滑的斗地主。

作者:刘家成(悟学)

来源:微信公众号:大淘宝技术

出处:https://mp.weixin.qq.com/s/JRgXV-yakS5c71Dxoluaeg

上一页12345末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.