ティラノスクリプト:制限時間内でクリックされた回数をカウントするプログラム

制限時間内にクリック数をカウントするプログラムを実際に使っているゲーム紹介

 はい。このゲームは短いゲームの割に地味に大変な思いをして作成しました。そして、最初に言っておきます。このプログラムは不完全です。一部上手く行かない部分(秒数とか待機時間とかによってめちゃくちゃ制限時間が長くなる問題)もありますがご了承ください。ちなみに、このプログラムを利用したゲームはこちらのゲームです。

 このゲームで壁ドンをする機会があります。確か5秒間で何回クリック出来たかが分岐条件になっているのですが、テストするのも中々に大変でございました…(笑)ちなみに余談ですが、一文字、ちゃんと40回以上クリック出来ています。テストしたときに。めっちゃ高速マウスカチカチ。

現在のティラノスクリプトでは、制限時間内に何度クリックしたか~は不可能

 それはさておき、ただ制限時間を設けるのは全然サブルーチンとかを使えば行けるんですよ。でもね、それはクリックを迫られるときであって、1度クリックをすると処理を抜けてしまうんですね。
 で、制限時間内に何回クリックしたか~みたいなスクリプトをティラノで組むことは無理だと調べて分かったんです。なので、javascriptさんに一部頼ることになりました。ありがとうjavascriptさん!

①今現在がリアルタイムで何秒なのか変数に入れる(5秒経過したかを判断する基準となる変数の定義)

;ここからはクリック数カウントげーむだぜ!
;ここで今現在の秒数をゲットしている
;そして、ティラノで言う変数に値を代入しているんだ!
[iscript]
var now = new Date();
var mins = now.getSeconds();
f.kizyun = mins;
[endscript]

 var now = new Date();で今現在の時間をゲットしています。で、nowという変数にぶっこみました。そしてそれを、var mins = now.getSeconds();で秒数だけ変数minsにぶちこんでいます。
 これだとティラノスクリプトで使えないので、minsに入っているものをティラノスクリプト側で用意した変数f.kizyunの中にぶち込んでいます
 このf.kizyunは、5秒経ったかどうかを判断するために使用する予定です。(後程+5したりします。)

注意事項

 Javascriptでゲットしてきた現在の秒数は、たとえ60秒を超えたとしても0には戻りません。なので、その辺の調整をする必要があります。

②ゲットした秒数に5を足して60以上になった場合、基準時間を調整する

 制限時間は5秒です。で、実際に5秒経ったかどうかを調べるとしたら。
 …例えば今7:55:20だとしましょう。今リアルタイムで20秒です。さて、5秒経ったかどうかはどうやって判定しますか?20+5をして基準値を作り、if文でもしも25になったとき~のように処理をするでしょう。でもそれがもし55秒だったら?55秒から5秒プラスすると0秒になってしまいます。なので、5秒経ったかどうかを判断する基準を-55する必要があります。

;基準となる秒数に5秒を足して、もしも60秒以上オーバーしていたら55を引くようにしているぞ!(制限時間は5秒だから60を引いたら駄目ですね)
[eval exp=”f.kizyun = f.kizyun+5″]
[eval exp=”f.kizyun3 = f.kizyun”]
[if exp=”f.kizyun>=60″]
[eval exp=”f.kizyun = f.kizyun-55″]
[eval exp=”f.kizyunga60izyou = 1″]
[endif]

 [eval exp=”f.kizyunga60izyou = 1″]に関しては、時間を調整したかどうかの判定フラグにしています。リアルタイムで秒数を取得して、基準となる時間と比べるまでの処理にちょっとした秒数が掛かってしまいますので、その辺の調整の兼ね合いがあります。
 なんか処理をするのにやっぱり少し時間がかかるみたいで…リアルタイムの秒数を変数2つに同時に入れるにしても、ここでも時差が発生してしまうんですよね。(1秒とか)これがリアルタイム処理の難しいところなんです。実際にやってみると分かると思います…orz

③純粋に今何秒なのかを手に入れる(5秒経ったかどうかを判断するため)叩いたら毎度飛んでくる処理

;今現在の秒数をゲットして、imaって変数に代入している
*kabedon
[cm]
[iscript]
var now = new Date();
var ima = now.getSeconds();
f.ima = ima;
[endscript]

;もしも今の時間が55秒以上で60秒以下だったら、今の時間から-60秒する必要がある
[if exp=”f.ima>=55 && f.kizyun3>=60″]
[eval exp=”f.ima = f.ima-60″]
[endif]
;リアルタイムで取得してはいるものの、秒数で時差が発生するため
[if exp=”f.kizyunga60izyou2 == 1″]
[eval exp=”f.ima = f.ima+5″]
[endif]

5秒経過したかどうかの判定と当たり判定の配置、もし叩いたらまた現在の時間を取得処理へ飛ぶ

;基準となる秒数と、今の秒数を比べて値が一致しているのならば時間終了だ!
*hantei
[cm]
[if exp=”f.kizyun == f.ima”]
[jump target=syuuryou]
[endif]
[clickable target=”*click” x=”0″ y=”0″ width=”1280″ height=”720″ opacity=”0″]
[s]

;叩いた回数を記録しているぞ!
*click
[playse storage=”don.ogg” volume=150]
[eval exp=”f.counta = f.counta + 1″]
[jump target=*kabedon]

結論

 こうすると、壁を叩かなければ今現在の秒数を取得しないことになり、どえらく長い制限時間になってしまう可能性があります。まだ穴があってこのシステムは完全ではありません。どなたか完璧なシステムにしてくださったら嬉しいです(笑)

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