こんにちイワンコフ。
奥さん、奥さんの作ったいなり寿司だけ誰も手つけてませんなぁ〜。
明けましておめでとうございます。
今年もみなさんあけおメールを明けた瞬間送った方々も多いと思いますが、
今はLINEと言うものがあって便利なものですね。
ちょっと10年前とかはよくセンター問い合わせをしていたものです。
そしてメールがきてるとちょっと嬉しい気持ちになったものです。
さて、今年も引き続き回復処理の実装やっていきましょう。
いつまでやるんだよこの企画。。。
そもそも完成できるのかよ。
もうライフは0よ。
前回は下のように実装したところエラーとなりました。
1 2 3 4 5 6 7 8 |
// Executeクラス内のrun()メソッドに Timer t2 = new Timer(); @Override public void run() { // 処理 t2.schedule(exe, 0, exe.term * 1000); t2.cnacel(); } |
僕の理解ではcancel()が呼び出されたタイマーインスタンスは破棄されるため、
その後のschedule()が呼び出せない感じです。
そのため、インスタンスの生成をrun()内でしてやるとうまくいきました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import java.util.*; public class Execute extends TimerTask { int cycle = 11; int playTime = 130; int recovery = 0; int count = 1; double probability = 0.77; long start = System.currentTimeMillis(); long end = 0; @Override public void run() { double d = Math.random(); System.out.println(count + "回目"); // 特技発動判定 if (d < probability) { // 特技処理 try { System.out.println("特技発動"); Timer t = new Timer(); Execute2 exe2 = new Execute2(); t.schedule(exe2, 0, exe2.term * 1000); Thread.sleep(this.cycle * 1000); // 今回追加 t.cancel(); recovery += exe2.totalRecovery(); System.out.println(("現在の総回復量" + recovery)); } catch (InterruptedException e) { e.printStackTrace(); } } else { System.out.println("失敗"); } count++; end = System.currentTimeMillis(); System.out.println((end - start) / 1000 + "秒経過"); System.out.println("-------------"); } public int totalRecovery() { return this.recovery; } } |
さらに 25行目にこのスレッドを一時停止する処理も加えました。
この処理を加えないと特技判定処理がどんどん先に進んでしまい、わけ分からんことなってしまいました。
新たな問題
今回特技判定サイクルの11秒間を停止時間としましたが、
これによってもし最初の特技が発動したらこの停止時間とサイクルまでの待機時間で次の特技発動まで22秒かかっているような気がする。。
まだまだ続きそうなこの企画。
でもちょっとずつですが進んでいるので気長にやっていきましょう!
最後に近況報告ですが、炊飯器買いました。
誰が興味あんねん