自走棋的几个误解——棋子行动规律、死亡结算等

2019-03-10 16:39:55 神评论

17173 新闻导语

结合代码普及下最近传播较广的几个误解——棋子行动规律、死亡结算等

QQ截图20190310161841.jpg

谬误1

刺客AI:逻辑是如果攻击范围内没有敌人,就会跳向最远(左或右边)的敌人,普通卡的AI:跳向最近的敌人。注意:存在一种大跳机制(观测得出,上述是代码逻辑),即有时候最近的卡离得过远,会一次跳3-4格,普通情况一次只跳一格,我最喜欢放一个底线2级敌法,如果来刺客了就削刺客蓝,否则会第二时间进场,规避伤害并削敌人前排蓝。

说到刺客单位的移动规律,首先要解释清楚自走棋战斗阶段的行动机制。自走棋的战斗阶段,每个战场内的敌我棋子均是按照各自单独的AI流程化行动的,具体到每个棋子的单一“行动轮”的流程,大体是这么一个顺序:

使用物品——判断是否释放技能——决定是否攻击——如果不能攻击则移动

所以3龙开场一般是精灵龙、龙骑直接开大,毒龙如果在技能范围内有敌方单位也会先开大再攻击/移动。

棋子的移动分为2种移动形式:刺客、非刺客。刺客的移动方式比较简单好理解,大体上来说刺客会移动到它能够移动的敌方最深行的可以攻击到敌人的格子。为了方便说明,我把每个棋盘按照从下到上每一行定为行1,行2,...,行8,从左到右每一列定为列1,列2,...,列8(我方最后排是行1,敌方最后排是行8)。那么

我方刺客的移动判定机制是从行8到行1,每一行内列8到列1(双重for循环,稍有编程知识者很容易理解)顺序检索,如果某一格满足1)为空 2)可攻击到对手棋子,则选定此格作为下个移动位置。

敌方刺客的移动判定机制类似,是从行1到行8,每一行内列8到列1顺序检索。

简而言之,刺客在需要移动时并不是跳往“最远”的敌人身边,而是尽可能跳往敌军“最深”行。

谬误2

单体技能AI:逻辑是大约是70%选择目标等级最高的棋子,30%随机选择棋子,并且还跟目标当前的蓝量有关,蓝量越高被选中的概率越高,理论上讲如果一个3星橙卡蓝量一直为0也不会被DOOM。 神灭斩蛇棒真的是feature么

单体技能AI:逻辑是大约是70%选择目标等级最高的棋子,30%随机选择棋子,并且还跟目标当前的蓝量有关,蓝量越高被选中的概率越高,理论上讲如果一个3星橙卡蓝量一直为0也不会被DOOM。 神灭斩蛇棒真的是feature么

自走棋的技能AI细分为16类,我这里简单引用下代码说明:

释放技能:11=新沙王,0=被动技能,1=单位目标,2=无目标,3=点目标,4=自己目标,5=近身单位目标,6=先知在地图边缘招树人,7=随机友军目标(嗜血术),8=随机周围空地目标(炸弹人),9=血量百分比最低的队友,10=等级最高的敌人(末日),12=小小投掷身边的敌人到最远的格子,13=自己为中心的点目标,14=pom特殊目标,15=slark跳跃

几个特殊AI为

11=新沙王,对应沙王、水人

6=先知在地图边缘招树人,对应先知,蝙蝠(火焰路径),后者未实装

8=随机周围空地目标(炸弹人),对应炸弹人,剧毒术士

9=血量百分比最低的队友,对应全能骑士,LOA

10=等级最高的敌人(末日),对应末日,Lina

12=小小投掷身边的敌人到最远的格子,对应小小

13=自己为中心的点目标,对应隐刺

14、15分别对应pom和小鱼

单说末日和Lina的技能AI,这两个大招30%的几率从可摧毁列表(大体可以视作当前棋盘内存活的所有单位的一个列表)中选取一个随机敌对单位(可以是召唤物)释放,70%的几率选取可摧毁列表里位置最靠前的等级最高的敌对单位。这里有两个例外,一是最大魔法量为0的单位(只有被动的英雄以及召唤生物)始终视为等级1;二是不会选择已经中了末日的单位(没错,如果中了末日大,你甚至有70%概率免疫Lina大,因为地图作者把这两个技能AI写一块了...)。吃末日和Lina大招的概率和单位的当前蓝量没有任何关系。

谬误3

延迟死亡:最延缓死亡的方式是信使在角落,死亡之爪过来的时候-TP并对角线反向跑,大约能够拖延0.5-1秒的时间,也许就能多一名。

这应该是传的最广的一个谬误了, 就连imbatv的比赛也有一堆人在用 。说明一下,信使的死亡以及死亡时间和死亡之爪的动画没有任何关系。

我来按顺序解释下信使死亡回合具体发生了什么:

1、回合结束结算,此时场上剩余的敌对棋子会显示一个胜利动画

2、每个剩余敌对棋子对我方信使释放一个死亡之爪的动画(无伤害)

3、计算一个死亡延时时间t,这个时间t由我方信使和可摧毁列表最后一个单位的距离所决定,距离越远t越大。所谓可摧毁列表最后一个单位就是场上剩余敌方单位里位于该列表最后的单位。

4、统计棋子所受伤害

5、开始一个计时器,计时器时长为t

6、计时器到时,此时计算信使血量能否承受所受伤害,如果不能,进入死亡结算

7、强制杀死信使,在信使头上显示对应伤害数值,完成死亡结算

8、同步数据(相当于将死亡时间上传服务器)

如何延迟死亡?你需要在战斗结束的一瞬间离可摧毁列表最后一个单位越远越好。


【来源:】
日期
游戏
状态
下载
礼包

页游测试表

日期
游戏
状态
评分
礼包