如何随机化Java“ if”语句顺序或执行顺序代码?

时间:2019-05-08 05:29:59

标签: java algorithm depth-first-search

我正在为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语句的顺序?

2 个答案:

答案 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')