首先,我会决定x和y的含义。在这种情况下,我会说当你移动“东”时,x变大,而当你移动“南”时,y变大。这通常是它在计算机图形中的工作原理 - 0,0点通常位于左上角,如下所示:http://graphics.comsci.us/notes/coord.html
所以,我要做的是有两个类,Robot和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;
...
}
有趣的是要注意,就是网格类可以存储任何形状。只要你检查你想要去的地方是否有效,机器人并不关心网格的外观。你可以把你的机器人从这个网格中抽出来,放到另一个网格上,它仍然可以以同样的方式工作。
接下来的一点是读取您发送给它的命令,我想。那时候,也许你会一次只读一个字符串,然后执行它指定的命令。
如果您按照以上实施方式调用forward(),但机器人已经在(4,4)处,会发生什么情况。 :) – selbie 2013-03-25 17:23:41
@selbie我已经计划在每次搬迁之前进行边界检查。 – TheCoder 2013-03-25 17:25:26
@selbie:我认为更重要的是“前进”将始终将机器人移动到正确的位置。 – 2013-03-25 17:25:39