【发布时间】:2021-01-14 16:05:15
【问题描述】:
我有一个 Player 类,其中包含一个 path 属性; path 属性是 ArrayList<Node>。
每个Players 路径可以有不同的大小。
对于当前的Player我想比较一下其他的Playerpaths,看看同一个元素和索引是不是同一个位置;然后只更改当前的path。
例子:
for(Player p : listAI()) {
if(p == bot || p.getPath() == null || path == null) continue;
for (int i = 0; i < Math.min(p.getPath().size(), path.size()); i++) {
if (path.get(i).position.equals(p.getPath().get(i).position)) {
path.add(i,MoveType.None);
}
}
}
原始路径:
- currentBot = [5:3, 5:4, 5:5, 6:2] //我们正在检查的机器人
- bot1 = [5:3, 6:4, 7:2, 3:9]
- bot2 = [5:3, 6:2, 7:2, 5:5, 5:8]
处理使用 NONE 更新路径的 for 循环(我们正在尝试找出的那个);应该只改变当前机器人的路径。
改变它:
它应该一次查看其他机器人路径。如果它在同一个索引处找到相同的位置,那么它只会通过添加一个空白移动来更新当前的机器人路径。
示例循环(bot1 和 bot2 路径在整个检查过程中永远不会改变):
第一次迭代:(currentBot 检查 bot1 以查看它是否在相同索引处具有相同位置
-
currentBot 将路径与 bot1 进行比较
-
currentBot 看到索引 0 是一样的
-
currentBot 在索引 0 处插入一个空白移动;
第一次迭代后的currentBot路径:[0:0, 5:3, 5:4, 5:5, 6:2]
第二次迭代:(currentBot 检查 bot2 是否在相同索引处具有相同位置
-
currentBot 现在将新路径与 bot2 进行比较
-
currentBot 看到索引 3 相同
-
currentBot 在索引 3 处插入一个空白移动
第二次迭代后的 currentBot 路径:[0:0, 5:3, 5:4, 0,0, 5:5, 6:2]
循环结束: findPath 算法返回新路径;
有了这些信息,我只想修改上面示例中所示的路径之一,在添加空白位置后,我基本上将位置移动到 1 个索引上。
即使比较不同大小的路径,有人可以帮我实现吗?尽可能高效?
【问题讨论】:
-
playerList 和路径变量的最大大小是多少?另外,如果 path 是 List,path 和 playerList 的大小是否一直相同?
-
@BSangappa 它可能会有所不同。作为一款网络游戏。每个路径的目标可能不同