找到迷宫中的最短路径并采取行动

时间:2015-05-25 02:40:13

标签: c++ maze

我正在制作一个胭脂游戏,我的一个怪物表现得像这样。 在迷宫中,如果怪物可以在15步或更少的步骤中到达玩家,则可以实现最佳移动。为了实现这一点,我写了一个小程序,模仿我游戏中将要发生的事情。我的程序以一种方式工作,它能够检查x大量的移动是否会让他到达目的地。 我不确定的唯一部分是如何获得第一步,所以我可以将该信息传递给我的怪物移动功能。这是我到目前为止写的程序。

#include <iostream>

using namespace std;



bool pathExists(char maze[][10], int sr, int sc, int er, int ec, int distance)
{
    if (maze[sr][sc] != '.')
        return false;

    if (sr == er  &&  sc == ec)
        return true;

    if(distance ==15)
    {
        cout<<"Cant make it in 15 steps"<<endl;
        return false;
    }
    maze[sr][sc] = '@';  // anything non-'.' will do

    if (pathExists(maze, sr-1, sc, er, ec, distance+1))
        return true;
    if (pathExists(maze, sr+1, sc, er, ec,distance+1))
        return true;
    if (pathExists(maze, sr, sc-1, er, ec, distance+1))
        return true;
    if (pathExists(maze, sr, sc+1, er, ec, distance+1))
        return true;

    return false;
}





int main()
{
    char maze[10][10] = {
        { 'X','X','X','X','X','X','X','X','X','X'},
        { 'X','.','.','.','.','.','.','.','.','X'},
        { 'X','.','X','X','X','X','.','X','X','X'},
        { 'X','.','.','X','.','X','.','.','.','X'},
        { 'X','.','.','X','.','.','.','X','.','X'},
        { 'X','.','X','X','.','X','X','X','.','X'},
        { 'X','.','X','.','.','.','.','X','X','X'},
        { 'X','.','.','X','X','.','X','X','.','X'},
        { 'X','.','.','x','.','.','.','.','.','X'},
        { 'X','X','X','X','X','X','X','X','X','X'}
    };

    if (pathExists(maze, 8,8, 1,1,0))
        cout << "Solvable!" << endl;
    else
        cout << "Out of luck!" << endl;
}

总结一下,我希望获得有关这个怪物的第一步的信息。我知道这很容易问,但我不熟悉递归,有点迷失在我的代码中。

谢谢c ++的神。

1 个答案:

答案 0 :(得分:0)

使用*算法。虽然你需要弄清楚墙碰撞。但是既然你正在使用网格,我会说用A *算法。维基百科已经解释了算法。(伪代码)

从c ++开始,你需要使用向量。 如果您仍然不了解维基百科上的代码,那么您可以使用我几个月前创建的库。 (不是一个库,但你可以称它为类似的代码。你必须改变几个值才能使它工作。我已经把它变成了20x20的迷宫;你需要10x10)