今回は、2DSに入れたプチコン3号で作った3分タイマーのプログラムで、おかしかったところを直していきます。
前回は、3分タイマーのプログラムの説明をしました。
TIME$は、”そのとき”の時刻になる。
プログラムの中で次のところを見てください。
IF MAENOTIME$ != TIME$ THEN
PRINT TIME$,MATIJIKAN; "ビョウマエ"
BEEP
DEC MATIJIKAN
MAENOTIME$=TIME$
ENDIF
3か所”TIME$”が出てきます。
変数は、その変数に値を入れたりして変えない限り、変らないものです。
ですが、この”TIME$”は時刻とともに変わってしまいます。
そのため、タイミングによっては、それぞれの位置で違う時刻になる可能性があります。
これを防ぐためには、最初のタイミングで”TIME$”の値を「固定」しておき、その「固定」した値と比較したり、表示したりすることにします。
プログラムでは、先の抜き出したところの最初に、”TIME$”を適当な変数、ここでは”IMANOTIME$”に値を入れて置き、他の”TIME$”になっているところを”IMANOTIME$”に変えていきます。
変更後は次のようになります。(太字は変更箇所)
IMANOTIME$=TIME$
IF MAENOTIME$ != IMANOTIME$ THEN
PRINT IMANOTIME$,MATIJIKAN; "ビョウマエ"
BEEP
DEC MATIJIKAN
MAENOTIME$=IMANOTIME$
ENDIF
“TALK”命令は、しゃべる前に終わる。
ファイルから実行すると、終わりの言葉が聞こえません。
これは、”TALK”命令は、しゃべり終わる前に、次の命令へ進むため、次の命令がない時(プログラムの終わり)には、すぐ終わってしまうためです。
これを止めるには、プログラムが終わるのを適切な時間待たなければなりません。
待つためには、”TALK”命令でしゃべっているか、しゃべっていないかを調べる必要があります。
これは、”TALKCHK()”関数で調べることができ、”1″の時はしゃべっていて、”0″の時は終わっているとのことです。
“TALK”命令の後に、次の内容を追加することにします。
WHILE TALKCHK()==1:WEND
プログラムの最終系
修正をすべて入れたものは次のようになります。(太字が修正/追加したところ)
'タイマー
'サイショ
WIDTH 16
MATIJIKAN=3*60
MAENOTIME$=""
'メイン
WHILE MATIJIKAN >= 0
IMANOTIME$=TIME$
IF MAENOTIME$ != IMANOTIME$ THEN
PRINT IMANOTIME$,MATIJIKAN; "ビョウマエ"
BEEP
DEC MATIJIKAN
MAENOTIME$=IMANOTIME$
ENDIF
WEND
'ジカンガキタ
TALK "ジカンガキマシタ"
WHILE TALKCHK()==1:WEND
'アトシマツ
WIDTH 8
☆一部 プチコンの表示と異なるところがあります。
ところで。。。仕様の追加
ところで、このプログラムは「適当な3分タイマー」です。
何故かというと、TIME$の時刻が1秒単位であるため、最初のところで0~1秒のずれが生じてしまうのです。
といっても、カップ麺のタイマーに1秒の厳密さを求めても仕方ないのでいいことにしましょう。
ということは、仕様に書いてなかったです。
つまり抜けていたということですので、追加しておきましょう。
仕様
- 3分経ったら「時間になりました」としゃべらせよう。
- 一秒毎に時刻と残り時間を表示しよう。
- その時にも音を鳴らそう。
- 表示する文字は大きくしよう。終了したら元に戻そう。
- 1秒以下の誤差は問題ないことにしよう
では今回はここまで。
また次回をお楽しみに。
sammyの相方です。
時たま出てくることがあります。