Java 并发编程。使用机器人卡雷尔

Java 并发编程。使用机器人卡雷尔,java,multithreading,class,robot,karel,Java,Multithreading,Class,Robot,Karel,我在上计算机科学课,我们已经开始使用机器人Karel作为Java OOP的入门。我想同时运行两个机器人,执行两个不同的任务。我曾尝试在互联网上查找解决方案,并成功地制作了一个工作线程,但我无法同时运行两个Karel机器人。在此并发编程问题上的任何帮助都将不胜感激。 以下是我一直使用的代码: package karel; import kareltherobot.*; import kareltherobot.Directions; import kareltherobot.World; publ

我在上计算机科学课,我们已经开始使用机器人Karel作为Java OOP的入门。我想同时运行两个机器人,执行两个不同的任务。我曾尝试在互联网上查找解决方案,并成功地制作了一个工作线程,但我无法同时运行两个Karel机器人。在此并发编程问题上的任何帮助都将不胜感激。 以下是我一直使用的代码:

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 book的示例,其中线程设置代码如下:

public static void main (String [] args)
{ ...

Karelrunner r = new Karelrunner();
World.setupThread(r);

  . . .
}

请尽你所能帮助我,我正在尝试制作一个多线程并发程序。我不熟悉这一点,感谢您的时间和关注。

与其考虑线程,不如考虑设置操作之间的延迟将更有帮助。伪代码中的示例:

create karel_one
create karel_two
while(true){
setdelay(0)
karel_one.act()
karel_two.act()
setdelay(10) // or whatever
}
因此,他们似乎同时行动。几年前我就这么做了,但是(正如你可能想象的那样)卡雷尔这个机器人在教室外不是很有用,所以我不记得具体细节了。我认为延迟法可能是世界的一部分?不确定


编辑:你也可以用这个想法来创建像turnRight()这样的“即时”函数,而不是永远等着左转三次。。。啊。

我做了更多的研究,找到了解决问题的办法。谢谢kevinsa5的建议。对于任何可能在机器人Karel或一般情况下遇到多线程问题的人,我将在下面发布我的代码。希望它能给你一个想法

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();
    }
}   

这似乎是一个完全相同的问题:不,这根本不是同一个问题。然而,我们都有相同的CompSci课程,并且从事不同的任务。请有相关的答案。非常感谢。