如何指导机器人

时间:2013-03-25 17:16:42

标签: java grid awtrobot

我正在编写一个Java程序,允许用户向机器人发送消息,告诉它在5x5网格上的位置。例如,如果我发送它'FRFFLF',这意味着前进,向右跑90度,向前跑两次,向左转90度然后前进。然后程序返回机器人在网格上的新位置。

我不是在寻求解决方案,只是针对我的方法的一些指导方针。是否有可用于此类程序的设计模式(所以我不是重新发明轮子)还是可以从头开始编写?

网格的底部是(0,0,顶部是(4,4)。

我认为机器人位置可以定义为Java Point类,网格是2D阵列吗?

以下内容会是一个开始吗?

    public Point forward(Point p) {
    p.x +=1;
    return p;
}

有没有人试图写这样的程序?有可能吗?

编辑:我考虑过以下几点: 首先,我需要机器人的方向及其当前位置。从那里开始,我将封装网格,围绕边界创建一些规则。基本上我会更新机器人的位置,解释传递给它的命令并根据机器人更新位置。显然机器人只需要在网格范围内移动。

1 个答案:

答案 0 :(得分:1)

首先,我会决定x和y的含义。在这种情况下,我会说当你向东移动时x会变大,而当你向南移动时y会变大。这通常是它在计算机图形中的工作原理 - 0,0点通常位于左上角,如下所示:http://graphics.comsci.us/notes/coord.html

所以,我要做的是有两个类,机器人和网格。

网格类应具有以下属性:

  • minX,这是一个int
  • maxX,这是一个int
  • minY,这是一个int
  • maxY,这是一个int

这些方法:

  • isValid(int x,int y)

机器人类应该具有以下属性:

  • 位置,这是一个点
  • 方向,这是一个方向
  • grid,包含网格对象

它也应该有这些方法:

  • 向前()
  • 左()
  • 右()

如何存储方向无关紧要 - 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类可以存储任何形状。只要您首先检查您要去的地方是否有效,机器人就不关心网格的样子。你可以将你的机器人从这个网格中取出,然后将它放在另一个网格上,它仍然会以相同的方式工作。

我想,接下来会读取你发送给它的命令。那时,也许你只需要一次读取一个字符串,然后执行它指定的命令。