战场单位的移动和攻击范围设定 当战场中的我方单位被点击时, 如之前所提到的、首先会在精灵点击事件中通过自身ID在“空域目标ID”列表中的位置,来确定行动力表、燃料表中相应位置的数值是否大于0,如果是,则将当前的行动力传参给“点亮范围”函数,这个函数将根据目标的行动力、周边障碍物分布情况,在目标全周显示若干蓝色行动格。
此时点击蓝色行动格的任意处会在改位置先是一个预判箭头标志,此时是可以更换点击其他蓝格位置的,但再次点击该预判标志则单位即执行移动至该处的命令。移动后的单位将扣除本回合部分行动力数值-根据移动距离的大小,倘若本回合行动力尚有闲余也可再次执行移动命令,所有这些操作过程中如果想取消,只需点击空域空位置即可。关于行动格在处理障碍物方面的具体情况,这里所采用的是一套特殊运算后得到的一串数据,该数据会在单位周遭顺时针渐开外旋过程中,根据所涉及位置是否存在其他单位、不可穿越障碍、可穿越的流星体障碍...来决定该行动格是否显示,很明显只要确保这一点,就能维持住单位移动受障碍物影响的真实法则,AI行动时也在这个规则之内。
当我们执行攻击命令的时候也要在我方单位全周显示红色的攻击格,攻击格也是由“点亮范围”函数来处理的,传参是所选战术武器的攻击距离,但这里并不处理什么障碍物等造成的影响,事实上只有被点击选中的敌方目标处于攻击格范围时,才会继续真正发动攻击,而本方单位(包括盟军)即使处于攻击格中也是无法攻击的。
战场上的我方单位主要就是以上所说的移动和攻击两种操作,但是必须要额外说明另一种攻击模式:终极武器-星舰的主炮攻击!
当母舰变形为战斗姿态时,它启用了第3号主武器:星舰主炮。使用主炮攻击时,母舰周遭不显示红色的攻击格,而是出现一个圆形的方位修正盘,点击盘缘可转动盘面调整射角,在射角正对的空域会出现类似扇形范围带死亡标志的打击点,此刻发动攻击则所有处于打击点的目标(不分敌我),都会依次遭受到一次毁灭性的打击,而整个过程中母舰也会持续闪烁着扇形的死光照耀该区域,效果貌似挺华丽!接下来大致介绍下其设计方案:
发动主炮攻击时会通知方位修正盘-攻击对手,此刻方位修正盘移至发动攻击的单位(我方母舰)位置上并显示,点击盘面时修正盘将根据点击位置与修正盘圆心间的角度来旋转调整,同时也产生一组针对该方向的由圆心向外扩展的坐标数据,确认发射后遍历该组坐标数据中是否有作战单位在其中,若有则对其进行一次以主炮攻击命中为输出参数的伤害运算,同时产生战场渲染效果。
除了我方母舰外,敌方的大小星舰均有发射主炮的能力,但基本上每场战役只有一发机会,另外威力和射程也不尽相同,大型星舰的主炮是8格距离、小型的只有6格。关于使用时机,我方自然会选择最关键的时刻一炮扭转局面,而敌方一般不会在开局刚打照面就主炮招呼,总要数回合之后才下“死手”。为了规避主炮的aoe伤害,在敌舰尚未发射主炮前,我方需谨慎计算与敌舰的距离,最好先派遣一支回避值较高的战斗编队去引诱其发射,然后再大批编队一起围攻它。
战场上的攻击行为都是依赖“伤害结果判定”函数来处理的,在这个函数中:命中与回避之间、攻击与防御之间,都各有不同的运算规则,由于没有可参照的案例,笔者也很难确定这些算法的合理性,刚好可以借此机会和大家交流,看看是否有更合理的方案。
下一篇我们专门谈谈这个函数,这里先把 命中/回避 和 攻击/防御 的计算公式列出来:
命中/回避: 命中概率 = 50 + (武器命中值 + 攻击方的命中属性)/ 2 - 目标方回避值 ;
上限与下限 如果(命中概率 < 5)则 (命中概率 = 5); 如果(命中概率 > 100)则 (命中概率 = 99)
最终结果 如果(取1~100随机数 < 命中概率)则 目标被命中! (命中后才能进行攻防判定)
攻击/防御: 攻击威力 = 武器威力 + 攻击方的攻击属性; 基础伤害 = 攻击威力 × 攻击威力 / (目标机型的防御值 + 目标方防御属性)
最终伤害 = 取(基础伤害~攻击威力)随机数。