3.7 時間の管理

今回の目的
 日付・時間の取得やタイマー機能について解説します。

 


日付・時間の取得
 ゲームをプレイしている、その時の日付や時間を数字変数に代入します。

*define

clickstr "」。!?",2

game
*start

date %0,%1,%2

time %3,%4,%5

今日の日付は、%0年%1月%2日です。
現在の時刻は、%3時%4分%5秒です。

end
 
 これがNScripterを起動していた日付と時刻です。

 日付の取得には「date」を用います。
 後に用意した3つの数字変数には、左から「」「」「」が入ります。
 「」には下一桁のみ入るようです。

 時刻の取得には「time」を用います。
 後に用意した3つの数字変数には、左から「」「」「」が入ります。
 24時間制です。

 


内部タイマー
 NScripter内部のタイマーを使って時間経過を管理します。  内部タイマーの値の推移に注目してください。

*define

clickstr "」。!?",2

game
*start

resettimer
タイマーの値を0にリセットして動かしました。

gettimer %0
タイマーの値は%0です。

タイマーが10000になるまでウェイトします。
waittimer 10000

gettimer %0
タイマーの値は%0です。

end
  


 「resettimer」は内部タイマーを0をリセットさせます。
 この命令文の直後から内部タイマーは動き出します。

 そして、現時点での内部タイマーの値を取得するのが「gettimer」です。
 取得した値は数字変数に代入します。単位はミリ秒。

 「waittimer」は、指定した値と内部タイマーの値が一致するまで待ち続けます。
 「wait」命令によく似ていますが、こちらの方がより正確な時間を測れます。
 今まで「wait」を使っていた所に「waittimer」を使うことも出来ます。

 上の例では「waittimer」で指定した値は10000なので、
 「waittimer」命令を読み込む時点で、既に内部タイマーが10000ミリ秒を超えていたら
 「waittimer」はスキップされます。

 


時間制限付き選択肢
 選択肢に制限時間を設けます。ここでいう選択肢は「select」ではなく、  2.6節で使ったスプライトボタンの選択肢のことです。

*define

clickstr "」。!?",2
effect 10,10,1000

game
*start

スプライトボタンを3つ作り、選択肢にします。
lsp 0,":a/2,0,3;image\start.jpg",220,280
lsp 1,":a/2,0,3;image\load.jpg",220,340
lsp 2,":a/2,0,3;image\owaru.jpg",220,400
print 10

spbtn 0,1
spbtn 1,2
spbtn 2,3

mov %1,2000
*else

sub %1,%2
btntime %1

btnwait %0

if %0=0  getbtntimer %2:goto *else
if %0=-1 getbtntimer %2:goto *else
if %0=-2 goto *timeout
if %0=1  goto *hajime
if %0=2  goto *tuduki
if %0=3  csp -1:print 10:end

*hajime
ゲームが始まります。

end

*tuduki
systemcall load

end

*timeout
時間切れです。

end
 2.6節に制限時間が付いただけです。

 「btntimer」は、「btnwait」の待ち時間を設定する命令です。
 「btntimer」で「制限時間」をミリ秒単位で指定します。
 この場合、%1には2000が代入されているので制限時間は2000ミリ秒になります。

 ボタン待ち中に制限時間を超えると、変数には自動的に-2が代入されます。

 「getbtntimer」は、「btnwait」で待った時間をミリ秒単位で取得します。
 右クリック等で*elseに戻ったとき、元の制限時間から「getbtntimer」で取得した時間を
 「sub」で引いてやり、その値をbtntimerの時間制限に再び指定し直すことで、
 *elseに戻るたびに制限時間がリセットされるのを防いでいるのです。

 ゲーム中で複数回、制限時付き選択肢を使うときは、
 2回目以降は%2を0に初期化することを忘れないようにしましょう。

 


まとめ
 制限時間は、ノベルやアドベンチャーの選択肢の他、
 クイズゲームなどでも割とよく使われているようです。
 ゲームにリアルタイム性を出す上で、時間の管理は欠かせません。

 次節は、バーの扱いについてです。

 


前へ    TOPへ戻る    次へ