我正在制作一个胭脂游戏,我的一个怪物表现得像这样。 在迷宫中,如果怪物可以在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 ++的神。
答案 0 :(得分:0)
使用*算法。虽然你需要弄清楚墙碰撞。但是既然你正在使用网格,我会说用A *算法。维基百科已经解释了算法。(伪代码)
从c ++开始,你需要使用向量。 如果您仍然不了解维基百科上的代码,那么您可以使用我几个月前创建的库。 (不是一个库,但你可以称它为类似的代码。你必须改变几个值才能使它工作。我已经把它变成了20x20的迷宫;你需要10x10)