首先,我会决定 x 和 y 的含义。在这种情况下,我会说当你向“东”移动时 x 会变大,而当你向“南”移动时 y 会变大。这通常是它在计算机图形中的工作方式 - 0,0 点通常位于左上角,如下所示:http: //graphics.comsci.us/notes/coord.html
所以,我要做的是有两个类,机器人和网格。
Grid 类应具有以下属性:
- minX,它是一个 int
- maxX,它是一个 int
- minY,它是一个 int
- maxY,它是一个 int
还有这些方法:
Robot 类应具有以下属性:
- 位置,这是一个点
- 方向,这是一个方向
- 网格,其中包含网格对象
它还应该有这些方法:
无论您如何存储方向 - 0、1、2、3 或“北”、“东”、“南”、“西”或“上”、“右”、“下”、“左” ,甚至可能是 0、90、180、270、360(度)或弧度。重要的是您在使用方向时保持一致。
现在,在left()
和right()
中,您可以更改机器人的方向。所以你可以做这样的事情:
public void left() {
switch (orientation) {
case "north": orientation = "west"; break;
case "east": orientation = "north"; break;
...
}
}
您将按顺序更改方向,并在right()
函数中以相反的顺序执行它们。
内部forward()
是您与grid
对象交互的地方:
public void forward() {
switch (orientation) {
case "north":
if (grid.isValid(position.x, position.y+1)) {
position.y += 1;
} else {
System.out.println("Can't go there!");
}
break;
...
}
值得注意的是,Grid 类可以存储任何形状。只要你先检查你想去的地方是否有效,机器人并不关心网格是什么样子的。你可以把你的机器人从这个网格上拉下来,然后把它放在另一个网格上,它仍然会以同样的方式工作。
我想,下一点将是读取您发送给它的命令的东西。那时,也许您一次只读取一个字符的字符串,然后执行它指定的命令。