用于游戏的路径寻找算法

时间:2016-01-16 13:48:49

标签: c++ algorithm path-finding

我在大学里有这个分配,我得到了一个涉及寻路的C ++游戏的代码。使用波函数进行寻路,并且分配要求我对寻路工作的方式做出一定的改变。

该分配要求寻路始终选择距离除空白区域以外的任何物体最远的路径。如下所示:

enter image description here

这是我到目前为止得到的结果:

enter image description here

下面我发布了有关路径查找的更新功能部分,因为我很确定这是我需要进行更改的地方。

for (int y = 0, o = 0; y < LEVEL_HEIGHT; y++) {
    for (int x = 0; x < LEVEL_WIDTH; x++, o++) {
        int nCost = !bricks[o].type;
        if (nCost) {
            for (int j = 0; j < 4; j++)
            {
                int dx = s_directions[j][0], dy = s_directions[j][1];
                if ((y == 0 && dy < 0)
                    || (y == LEVEL_HEIGHT - 1 && dy > 0)
                    || (x == 0 && dx < 0)
                    || (x == LEVEL_WIDTH - 1 && dx > 0)
                    || bricks[o + dy * LEVEL_WIDTH + dx].type)
                {
                    nCost = 2;
                    break;
                }
            }
        }
        pfWayCost[o] = (float)nCost;
    }
}

如果需要进一步明确问题,还需要Wave function

我非常感谢任何关于如何继续的想法,因为我已经在这方面苦苦挣扎了很长一段时间。

1 个答案:

答案 0 :(得分:0)

您的问题可以简化为minimum-bottle-neck-spanning-tree

对于减少,请执行以下操作:

  1. 计算空间中每个点/单元的成本,作为到对象的最小距离。
  2. 制作图表,其边缘对应于空间中的点,并且边缘的权重是在先前步骤中计算的成本。图的顶点对应于单元格之间的边界。
  3. 对于具有4个单元的一维空间,成本为10,20,3,5:

    |10|20|3|5|
    

    图表看起来像:

     A--(w=10)--B--(w=20)--C--(w=3)--D--(w=5)--E
    

    节点A-E对应于单元格的边界。

    1. 运行Prim's algorithm以查找MST。您正在寻找从入口点(在上面的示例中为A)到结果树中的出口点(E)的直接方式。