gpt4 book ai didi

java - 如何指挥机器人

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:58 25 4
gpt4 key购买 nike

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

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

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

我认为机器人位置可以定义为 Java Point 类,网格可以定义为 2D 数组?

像下面这样的事情可以作为一个开始吗?

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

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

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

最佳答案

首先,我会确定 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)

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

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

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

关于java - 如何指挥机器人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15620880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com