2017-02-17 10 views
0

私はカウントダウンタイマーを持っており、ユーザーが偶数でこのボタンをクリックしなければ、私は自分のゲームを終了する特定の方法を実行する必要があります。だから基本的に、ユーザーがタップを止めたら、私はgameOver()メソッドが必要です。ボタンがアンドロイドでクリックされなかったかどうかを確認するには?

import android.app.Activity; 
import android.os.CountDownTimer; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class GameScreen extends Activity { 

    private TextView time; 
    private Button start; 
    private Button cancel; 
    private Button gameButton; 
    private CountDownTimer countDownTimer; 
    public static int count = 0; 
    int foo = Integer.parseInt(time.getText().toString()); 

    private View.OnClickListener btnClickListener = new View.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 

      switch(v.getId()){ 
       case R.id.start_ID : 
        start(); 
        break; 
       case R.id.cancel : 
        cancel(); 
        break; 
       case R.id.gameButton_ID : 
        gameButton(); 
        break; 
      } 

     } 


    }; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_game_screen); 

     start = (Button) findViewById(R.id.start_ID); 
     start.setOnClickListener(btnClickListener); 
     cancel = (Button) findViewById(R.id.cancel); 
     cancel.setOnClickListener(btnClickListener); 
     time = (TextView) findViewById(R.id.time); 
     gameButton = (Button) findViewById(R.id.gameButton_ID); 
     gameButton.setOnClickListener(btnClickListener); 

    } 

    public void start(){ 
     time.setText("15"); 
     countDownTimer = new CountDownTimer(15 * 1000, 1000) { 
      @Override 
      public void onTick(long millsUntilFinished){ 
       time.setText("" + millsUntilFinished/1000); 

       //this doesnt work and makes app crash when you hit start button 
       if((gameButton.isPressed() != true) && foo % 2 == 0){ 
        gameOver(); 
       } 
      } 

      public void onFinish(){ 
       time.setText("Done !"); 
      } 
     }; 
     countDownTimer.start(); 
    } 

    private void cancel(){ 
     if(countDownTimer != null){ 
      countDownTimer.cancel(); 
      countDownTimer = null; 
     } 
    } 

    private void gameOver(){ 
     Toast.makeText(getApplicationContext(), "You scored " + count, Toast.LENGTH_SHORT).show(); 
     count = 0; 
     cancel(); 
    } 


    private void gameButton(){ 

     if(foo % 2 == 0) { 
      Toast.makeText(getApplicationContext(), "PASS", Toast.LENGTH_SHORT).show(); 
      ++count; 
     } 

     else{ 
      gameOver(); 
     } 
    } 

} 
+0

はなぜちょうどあなたの活動のクラスにブール属性を追加しないことを確認ダニごとにチェック今

isClickedOnEvenNumber = true; 

としてisClickedOnEvenNumberをセットに設定し、ボタンを押したときボタンがクリックされた場合はtrue、スケジュールされたスレッドが起動した場合はそれを確認し、そうであればfalseに、そうでない場合は「ゲームを終了」に戻します。 – AnixPasBesoin

+0

動作しますが、各偶数番号をチェックする方法を知っていますか?私はそれを考えましたが、より簡単な方法が必要だったように感じました。 –

+0

"にチェックしてください。私はこれを手に入れませんでした。あなたは何をお探しですか? – AnixPasBesoin

答えて

0

EDIT: ボタンがクリックされた天気をかを定期的に確認するTimerTaskを使用することができます。 counterBTnnotclicked変数はもう必要ありません。

class BtnClickIntegerHolder{ 

    public int counterBtnClicked = 0; 
} 

class BtnClicksCheckerIntegerHolder{ 

    public int btnClicks = 0; 
} 

final BtnClickIntegerHolder btnClickCounter = new BtnClickIntegerHolder(); 


    yourButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        btnClickCounter.counterBtnClicked = btnClickCounter.counterBtnClicked + 1; 
       } 
      }); 
     int period = 10000; // repeat every 10 secs. 

      final BtnClicksCheckerIntegerHolder btnClicksHolder = new BtnClicksCheckerIntegerHolder(); 
btnClicksHolder.btnClicks = btnClickCounter.counterBtnClicked; 

      Timer timer = new Timer(); 

      timer.scheduleAtFixedRate(new TimerTask() { 

       public void run() { 

        if(btnClickCounter.counterBtnClicked == btnClicksHolder.btnClicks){ 
         //Button was not clicked 
        } 
        else{ 
         //Button was clicked 
        } 

btnClicksHolder.btnClicks = btnClickCounter.counterBtnClicked; 
       } 

      }, period, period); 
+0

counterBtnNotClickedをcountDownTimerと同期させておくことはできますか? –

+0

私の編集をご覧ください。 – FRK

0

は何ができることはisClickedOnEvenNumberと呼ばれる1つのブール値を取ることである(ように注意してください、Amはすぐにこれを書こうと):

ですから、このような何かを行うことができます。今、あなたは偶数は、

if(isClickedOnEvenNumber) 
    //continue game 
else 
    //end game 
関連する問題