2016-03-04 53 views
1

我在实施一个游戏,其中敌人AI根据预先设定的动作数量执行随机动作。 Iv实现了随机动作的执行,但这意味着每次更新游戏都会执行一个新动作。相反,我希望AI每1秒钟执行一次动作。这将如何完成?这里是我的随机操作代码:AI在Java游戏中每隔n秒执行一次随机动作

public class RandomAction implements Controller { 
    Action action = new Action(); 

    @Override 
    public Action action() { 

     Random rand = new Random(); 
     action.shoot = rand.nextBoolean(); 
     action.thrust = rand.nextInt(2); 
     action.turn = rand.nextInt(3) - 1; 
     return action; 
    } 

} 
+2

如上所述,问题没有包含足够的上下文。这取决于你的程序的总体结构,以确定是否例如。使用线程可以解决这个问题。 –

+0

如果使用thread.sleep之类的任何帮助将无法正常工作,因为游戏中还有其他元素需要进行更新,即通过键盘控制的玩家船只 – Volken

+0

如果您有一个单独的敌人AI线程,它可以很好地使用'thread.sleep'。不过,您需要注意并发问题。 –

回答

1

我假设你大公应用程序调用action()方法对不同的对象反复要更改RandomAction行为只有一次第二,不是每一个电话。你可以这样做:

public class RandomAction implements Controller { 
    Action action = new Action(); 
    Random rand = new Random(); 
    long updatedAt; 

    public RandomAction() { 
     updateAction(); // do first init 
    } 

    @Override 
    public Action action() {    
     if (System.currentTimeMillis() - updatedAt > 1000) { 
      updateAction(); 
     }    
     return action; 
    } 

    private void updateAction() { 
     action.shoot = rand.nextBoolean(); 
     action.thrust = rand.nextInt(2); 
     action.turn = rand.nextInt(3) - 1; 
     updatedAt = System.currentTimeMillis(); 
    } 
} 

正如你所看到的,动作与只有自上次更新1秒通过随机值更新。之后更新时间变量设置为当前时间。