Я пишу алгоритм поиска в глубину для сущности-призрака в игре Pacman.Призрак должен искать путь к Пакману.Но даже если есть путь к Пакману, алгоритм поиска в глубину не всегда найдет его из-за порядка операторов if.
private boolean searchPath(
int[][] maze, int x, int y, List<Point> path )
{
System.out.println( "Inky.searchPath: " + "(" + x + "," + y + ")" );
if ( !grid.isValid( new Location( x, y ) ) )
{
System.out.println( "Inky.searchPath: Location is not valid" );
return false;
}
//Target
if ( maze[x][y] == 9 )
{
path.add( new Point( x, y ) );
return true;
}
//Changing point to point visited
if ( maze[x][y] == 0 )
{
maze[x][y] = 2;
//Need something that executes these if statements at random
//Searching one block down
if ( searchPath( maze, x - 1, y, path ) )
{
path.add( new Point( x, y ) );
return true;
}
//Searching one block up
if ( searchPath( maze, x + 1, y, path ) )
{
path.add( new Point( x, y ) );
return true;
}
//Searching one block left
if ( searchPath( maze, x, y - 1, path ) )
{
path.add( new Point( x, y ) );
return true;
}
//Searching one block right
if ( searchPath( maze, x, y + 1, path ) )
{
path.add( new Point( x, y ) );
return true;
}
}
System.out.println("Inky.searchPath: Path not found");
return false;
}
Как вы можете видеть порядок операторов if1. Поиск на один блок вниз 2. Поиск на один блок вверх 3. Поиск на один блок влево 4. Поиск на один блок вправо
Так что, если Призрак входит в ситуацию, когда слева находится открытый блок, он будетидти до тех пор, пока слева не будет открытого блока, тогда вступит в действие второй шаг, и Призрак снова вернется к тому, с чего начал, потому что второй шаг ищет X-1.
Итак, мой вопросесть ли способ случайного порядка, в котором выполняются операторы if?