【问题标题】:How to direct a robot如何指挥机器人
【发布时间】:2013-03-25 17:16:41
【问题描述】:

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

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

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

我认为 Robots 位置可以定义为 Java Point 类,而网格将是 2D 数组?

以下内容可以作为开始吗?

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

有没有人尝试过编写这样的程序?有可能吗?

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

【问题讨论】:

  • 如果你按照上面的实现调用 forward() 会发生什么,但机器人已经在 (4,4)。 :)
  • @selbie 我计划在每次移动之前进行边界检查。
  • @selbie:我认为更重要的是“前进”总是将机器人移到正确的位置。
  • 如果它面向左/右会发生什么?
  • @Aboutblank 我开始的那一点还处于起步阶段。它不会以目前的形式工作。这不应该是我试图解决的问题。只是一种建议方法的方式。

标签: java grid awtrobot


【解决方案1】:

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

所以,我要做的是有两个类,Robot 和 Grid。

Grid 类应具有以下属性:

  • minX,它是一个整数
  • maxX,这是一个整数
  • minY,这是一个整数
  • maxY,这是一个整数

还有这些方法:

  • 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 类可以存储任何 形状。只要你先检查你想去的地方是否有效,机器人并不关心网格是什么样子的。你可以把你的机器人从这个网格上拔下来,然后放到另一个网格上,它仍然会以同样的方式工作。

我想,下一位将是读取您发送给它的命令的东西。到那时,也许你只会一次读取一个字符的字符串,然后执行它指定的命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多