我有一个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/