リバーシで時間表示したい

スポンサーリンク
スポンサーリンク

チェスクロック的な時間表示をさせたいなーって思ってたんだけど、時間設定とか秒読みとか切れ負けとか実装するのめんどくさそう。なので経過時間だけ表示させようと思う。

Chronometer

一番簡単なのがこれみたい。デザインとかは今の所どうでもいいのでサクッと作ってしまおう。…と思っていたんだけど、Chronometerはstopしても時間は流れていて、再開した時に止めてた分の時間も表示されてしまうとな?試してないから知らんけど。最初から暗礁に乗り上げてしまったぞ。どうしよう。

java.util.Timer

Javaに元からあるTimerっていうのを使うといいらしい。解説サイトをみてみると、マルチスレッドやらHandlerやら何やら難しい単語が並んでいる…。メインで動いてるプログラムとは別に用意するみたいな…?そんで別で実行した結果を渡したりするのがHandlerみたいな…?やばい、全然分からんぞ。調べてみても、start, stopに関する文章は出てくるけど、一時停止に関する文章は出てこないぞ。どういうことだ。うーんうーん。

java.util.concurrent.ScheduledExecutorService

一時停止する場合、こっちを使うらしい。もっと訳がわからないぞ。schedule, scheduleAtFixedRate, scheduleWithFixedDelayってTimer解説してるとこでも見たけど同じことやってるの?じゃTimerとの違いってなんじゃらほい…。あ、一時停止か。えーもうなんかわかんないよー。

再度Chronometer

なんか一時停止できるっぽい。タップされた時のシステム時間を取っておいて、現システム時間との差を使い、基準時間を設定し直してスタートさせるみたい。おっできそう。

private void setTimer(){

    switch(PlayerTurn){
        case(BLACK):
            BlackTimer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped);
            BlackTimer.start();

            timeWhenStopped = WhiteTimer.getBase() - SystemClock.elapsedRealtime();
            WhiteTimer.stop();
            break;

        case(WHITE):
            WhiteTimer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped);
            WhiteTimer.start();

            if(BlackStoneCount + WhiteStoneCount > 5) {
                timeWhenStopped = BlackTimer.getBase() - SystemClock.elapsedRealtime();
                BlackTimer.stop();
            }
            break;
    }
}

できた。黒手番が3手目ぐらいで時間変になってたので2手目以降にtimewhenstoppedに時間代入するようにした。

いつかまたちゃんとしたタイマーにも挑戦してみよう。

参考

Chronometer | Android アプリケーション開発
Timerを使って定期的に実行する方法 | TechBooster
AndroidでのTimerによる定期実行について解説します。ストップウォッチを例題にTimer処理のポイントを3つ、紹介します。
https://ameblo.jp/vegetable-it/entry-11245144566.html
Timerを使う。周期的に実行したり、一定時間後に実行したり
https://blog.mumei-himazin.info/?p=474
Attention Required! | Cloudflare

コメント

タイトルとURLをコピーしました