双(国际象棋)计时器

时间:2018-04-16 06:49:47

标签: java android timer

我正在考虑制作一个支持我的游戏的Android应用程序,但我无法找到有关如何操作的信息。这是一个应用说明:

应用程序应该有两个计时器(都设置为x分钟)。当第一个玩家开始转弯时(按一下按钮),他的时间开始耗尽。当第一个玩家移动时,他应该点击他的时间来阻止它,然后玩家2开始转弯。

现在,问题我无法找到解决方案 - 当玩家轮到他的时候,他失去的时间应该传递给其他玩家的计时器。

示例:两位玩家都以5分钟计时器开始。如果一名球员轮到他需要30秒,他的时间应该下降到04:30,此时他点击了他的计时器。在那段时间里,他失去了每一秒,另一位玩家在计时器上获得了时间,所以在他的回合开始时,他的时间是05:30。时间来回,计时器用完的玩家将失去游戏。

知道怎么做吗?

我仍然坚持如何制作它的想法,所以我没有代码可以分享。

谢谢大家的回答,并努力帮助我,如果你有一个我没有涉及的问题,我很乐意回答。

1 个答案:

答案 0 :(得分:2)

首先,每次单击按钮时都需要实例化CountDownTimer类。

有关参考,请点击此处:https://developer.android.com/reference/android/os/CountDownTimer.html

您有两个参数long millisInFuturelong countDownInterval

在你开始之前,你需要为第一个玩家创建两个全局变量,为第二个玩家创建一个全局变量:

long firstPlayerRemainingTime  = 5 * 60 * 1000; // start time 5 minutes 
long secondPlayerRemainingTime = 5 * 60 * 1000; 
long limitedTime               = 30 * 1000; // 30 seconds
CountDownTimer mCountDownTimer;

现在我们已经找到了最重要的部分,那就是onClickListener方法

中的逻辑

我不知道是否有两个按钮,但我会选择两个按钮:

btnFirstPlayer.setTag(1); // start timer
btnFirstPlayer.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
         if (btnFirstPlayer.getTag() == 1) {
             startTimer();
         } else {
             stopTimer();
         }
    }); 

private void startTimer() {
    long startTime = firstPlayerRemainingTime;

    btnFirstPlayer.setTag(2); // stop timer
    btnFirstPlayer.setText("Stop");

    mCountDownTimer = new CountDownTimer(firstPlayerRemainingTime, 1000) {
           public void onTick(long millisUntilFinished) {
               firstPlayerRemainingTime = millisUntilFinished;
               tvPlayerOneTimer.setText("" + firstPlayerRemainingTime / 1000)

               // Here you would like to check if 30 seconds has passed
               if ((startTime / 1000) - (limitedTime / 1000) 
                            == (firstPlayerRemainingTime / 1000)) {
                   stopTimer();
               }

               // Here you would like to increase the time of the second player
               secondPlayerRemainingTime = ++1000; 
           }

           public void onFinish() {
               mTextField.setText("done!");
           }

           }.start();
     }
}

private void stopTimer() {
    btnFirstPlayer.setTag(1);
    btnFirstPlayer.setText("Start");
    mCountDownTimer.cancel();

    // I guess here starts second player move

}

同样的逻辑也适用于第二位玩家。如果这有助于您或我需要解释任何事情,请告诉我。