出生点地图
- GameStart消息中给出了初始地图。
- 根据游戏规则,遍历每个栅格,判断其九宫格范围内(上下左右+1)的栅格是否有建筑物,如果有则当前栅格不能作为出生点。
- 最终利用一个二维矩阵存放上述信息
出生点选取
- 为了避免盲目地将所有士兵下到同一个位置,尽最大可能保留战斗力,制定了一套出生点的选取规则:
- 以基地为中心,划分四个象限进行排序
- 一级排序:每个象限如果存在可出生区域,则计算该象限内的防御方攻击力总和,并按照攻击力总和对象限进行升序排序。攻击力最弱的象限排在第一。
- 二三级排序:每个象限内,选取离建筑物最近(避免靠近建筑物过程中受到的无谓伤害)、攻击力最弱的点(避免一开始就遭遇大量伤害,对地狱之塔特别有效)。
- 不是每个象限都会有可用的出生点(例如基地在任意角落里,就只存在一个象限)。
- 根据出生点的数量下发不同数量的部队。
敌方势力图
- 势力图是防御建筑对我方形成的攻击力叠加在地图栅格上的状态
- 概念与热力图类似
- 势力图的利用:
- 在出生点地图的基础上叠加对防御建筑攻击力的考虑,出生点选取在可选范围内攻击力最弱的地方。
- 法师和胖子的走位配合(寻路)会考虑攻击力的影响,法师如果在收到伤害时会主动往攻击力较弱的地方撤退。
- 为了避免部队乱跑,决赛时打了一个补丁:如果防御建筑物有攻击对象(说明胖子正在吸收伤害),则该建筑物的攻击力不纳入势力图统计。
寻路算法
- 寻路采用经典的A*算法,但在实际使用过程中,根据地图上的不同元素,采用了加权的地图。
- 加权的考虑:
- 绕行容易让士兵们落入地图的陷阱,而直接粗暴地打墙会丧失一些突破“城墙口”的机会。
- 墙对于寻路系统来说,可以视作一个权值很高的障碍,绕过墙所受到的伤害,很有可能大于原地摧毁墙后继续前进所受到的伤害。在绕和不绕之间如何取舍,就是靠权值。
- 地形在破坏之前,大体上的行进路线是固定的。
- 测试时发现不能以基地为直接目标,因为基地一旦被摧毁,所有士兵都在原地发呆。
- 补丁策略:搜索一定范围内(例如9*9)的目标,基地优先,防御力高的建筑物优先。
兵种配置
- 游戏规则中对于角色的设置较为复杂,短时间内无法从数值角度完整分析出最优的兵种配置。
- 从攻击力、血量和兵种占比的角度,总体策略是“胖法流”,即胖子+法师的组合。
- 由于一共有四种出生点策略,对应不同的出生点数量,都有不同的兵种组合:
- 只有一个出生点时:30胖子+20法师
- 有两个出生点时:每个出生点15胖子+12法师
- 有三个出生点时:每个出生点10胖子+7法师
- 有四个出生点时:每个出生点7胖子+6法师
- 优点
- 出生点分散,能有效提高部队存活时间,从而提高摧毁率。
- 胖法流配置固定,在微操上能够更加有效地利用胖子吸收伤害,同时减少运算量,避免超时失误。
- 缺点
防守策略
- 防守策略主要是对于虚弱和冰冻两种魔法的释放条件的理解
- 初赛时发现炸弹人如果把围墙破开了口,会造成战局形势的巨大改变。因此我们在虚弱魔法是针对炸弹人量身定做的。按照以下规则进行:
- 确认当前这一轮的剩余虚弱魔法数量,如果还有,则遍历所有的进攻方士兵对象,如果有炸弹人在我方围墙1格范围内,并且能被我方防御建筑攻击到,则作为候选人。
- 以候选人为中心点,在九宫格范围内计算人数总和,按照人数进行降序排序。
- 按照排名逐个释放虚弱魔法。
- 冰冻的释放逻辑是决赛时加入的,按照以下规则进行:
- 确认当前这一轮的剩余冰冻魔法数量,如果还有,则遍历所有的进攻方士兵对象,如果有法师|皮卡|弓箭手这三种高攻击力或远程攻击兵种,并且他们处在攻击状态(有攻击目标),则作为候选人。
- 以候选人为中心点,在九宫格范围内计算人数总和,按照人数进行降序排序。
- 取第一个元素作为释放位置。如果还有剩余冰冻,则遍历排序后的候选人,如果它的九宫格范围内已有冰冻,则跳过。直到找到没有交叠的区域位置。
- 决赛时由于大家很少用炸弹人,因此虚弱没有释放。而冰冻在决赛第三轮成功地保护了基地。
posted @
2022-07-14 15:18
IcyYs
阅读(
275)
评论()
编辑
收藏
举报