|
发表于 2014-5-25 20:05:20
|
显示全部楼层
本帖最后由 littleknife 于 2014-5-25 08:37 PM 编辑
huacuoh 发表于 2014-5-22 08:09 AM
---【【
本帖最后由 huacuoh 于 2012-4-24 09:06 PM 编辑
所谓的乱入,就是本来我设计好的行走路线是a b c d e,结果在走到c房间的时候却被系统推到m房间去了。
所以解决乱入的基本思路就是以m房间为中心点进行深度遍历,一直找到c房间时遍历停止。记录从m到c的路径,添加到原来的路径当中。
也就是:
1, 当在c房间时候记录下c房间的所有信息。
2,乱入到m房间,打完劫匪后,镖车放下,深度遍历,、每走到一个房间和以前记录的正确的c房间信息作对比,如果相同遍历停止,找到c房间,记录下从m到c房间的路径为n e的话,那么修正原来的路径(变量lj)为a b c (w s n e) d e,然后回到m房间从lj的第bianli_i+2步开始行走就ok了,
具体的代码实现:---------------深度遍历-------------------------------------------------------------
--】】
这种思路将面临的问题:
按指定线路推车,然后遇到乱入遍历的第一个问题,就是你得记住每一步走到哪里了。以便判断在哪一步发生的乱入。
但是若是多层乱入,这个问题就很复杂了,一次乱入你刚记录好房间,然后再次发生乱入
怎么办?如:你记录的顺序a、b、c、d,c点发生乱入到m。但是你从m推到c的过程中再
次发生n次乱入。嚯嚯。。甚至乱入在一定时间都不停,你又咋办。。。最后就是根本无法还原线路。
1、乱入点是随机的,你无法判断在哪步发生,除非每推车一步就记录房间信息。可是在当前网络狂卡LAG的情况下,每推走一步就记录房间信息
(你指的是房间名吗?那信息可太少了)基本不太可能。abcd,在c点发生乱入,你只知道走到了第几步发生的乱入,可是这步对应的房间信息如何获取?事先录制好?
所以我称按线路推车为‘闭眼睛’推车,很不好控制。
我的早期解决方法:
所以一定要遍历的话,可以采用投掷标记物的方法:就是每推车一步,刚推到新房间就仍一个东西(比如铜钱、酒袋等等)最妥善的标记物就是自己的大米,呵呵。然后发生乱入了就去遍历标记物。在推下一步之前收回标记物。无论多少层乱入,标记物找到后就可以计算路线返回了。
2、放下镖车遍历房间信息,尤其是重复房间很难处理。若你的镖车跟前还有个镖车(两个镖车在一个房间)甚至此房间还是重复房间,嚯嚯。。采用上面的思路吧。
3、最麻烦的、最根本核心的其实归根结底还是房间信息的获取问题。
最终的解决办法:录制地图库吧。线路自动查询生成GPS。乱入去吧。。到哪里我都知道在哪里。呵呵。
对于韩世忠的JOB:副本地图内由于本身有其自身的“特点”,所以其实不用完全靠遍历来解决。比如,开始的时候就带你到NPC地点等,再比如在某某一定出现NPC等等。。若用遍历解决。还是深度遍历(中心点遍历)比较合适。但是韩世忠的副本出现多个NPC需要记录其个数,其流程设计反倒是重于遍历。
附一段早期的线路代码仅供参考吧:
- -----------------------------------------------------------------------------
- function inter_path(pathstring,startpoint,endpoint)
- ----给一条路线,截取起始点到终止点的正向路线。
- ----如:pp="e;w;s;n;e;n;e;n;e",总步数:9步。截取第3步开始到第5步的路线。
- ----第3-第5的路线:s;n;e,即抽出第3、4、5步单存成为一个串。s;n;e
- ----pp,3,0意思是从3开始到最后即s;e;e;n;e;n;e,pp,0,3意思是从开始到第三步即e;w;s
- ----5,5,意思是从5开始到回扣到5,e;n;e;n;e; e;w;s;n;e
- local temp_steps_tb={}
- _,_,blpath_tb,_=convert_path(pathstring)
- fullsteps=table.maxn(blpath_tb)
- if startpoint<=1 then startpoint=1 end
- if endpoint>fullsteps then endpoint= fullsteps end
- if startpoint<=endpoint then
- for i= startpoint,endpoint do
- table.insert(temp_steps_tb,blpath_tb[i])
- end
- blpath_string=table.concat(temp_steps_tb,";")
- return blpath_string
- else
- for i= startpoint,fullsteps do
- table.insert(temp_steps_tb,blpath_tb[i])
- end
- for i=1,endpoint do
- table.insert(temp_steps_tb,blpath_tb[i])
- end
- blpath_string=table.concat(temp_steps_tb,";")
- return blpath_string
- end
- end
复制代码 |
|