zoukankan      html  css  js  c++  java
  • 战斗预判

    有一段时间没更新博客了,最近几天一直研究战斗预判问题,个人觉得,预判是 计算机 超越 人类 的一种方式,我们也习惯说他人工智能。

    当然,我觉得 当今世界 研究 人工智能  的方向 不对,不是我 说大话,计算机 运算速度是 强项,但判断分析能力是 弱项,即便是 利用庞大的数据库 和 网络神经 学习,也终究不能 创新比人类更好的思维。

    毕竟 人类 的想法,很多是 突变灵感,计算机 则 严格遵守法则,孰强孰弱自然 有定论。

    所以,我不是 对 最近的  阿法计算机 vs 李世石 有更多的期盼,毕竟 计算机仅仅是 高运算 打败的 人类,但人类 计算能力 比 计算机 低了 几百万倍,计算机才这点优势表现,差强人意。

    话转回来,今天我研究的 预判,强调了  计算机的 高运算,弱化 特殊化功能。特殊化法则 由人为 参与。

    那到底 是什么样的 预判呢?

    回顾下 历史, 部落战争 这款手游,大部分人都玩过吧。之后陆续推出了 海岛奇兵,皇室战争。

    而 部落战争 就是 运用 预判规则的 游戏。

    中国游戏 很早(10年前)

    OG 战神世界,js网页游戏 就开始用预判,但 当时的 预判 只有 非常简单的 2点。

    1、时间 转 资源 法则

    下线 时间,再次 登录时间。 得到离线时间,离线时间 *(建筑每小时 产量)+ 离线时数据中资源产量 ==  上线 总 产量

    2、最早期的 战斗 预判

    兵种类 * 兵各自的 血 = 总血,  兵种类 * 兵各自的  防御 = 总防御,兵种类 * 兵各自的攻击 = 总攻击,当然这里有射程这么一说,也就是 1,2,3...射程 总攻击。

    完了非常简单的  把 总攻击 - 对方的 总防御 - 对方 总血 =  对方 剩余血。(如果有射程,那么循环第一次用 射程最高的,第二次 最高和第二高的 攻击累加)

    完了 对方剩余血 随机下 (对方各种 兵种*各自血),算出这点血 累计 还有 多少兵。

    哈哈,这套最初的 预判法则,用了十年,这十年,中国人 一点都没进步。

    部落战争

    战斗,预判法则

    设计的程序员 比较聪明,至少 那时的我 没他聪明(自恋下)

    战斗 只针对 离线攻击,为何?一会说原因。

    攻击方  开始 打  离线玩家。每次下兵,都通知服务器,我的兵在什么时间 ,放在哪个位置,至于方下兵 后,人物走动和 打建筑,这个不作讨论,大家都有各自的法则。

    打完之后,客户端通知 服务器抢了多少资源,数据库就开始给 离线玩家扣资源。这样离线玩家上线,发现 尼玛。。。。

    重点来了,在线玩家 打离线玩家,但是  打到一半,自己也掉线了。

    注意,那个时候,在线玩家 可能已经 通知了 几次 服务器,下兵 的地址和时间。

    服务器干嘛?什么都不干!!!!!

    等  攻击玩家,或 被打玩家上线,服务器通知 刚刚的战斗 一半未完成的 数据 给他们其中一个。

    然后,玩家就会发现,考!!!!登录好慢啊!!!!

    别急,那个时候,你的 客户端,正在 霸占 一帧的 循环时间。霸占干毛? for循环 战斗逻辑,循环最大多少,3分钟*60秒%time.deltatime ,当然战斗模拟结束,自动break。

    大家可以 尝试 把一个 正常 运动的 非 重力 的物体,循环播放,发现他确实加快了。

    那么有以上功能后,客户端可以 很快的 计算出 战斗结果,然后发给服务器,这样,对方不需要 登录 卡机了。。。

    在玩家 寻找 地图战斗时候,也会经常  卡死!!!! 其实我也想说,恭喜你, 你无意中,帮被打方 运算了 战斗结果。为人民服务!

    说道这里,我要说个题外话,就是 获得,服务器时间!!!

    大家都知道 网络延时!

    手机的延时更是 cnm!!!

    用户 登录,第一件事 就是 发送 手机 系统时间 给 服务器。比如 12点04分25秒.

    当 到达 服务器时候,给客户端再次发过去,同时 也发了 服务器自己的时间。

    这样,到达后,客户端已经是 12点04分28秒.然后减去 12点04分25秒.=  3秒,说明来回一趟 3秒! 单程1.5秒!!!

    由于 服务器时间 也跟着发来了,那么就是 服务器时间+ 1.5秒 = 服务器 同步时间。

    正文

     我擦,刚刚才开始?嗯,之前的,都是过去式,今天我来说下,我研究的预判心得。

    刚刚说的 部落战争,他必须是 对方离线才可以进攻,因为,对方在线,情况会出现很多意想不到的事情。

    比如:

    攻击方在线  -- 对方离线

    攻击方在线 -- 对方在线

    攻击方在线 -- 对方在线 后离线

    攻击方在线 -- 对方离线 后在线

    攻击方在线 后离线  同样 来上面 四次

    攻击方在线 后离线 又在线 同样 来 四次

    攻击方在线  后离线  又在线 又离线 。。。。。4次

    攻击方在线  后离线  又在线 又离线  又在线 。。。。。4次

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!

    所以这是一个非常麻烦的 逻辑,部落战争 也只能 预判到 在线 打 离线这 一种。

    而我 说下 能做到 的 方案!!

    攻击方在线  -- 对方离线

    攻击方在线  -- 对方在线

    攻击方离线  -- 对方离线

    攻击方离线  -- 对方在线

    你没有看错,攻击方 离线!!!

    最早一批 slg页游,就是 进攻方 是 要 走路 时间的,参考 战神世界 页游。

    玩家点进攻!!!  然后 告诉 3小时 到达。这样,达到后,对方玩家 就好像 塔防一样,陆续有部队来攻击。

    如果对方不在线,一次性计算。

    这个一次性计算 不放在 update中,放在 协程中,因为,攻击方 也在线,他要流场运行。

    攻击方 不仅可以 攻击一个玩家,还可以打 多个玩家,最终 只要 提示战报消息,点进去 可以观看。

    而对方在线,那么部队到达后,开始 让 攻击方 延时等待 3分钟,这时,被打方 可以 出兵操作,战斗结束,发战报。被打方中途离线,必须等战斗结束才能进入。因为进攻方 提示3分钟等待了

    而 进攻方 离线,被打方 进入 可以 快速模拟战报,而如果离线后的 进攻方 上线,也可模拟。这个只要规定被打方 离线 永远是 等3分钟时间,就可以同步 拿数据了。

    最难的一点,进攻方 打 在线人 或  离线人。

    但 战斗是在  进攻方 离线 开始的。

    这个时候, 第三方 可以 帮助 两方 模拟战斗。

    阐述就到这里,更多的还需要 程序来演示。 不过我并不喜欢 伸手党,虽然说 知识是 相互交流的,但 99%的知识  发源地 都只能是在 国外,我这闹心的。。。

  • 相关阅读:
    org.apache.commons.io.FilenameUtils 常用的方法
    (转)同一服务器部署多个tomcat时的端口号修改详情
    JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用
    idea tomcat服务器运行打印日志到控制台是乱码解决方案
    spring boot 添加整合ssl使得http变成https方法
    Fiddler 抓包工具总结
    一些概念
    观点汇总
    Spring 问题总结
    tomcat和jetty区别
  • 原文地址:https://www.cnblogs.com/big-zhou/p/5416044.html
Copyright © 2011-2022 走看看