2016-02-09 50 views
1

我在圍繞遊戲循環以及代碼實際位於程序中的位置仍然有很多麻煩。爲了學習基礎知識,我想爲此活動添加一個非常簡單的循環,但我不知道在哪裏放置代碼。我想要的是每10秒鐘,怪物攻擊玩家。每次玩家攻擊怪物時,在玩家再次攻擊之前,攻擊按鈕被禁用5秒。我知道有很多關於遊戲循環的文章,但我一直無法弄清楚如何以我想要使用它們的簡單方式來實現我讀過的內容。我不需要更新屏幕上的信息,背景是靜態的,因爲它是基於文本的戰鬥。另外我想要做的是繼續戰鬥,直到玩家或怪物死亡。如何創建一個簡單的遊戲循環,不需要繪圖

我不需要確切的代碼被寫入,更多的只是把定時器設置和在哪裏放置在活動代碼的框架。

謝謝。

public class MonstersActivity extends AppCompatActivity implements View.OnClickListener { 

     //variables for the UI 
     Button buttonAttack 
     View layout; 

     //Variables for game 
     private Player player; 
     private Monster monster;  

     //thread variables 
     private Handler myHandler = new Handler(); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      //makes activity run in fullscreen 
      requestWindowFeature(Window.FEATURE_NO_TITLE); 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,    WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_monsters); 

      //initiate player object from intent 
      Intent intent = getIntent(); 
      Player player = (Player)intent.getSerializableExtra("player"); 
      this.player = player; 

      //create monster 
      monster = new Monster(player.getCurrentCity()); 

      //assign variables to UI objects 
      buttonAttack = (Button)findViewById(R.id.buttonAttack); 
      monsterHealth = (TextView)findViewById(R.id.textMonsterHealth); 
      playerHealth = (TextView)findViewById(R.id.textPlayerHealthMonster); 

      //setup onclick listeners 
      buttonAttack.setOnClickListener(this); 

      //initial UI setup 
      battleWindow.setEnabled(false); 
      battleWindow.setText("You have encountered a " + monster.getName() + ". Good luck brave Tobias!"); 
     } 

     @Override 
     public void onClick(View v) { 

      switch (v.getId()){ 
       case R.id.buttonAttack: 
        //Player attack 
        final int playerAttackDamage = GameElements.battleDamage(player.getPlayerStrength()); 

        monster.setHealth(monster.getHealth() - playerAttackDamage); 
        player.setDamageDealt(playerAttackDamage); 

        battleWindow.setEnabled(true); 
        buttonAttack.setEnabled(false); 

        if(monster.getHealth() < 1){ 
         player = GameElements.playerWon(player); 
         battleWindow.setText(player.getBattleLog()); 
         player.setGP(player.getGP() + monster.getRewardGP()); 
         monsterHealth.setText(monster.getName() + "'s Health = " + monster.getHealth()); 
        }else { 
         player = GameElements.playerAttack(player); 
         battleWindow.setText(player.getBattleLog()); 
         monsterHealth.setText(monster.getName() + "'s Health = " + monster.getHealth()); 
         battleResult = 0; 
        } 
        break; 
      } 

     } 

    }//Activity Ends 
+0

你看過多線程嗎? – bdavies6086

回答

1

我可以使用幾個CountDownTimer來實現這一點。

做一個實例爲你的怪物對你的球員,所以你可以設置不同的冷卻時間。您可以在CountDownTimer的onFinish()方法中執行您的操作(禁用按鈕,重新啓動計時器,計算新的HP,...)。

0

基本上游戲循環是非常簡單的事情:一段時間的線程。

run(){ 
    while(running){ 
     updateGameState(); 
    } 
} 

從這個你應該能夠節省運行時間,因爲你的怪物的最後一次進攻中,再次觸發當了10秒過去。

你必須採取的活動lyfecycle的車一樣的onPause()/的onResume()。它可以簡單地通過運行布爾值來實現。此外,您可以使用Thread.sleep(timeBetweenGameUpdate)來避免溢出。