2013-03-25 80 views
1

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

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

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

我想的是,机器人的位置可以被定义为一个Java Point类和电网会?二维数组

会像下面是一个开始

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

有没有人每次试图写一个这样的程序是否有可能

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

+0

如果您按照以上实施方式调用forward(),但机器人已经在(4,4)处,会发生什么情况。 :) – selbie 2013-03-25 17:23:41

+0

@selbie我已经计划在每次搬迁之前进行边界检查。 – TheCoder 2013-03-25 17:25:26

+0

@selbie:我认为更重要的是“前进”将始终将机器人移动到正确的位置。 – 2013-03-25 17:25:39

回答

1

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

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

网格类应具有这些性能:

  • 其minX,这是一个int
  • maxX的,这是一个int
  • MINY,这是一个int
  • MAXY,这是一个int

而这些方法:

  • 的isValid(INT的x,int y)对

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; 
    ... 
} 

有趣的是要注意,就是网格类可以存储任何形状。只要你检查你想要去的地方是否有效,机器人并不关心网格的外观。你可以把你的机器人从这个网格中抽出来,放到另一个网格上,它仍然可以以同样的方式工作。

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