八达网

标题: 用移动阻挡你的敌人——从一个简单的星际运行原理到第11大核心竞争力 zz from ps [打印本页]

作者: nejcnejc    时间: 2008-11-17 14:53
标题: 用移动阻挡你的敌人——从一个简单的星际运行原理到第11大核心竞争力 zz from ps
用移动阻挡你的敌人——从一个简单的星际运行原理到第11大核心竞争力
这个标题中的“第11大”只是戏谑的自称,吸引眼球,请大家不必当真。

多年以前我就注意到一个现象,这个现象估计很多人有过隐约的感觉,但我从未看见大家讨论过。也许是我没看见这些讨论,那此文权当复习。如果的确是大家未曾讨论过的东西,则它确实可以带给你一点帮助。

关于这个现象的隐约感受就是:“作战时,一边打一边微调最前方的部分的走位,似乎可以对自己有利。”不过这太笼统了,有的人的感受更具体一点:“微调最前方的部队的走位,似乎可以延缓对方的冲锋,即使我只是在胡乱地微调。”

例证之一,就是用雷车阻挡zelot。TVP阵地决战,有的人似乎有很好的“雷车阵型”,但雷车都站住不动,似乎很容易就被插入坦克阵,zelot会冲过那些细小的缝隙向坦克近身。而如果你毫无目的地扯动一下雷车,即使看上去雷车之墙空隙更大了,那些zelot却傻傻地被卡住,容易在近身前就被消灭。

这是为什么呢?让我们做一个小实验。两个SCV排成一条横线,让左边的SCV走到右边SCV的右边空地:
SCV甲    SCV乙    目的地
我们会发现,SCV甲将会灵活地绕开SCV乙,到达目的地。视距离和方向的不同,SCV甲可能会直接向上一小格,然后横向移动到目的地上方,再下一格;或者先接近SCV乙,然后贴着SCV乙绕开,再下到目的地,等等。无论电脑为你选择哪一种走法,整个过程都是流畅的,没有任何停顿。

实际上,当SCV甲被下达MOVE指令的同时,电脑已经算好了全部的行走路线。之后,它只是按照预定路线移动罢了。在计算路线的时候,阻挡的SCV乙和其他诸如河流、高地一样,成为地形的一部分。因此,算好的路线已经避开了SCV乙。

有的朋友要问了:“但是一个SCV和一块高地不同,SCV乙是活动单位,你都按照下达MOVE指令时SCV乙的位置来计算地形,那到时候SCV乙走掉了了,这个路线不是就不够优秀了?本来可以走直线,还是要走弯路。”

您问得好,可以猜想,的确会走弯路。不信再做一个实验:选择那种SCV甲会贴着SCV乙绕开的路线,在SCV甲到达SCV乙身前之前,就把SCV乙移走,看看SCV甲怎么动?不出所料,SCV甲还是走他的预定路线,绕开了一个不存在的SCV乙的身位,,就好像那里有个隐形的SCV乙一样!

为什么会这样设计呢?Blizzard为什么不做得更好,让它走直线呢?(解决办法:SCV甲每走一格都重新集算路线,就可以在SCV乙让开以后,走上直线的幸福道路了)

这是因为,计算路径是一个非常耗时间的运算。(题外话:计算精确的最优路径是一个NP问题,实际一般是用近似的最优路径的A*算法。即使你认为现在电脑比当时快得多,是否可以采用计算精确路径的算法,答案也是不可能,这超出了计算机的计算能力。即使是采用近似算法,这个计算也不怎么快。)

既然非常耗时,那我们就要节约计算资源了。所以,我们一旦计算了一条路线,就会坚定的让它走下去。(再顺便一提,move到一个指定空地和move到一个活动单位的位置不同。比如你用狗追scv,狗的目的地就是不断变化的。但是由于计算路线很慢,所以不可能每当scv移动一点点都去重新计算路线,而是要间隔一定时间才重新计算路线。这就是为什么scv不断转向的时候狗会犯傻,从而活得更长久的原因,也是为什么要手动操作狗才能更好的追scv的原因。)

Ok,目前为止,我们验证了:一个单位会走计算好的预定线路,即使线路上的阻挡单位消失了。
接下来才是真正的问题:“刚才的问题还好办,最多是SCV甲没有走最短的线路。可是万一有单位挡在了他预定的线路上,那可怎么办呢?”

简单,让我们再次实验。在SCV甲尚未接近SCV乙时,向上移动一点SCV乙,挡住他的预定路线!

这时我们终于看到了这一幕:SCV甲被卡住!他似乎失去了方向,迟缓了下来,经过一番停顿之后,才重新启动,再次绕开SCV乙,并最终抵达目的地。

很明显,游戏逻辑是这样的:SCV甲每走一步之前,要看看这一步到底能不能走(换言之,又没有出现新的东西挡住下一步的位置)。能走的话最好,不能走怎么办呢?那就——停下,重新计算路线!

此时我们终于可以回到前文所述的“隐约感受”上来了:为什么扯动的雷车可以延缓zelot的冲锋?因为zelot不停地在被迫做这件事情:预定路线受阻、停下、重新计算路线!预定路线受阻、停下、重新计算路线!预定路线受阻、停下、重新计算路线!预定路线受阻、停下、重新计算路线!预定路线受阻、停下、重新计算路线!预定路线受阻、停下、重新计算路线!预定路线受阻、停下、重新计算路线!预定路线受阻、停下、重新计算路线!预定路线受阻、停下、重新计算路线!

整个理论终于解释清楚了,让我们看看一些简单应用:

一个probe不停在drone前方晃动,阻挡drone;

雷车定时横向扯动,阻碍zelot冲锋;zelot定时重新点击坦克,在被迫停顿之前,人为重新加算路线,从而绕开雷车阻挡!(重新点击坦克时的重新计算路线不是因为遇到阻挡才发生,所以不会停下;而整个双方操作的目的,就是比对方更晚下达命令,从而得到正确的路线计算!)

龙骑zelot冲锋时,zelot在龙骑开始交火时要重新A或移动,避免被自己龙骑卡住(同样,比龙骑停下的时间更晚下达命令,从而绕开阻拦)


全文完
作者: 怕娃落地    时间: 2008-11-17 15:04
很强大。。这么多字。
作者: 小兹    时间: 2008-11-17 15:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: [yh]sww    时间: 2008-11-17 15:20
大致看了下 很猛
作者: instant    时间: 2008-11-17 15:21
很好的文章
作者: stephenzxj    时间: 2008-11-17 15:22
/..................
作者: parkergy    时间: 2008-11-17 15:26
技术贴啊 顶了
作者: 老汉推车    时间: 2008-11-17 15:27
水晶 +100
作者: HH106    时间: 2008-11-17 15:32
有研究,顶下
作者: 雷德黑手    时间: 2008-11-17 15:37
NB。。。这个纯技术帖啊!丁页!
作者: 1003    时间: 2008-11-17 15:45
好帖
作者: hkkhhk    时间: 2008-11-17 15:49
a星算法的确不错
作者: 红狼    时间: 2008-11-17 15:51
hao tie。
作者: xhb221    时间: 2008-11-17 15:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: 加索尔    时间: 2008-11-17 15:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: elffkdx    时间: 2008-11-17 16:08
楼主的意思是在XX向坦克攻击时,用雷车去尽量挡住他预算好的路线?感觉有点超过了人的操作极限。不知道过多久会有人能运用好。
作者: YF~dragoon    时间: 2008-11-17 16:15

作者: lry    时间: 2008-11-17 16:17
NP 问题,A*算法。。。这都出来了   
作者: Wind_Follower    时间: 2008-11-17 16:46
原帖由 elffkdx 于 2008-11-17 16:08 发表
楼主的意思是在XX向坦克攻击时,用雷车去尽量挡住他预算好的路线?感觉有点超过了人的操作极限。不知道过多久会有人能运用好。

不是,是比如200冲锋的时候,xx有3队吧,那么肯定不可能全挡住,但是干扰7,8个的可能性是很大的,毕竟前方冲锋的路线比较单一,还是比较容易打乱既定路线的
作者: aaafffei    时间: 2008-11-17 16:50
问题是你如果右键移动的话,你的雷车实际上是和zealot在互相阻挡,然后你雷车的火力也输出不了。
作者: 大米    时间: 2008-11-17 16:56
知识贴~
作者: kkk1234486    时间: 2008-11-17 17:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: 2Ber    时间: 2008-11-17 17:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: yfx185    时间: 2008-11-17 17:03
LZ在进行独立思考,不错!
作者: laoshu025    时间: 2008-11-17 17:07
很好很强大
作者: hyoga    时间: 2008-11-17 17:08
222222222
作者: [ESP]の哈哥    时间: 2008-11-17 17:19
很好
很实用
应该加分
作者: coolboy37    时间: 2008-11-17 17:23
精华帖
作者: fell    时间: 2008-11-17 17:26
需要的就是这种肯钻研的人才
作者: galneryus    时间: 2008-11-17 17:30
个人认为此帖技术含量远高于之前十个看不清的核心竞争力 顶
作者: Wind_Follower    时间: 2008-11-17 17:32
原帖由 aaafffei 于 2008-11-17 16:50 发表
问题是你如果右键移动的话,你的雷车实际上是和zealot在互相阻挡,然后你雷车的火力也输出不了。

当然不一样,雷车是远程兵种,攻击输出被削弱很少,几乎没影响.而且实战中雷车主要吸收火力和打XX,从这个角度上看,没什么影响
作者: FengQian    时间: 2008-11-17 17:33
"用移动阻挡你的敌人"可以简化为“卡位”。
作者: aaafffei    时间: 2008-11-17 17:36
原帖由 Wind_Follower 于 2008-11-17 17:32 发表

当然不一样,雷车是远程兵种,攻击输出被削弱很少,几乎没影响.而且实战中雷车主要吸收火力和打XX,从这个角度上看,没什么影响

除非你是甩尾移动,不然要想在移动的时候攻击没可能阿。
作者: Wind_Follower    时间: 2008-11-17 17:40
原帖由 aaafffei 于 2008-11-17 17:36 发表

除非你是甩尾移动,不然要想在移动的时候攻击没可能阿。

不,这种拖拽只是左右拉扯一下,不是大范围调动,完成时间很快,大概1秒左右就完成了,卡位,也打乱了XX阵型.而xx必须近身才能攻击,而且要冲坦克群,雷车依然可以打xx,xx却不能攻击输出给雷车.浪费的可不仅仅是1秒阿
作者: 加索尔    时间: 2008-11-17 17:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: aaafffei    时间: 2008-11-17 18:00
原帖由 Wind_Follower 于 2008-11-17 17:40 发表

不,这种拖拽只是左右拉扯一下,不是大范围调动,完成时间很快,大概1秒左右就完成了,卡位,也打乱了XX阵型.而xx必须近身才能攻击,而且要冲坦克群,雷车依然可以打xx,xx却不能攻击输出给雷车.浪费的可不仅仅是1秒阿

如果操作相同的话,很有可能是两败俱伤阿,毕竟p也不是傻的,人家只要再按一次a就ok了。
作者: Lanyu    时间: 2008-11-17 18:28
理论成立  但是没鸟用




欢迎光临 八达网 (https://www.8-da.com/) Powered by Discuz! X2.5