我正在为Pacman游戏中的Ghost实体编写深度优先搜索算法。幽灵必须搜索到吃豆人的路径。但是,即使有通往吃豆人的路,深度优先搜索算法 由于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;
}
您可以看到if语句的顺序是 1.搜索下一个区块 2.搜索一格 3.向左搜寻一个方块 4.向右搜索一个方块
因此,如果Ghost进入左侧有一个开放块的情况,它将一直进行到直到左侧没有一个开放块为止,然后第二步将开始执行,Ghost将再次返回到它开始了,因为第二步搜索X-1。
所以,我的问题是,有没有办法随机执行if语句的顺序?
答案 0 :(得分:0)
要随机化路线,您可以:
//introduce a collection of directions
private List<int[]> directions = Arrays.asList (new int[][] {{1,0},{-1,0}, {0,1}, {0,-1}}); //right, left, down, up
//use it
Collections.shuffle(directions);
for(int[] dir : directions){
boolean result = searchPath( maze, x + dir[0], y + dir[1], path ) ;
//todo handle result
}
答案 1 :(得分:0)
将您的if语句放在switch中会生成一个随机数,并使用switch来 决定是否执行。
re.findall(r'example')