c/s模式实时操作战斗系统,因为手机网络延时,如果战斗过程玩家所有操作都需要发服务器验证后再执行,因为网络延时带来的体验不好,所以需要战斗过程前端自行运算,记录玩家操作行为,战斗结束后发服务端统一验证。
实时操作战斗系统包括角色属性系统,技能系统,特效系统等,c++实现主逻辑,lua脚本扩展策划可根据需求增加技能和特效,每局战斗开始由服务器下发伪随机数种子,客户端拿到种子后生产随机数队列,在战斗过程用来决策各种随机事件,战斗过程记录玩家介入操作事件,战斗结束后将战斗结果和玩家介入操作事件上传服务器,然后由服务器随机验证战斗结果。
服务器和客户端都是c++实现,所以战斗模块是由同一份代码实现。
这个想法以及相关实现已经申请国家发明专利。
这个实时战斗模块是当时公司一款核心手游项目的核心模块,全部由我一人实现和维护,开发周期大约3个月左右,印象中开发期间碰到2个困难:
1. 第一版本实现后测试发现服务端验证时偶尔出现和客户端计算结果不一致,后排除发现是由于服务端和客户端运行环境不同,带来浮点数运算精度差异导致,之后重构核心计算逻辑,将浮点数运算改为整数放大指定精度倍数后做整数运算,问题解决。
2. 初期实现扩展性欠考虑,中期策划提了很多新寻求不好满足,后调整设计和实现,加入lua脚本支持,以解决策划的各种奇葩需求。