代码之家  ›  专栏  ›  技术社区  ›  Milan Maxa Maksimović

双(象棋式)计时器

  •  0
  • Milan Maxa Maksimović  · 技术社区  · 7 年前

    我正在考虑制作一款android应用程序来支持我的一款游戏,但我找不到有关如何操作的信息。以下是应用程序说明:

    应用程序应该有两个计时器(都设置为x分钟)。当第一个玩家开始他的回合(通过点击按钮)时,他的时间开始耗尽。当第一个玩家移动时,他应该点击时间停止移动,第二个玩家开始轮到他。

    现在,我找不到解决问题的方法-当一个玩家轮到他时,他失去的时间应该转移到另一个玩家的计时器上。

    示例:两名玩家都以5分钟计时器开始。如果一号玩家轮到他需要30秒,他的时间应该降到04:30,此时他点击了计时器。在这段时间里,他每输一秒,另一名球员就用计时器获得时间,因此在开始轮到他的时候,他的时间是05:30。时间来来回回,计时器用完的玩家将输掉比赛。

    你知道怎么做吗?

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

    谢谢你们的回答,谢谢你们为帮助我所做的努力,如果你们有我没有回答的问题,我会很乐意回答。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Dusan Dimitrijevic    7 年前

    首先,您需要实例化 CountDownTimer 每次你们点击按钮。

    参考检查: https://developer.android.com/reference/android/os/CountDownTimer.html

    您有两个参数 long millisInFuture ,则, long 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
    
    }
    

    同样的逻辑也适用于第二个玩家。如果这对你有帮助或者我需要解释什么,请告诉我。