我正在编写一个Java程序,允许用户向机器人发送消息,告诉它在5x5网格上的位置。例如,如果我发送它'FRFFLF',这意味着前进,向右跑90度,向前跑两次,向左转90度然后前进。然后程序返回机器人在网格上的新位置。
我不是在寻求解决方案,只是针对我的方法的一些指导方针。是否有可用于此类程序的设计模式(所以我不是重新发明轮子)还是可以从头开始编写?
网格的底部是(0,0,顶部是(4,4)。
我认为机器人位置可以定义为Java Point类,网格是2D阵列吗?
以下内容会是一个开始吗?
public Point forward(Point p) {
p.x +=1;
return p;
}
有没有人试图写这样的程序?有可能吗?
编辑:我考虑过以下几点: 首先,我需要机器人的方向及其当前位置。从那里开始,我将封装网格,围绕边界创建一些规则。基本上我会更新机器人的位置,解释传递给它的命令并根据机器人更新位置。显然机器人只需要在网格范围内移动。答案 0 :(得分:1)
首先,我会决定x和y的含义。在这种情况下,我会说当你向东移动时x会变大,而当你向南移动时y会变大。这通常是它在计算机图形中的工作原理 - 0,0点通常位于左上角,如下所示:http://graphics.comsci.us/notes/coord.html
所以,我要做的是有两个类,机器人和网格。
网格类应具有以下属性:
这些方法:
机器人类应该具有以下属性:
它也应该有这些方法:
如何存储方向无关紧要 - 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类可以存储任何形状。只要您首先检查您要去的地方是否有效,机器人就不关心网格的样子。你可以将你的机器人从这个网格中取出,然后将它放在另一个网格上,它仍然会以相同的方式工作。
我想,接下来会读取你发送给它的命令。那时,也许你只需要一次读取一个字符串,然后执行它指定的命令。