裁判系统 - scutrobotlab/RM2021_simulation GitHub Wiki

RM 就是一个缩小版 MOBA 游戏,游戏进程是事件驱动的。

2021 模拟器中有一个服务端事件系统,所有影响游戏进程的事件都会被入队到服务端,逐一取出处理。基本事件类型有实体被击中、游戏开始、每分钟的时序事件、游戏结束等。其中,时序事件由服务端根据倒计时自动触发,用于处理自然经济增长等规则;其他事件由客户端触发。此处实现不够统一的一点是,能量机关触发、判罚等机制没有走事件,而是通过 Rpc 触发,导致处理过程不是很统一,后续可以注意一下。

赛制中还有一个重要部分:Buff 系统。场上机器人和建筑会因为各种原因获得 Buff,比如增益区、飞坡、能量机关、被英雄狙击、复活等。Buff 等共同特点是有一个过期时间,有四种属性的变化。每个机器人有一个同步数组,存储所有 Buff 对象。机器人场地增益在服务端统一检测,当机器人进入区域时,服务器会给机器人加上一个无限长时间的 Buff,离开时去除。其他 Buff 均继承 BuffBase 类,在不同位置实现。比如英雄狙击 Buff,在前哨站控制器中有实现,在英雄狙击点击中前哨站时被触发,时长为 10 秒, armorRate 设置为 1.0 。

节选自 JudgeSystem/BuffBase.cs

赛制的其他部分,如经济系统、单位生命值、子弹数量等,大多是静态数据。这些数据只要存储在服务端,并不断进行全量同步即可。2021 模拟器中,赛制的实现比较分散,还有很大一部分规则写在了游戏管理器里。为了测试、修改方便,这部分代码应该集中抽取出来,实现为一个独立的包,其接口设计可以完全基于事件。外围代码只要触发各种各样的事件,包内做逻辑处理和数据更新,最后把数据同步出来,再分发一些事件用于触发通知。

⚠️ **GitHub.com Fallback** ⚠️