2016-03-04 76 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秒通過隨機值更新。之後更新時間變量設置爲當前時間。