我有一个2d网格,我试图在所有墙之间创建链接。

网格的构造如下:

    grid = new State[8][8];
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            grid[i][j] = State.blank;
        }
    }

我有一个机器人,它应该能够像蛇游戏一样穿过墙壁到达另一侧。

因此,例如,如果机器人面向北方并处于x [0] y [1]位置,则它应连接到x [7] y [1]。

机器人还应该能够读取它前面三个块中的内容,一个在左边,一个在右边,另一个在前面。
# x = empty space
# R = robot
# S = spaces robots sensors pick up

如果它朝北,这就是机器人将要拾取的东西:
[S][S][S][x][x][x][x][x]
[x][R][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][S][x][x][x][x][x]
[x][R][S][x][x][x][x][x]
[x][x][S][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]

我遇到的问题是找到正确的算法,以确保机器人不仅可以穿过墙壁,而且可以读取穿过墙壁的传感器。

如果机器人在左上角并面向北,则它将像这样通过墙读取:
[R][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]
[S][S][x][x][x][x][x][S]

可以想像,我已经尝试过执行IF语句的长度块,但是有太多的可能性可以覆盖它们而不会发疯!

在某些情况下,我还在纸上写下了X和Y的更改,但是我看不到任何暗示算法的模式。

任何帮助,将不胜感激!

最佳答案

public class Robot {
    public int x;
    public int y;
    public Robot(int x,int y) {
        this.x = x;
        this.y = y;
    }
    public void move(int direction, int steps) {
        switch(direction) {
            case 1: //north
                int temp1 = (x-steps)%8;
                x = temp1<0?(temp1+8):temp1;
                break;
            case 2: //south
                x = (x+steps)%8;
                break;
            case 3: //west
                int temp3 = (y-steps)%8;
                y = temp3<0?(temp3+8):temp3;
                break;
            case 4: //east
                y = (y+steps)%8;
                break;
            default:
                System.out.println("I'm not smart enough to handle the direciton provided!");
        }
    }

    public static void main(String[] args) {
        int[][] grid = new int[8][8];
        Robot robot = new Robot(0,0);
        System.out.println("I'm starting at (0,0).");
        robot.move(3, 9);
        System.out.println("I'm moving west by 9 steps.");
        System.out.println("I've arrived at ("+robot.x+","+robot.y+").");
    }
}

希望上面的代码给出一个想法。我已经测试过了随时尝试。机器人前面三个块的计算是相似的。您可以自行解决。

关于java - 连接迷宫/网格的墙壁,以使所有物体相互连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15096066/

10-10 13:13