我在上计算机科学课,我们已经开始使用Karel the Robot作为Java OOP的入门。我想同时运行两个Karel the Robots,执行两个不同的任务。我已经尝试在互联网上查找解决方案,我已经成功地制作了一个工作线程,但是,我无法同时运行两个卡雷尔机器人。在这个并发编程问题上的任何帮助都将不胜感激。下面是我一直在使用的代码:
package karel;
import kareltherobot.*;
import kareltherobot.Directions;
import kareltherobot.World;
public class KarelSample implements Directions
{
public static void main(String [] args)
{
Thread Karelrunner = new Thread();
Karelrunner.start();
UrRobot Karel = new UrRobot ( 1,5, North, 2);
Karel.move();
Karel.move();
Karel.putBeeper();
Karel.turnLeft();
Karel.move();
}
static
{
World.setVisible(true);
World.showSpeedControl(true);
}
class Karelrunner implements Directions {
UrRobot Karel2 = new UrRobot(8,8, South, 2);
Karel2.move();
Karel2.move();
Karel2.turnLeft();
Karel2.turnLeft();
Karel2.putBeeper();
Karel2.move();
}
}我还使用了Karel J Robot书的示例,其中线程设置代码如下所示:
public static void main (String [] args)
{ ...
Karelrunner r = new Karelrunner();
World.setupThread(r);
. . .
}请以任何你可以帮助的方式,我正在尝试做一个多线程并发程序。我对此并不熟悉,感谢您的时间和关注。
发布于 2012-09-04 02:13:58
我已经做了更多的研究,并找到了解决问题的方法。感谢kevinsa5的点子。对于在Karel the Robot中遇到多线程问题的任何人,或者一般情况下,我将在下面发布我的代码。希望它能给你一个想法。
package karel;
import kareltherobot.*;
import kareltherobot.Directions;
import kareltherobot.World;
public class KarelSample implements Directions
{
public static void main(String [] args)
{
new Karelrunner(8,8,South,2);
UrRobot Karel = new UrRobot (1,3,North,2);
Karel.move();
Karel.move();
Karel.putBeeper();
Karel.move();
Karel.turnLeft();
Karel.move();
}
static
{
World.setVisible(true);
World.showSpeedControl(true);
}
}
class Karelrunner extends UrRobot implements Directions
{
public Karelrunner (int street, int avenue, Direction direction, int beepers)
{
super ( street, avenue, direction, beepers);
World.setupThread(this);
}
public void run()
{
move();
move();
putBeeper();
turnLeft();
move();
}
} 发布于 2012-09-02 12:39:48
与其考虑线程,也许研究一下设置两次操作之间的延迟会更有帮助。伪代码示例:
create karel_one
create karel_two
while(true){
setdelay(0)
karel_one.act()
karel_two.act()
setdelay(10) // or whatever
}因此,它们看起来好像是同时发生作用的。我几年前就这样做了,但是(正如你可能想象的那样) karel这个机器人在课堂之外并不是很有用,所以我不记得细节了。我认为延迟方法可能是World的一部分?不确定。
编辑:你也可以使用这个想法来创建像turnRight()这样的“即时”函数,而不是一直等着左转三次……呃。
https://stackoverflow.com/questions/12232922
复制相似问题