JAVA秋千。从随机点到随机点的移动

时间:2014-12-09 17:52:55

标签: java swing random

我有一件事有问题。我有一张10个城市和一个平民的地图。我希望平民随意地从一个城市走到另一个城市。但问题是这个城市正在逐渐被选中,所以平民在到达之前就改变了目的地。这是我的Jpanel代码的一部分,其中绘制了所有内容:

@Override
public void run() {
    while (running) {
        update();
        repaint();
        try {
            Thread.sleep(17);
        } catch (InterruptedException ex) {
        }
    }
}

private void update() {
    if (game != null && running == true) {

        c.goTo(cities);  // c is civilian

    }
}

这是民用代码的一部分

private boolean set = true;
    public void move(int x, int y) {
    if (this.location.x != x || this.location.y != y) {
        if (this.location.x > x) {
            this.location.x -= 1;
        } else {
            this.location.x += 1;
        }

        if (this.location.y > y) {
            this.location.y -= 1;
        } else {
            this.location.y += 1;
        }
    }
}

public void goTo(ArrayList<City> cities) {

    City city;

    if (set) {
        city = cities.get(rand());

        move(city.location.x, city.location.y);
        set = false;
    } else {
        set = true;
    }

}
public int rand() {

    int i;
    Random rand = new Random();
    i = rand.nextInt(10);

    return i;
}

如何解决?

1 个答案:

答案 0 :(得分:0)

所以,你的问题就在这里:

    while (running) {
    update();
    repaint();
    try {
        Thread.sleep(17);
    } catch (InterruptedException ex) {
    }
}

你每17毫秒调用一次更新,这反过来导致你的平民每17毫秒搬到一个新的城市。您可以创建一个单独的语句来调用update,而另一个布尔语句是false,这样您只有在他在城市时才会旅行。

例如:

boolean travelling = //whatever you go about to configure this
while(travelling == false){
    update();
}

这将导致他只在不在城市时旅行。这是一些非常粗略的代码(您必须根据自己的喜好进行配置):

//civilian x //civilian y if(this.location.x == //randomed city.x && this.location.y == //randomed city.y){ travelling = false; }

这很可能需要在第一组代码中的run()方法内,因此可以反复检查。但是,让我解释一下上面的代码在做什么:

  • 首先,你有一个线程或其他东西让它继续检查你的平民的x和y是否与最近的randomed城市的x和y相对应,显然当他们是相同的时候,平民就在城市。

  • 其次,当x和y相同时,语句使travelling为假

  • 第三,当travelling为假时,会调用您的自定义update方法,随机选择一个新城市并让您的平民重新开始行动。