プチコン3号でプログラム:適当な3分タイマー(3)

前回、子供からお願いされた3分タイマーを2DSに入れたプチコン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秒以下の誤差は問題ないことにしよう

では今回はここまで。
また次回をお楽しみに。

スポンサーリンク
レクタングル広告大