如果把战斗都放到客户端,战斗结束后服务端如何验证客户端返回的战斗结果?如刀塔传奇,求详解,thx:)
我们项目现在的实现方法是这样子的:
1,前后端战斗逻辑各自实现一套,并且保持算法一致
2,前端战斗时,发起请求
3,后端构建战斗相关数据发给前端,包括各种随机时使用的随机种子
4,前端模拟战斗,并将战斗结果、结束时的随机种子等数据(如果有战中操作,需要把玩家关键帧数据一并发过来)发给后端,后端进行模拟,并验证结果。
对于这套方案,其实我是很担心的,有这么几点风险:
1,前后端的语言和平台都不一样,所以战斗逻辑保持一致的风险比较大!
2,debug比较难,现在是通过对比日志来确定哪一步出现bug。
我个人比较倾向于,前后端都使用相同的语言实现(比如lua),其他的步骤都不改,这样风险应该降低不少~
8 回答6.6k 阅读
4 回答711 阅读✓ 已解决
2 回答3.4k 阅读
3 回答1.9k 阅读✓ 已解决
1 回答2.2k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
在客户端发生的计算和回报结果都有可能被更改,真想不能被更改可能得到量子计算机时代。
所以像刀塔传奇之类的游戏,都是服务器计算,然后本地只是做前面的显示而已。
当然如果计算不涉及到伪随机数,也就是结果是确定的。可以考虑多个客户端运行,并综合采信。