なんか作って載せます

簡単なデジタル時計作成スクリプトです。

第12回:デジタル時計を作ってみる。



 簡素なデジタル時計を作ります。


バージョン1

 これを実行すると、以下のように表示されます。
バージョン1・実行

 現在の時刻の取得には、「gettime関数」を用います。
 関数なので、「変数=gettime(タイプ値)」の形で書きます。

 タイプ値は、以下の8つ。

 タイプ0…年(Year)
 タイプ1…月(Month)
 タイプ2…曜日(DayOfWeek)
 タイプ3…日(Day)
 タイプ4…時(Hour)
 タイプ5…分(Minute)
 タイプ6…秒(Second)
 タイプ7…ミリ秒(Milliseconds)

 「screen命令」で、画面サイズを指定します。
 スクリーン0を、横500、縦80に設定しています。

 「title命令」で、実行時のタイトルバーに“デジタル時計”と表示させています。

 gettime関数で時分秒を取得し、mes命令で表示というのがスクリプトの主な内容です。
 時分秒それぞれの間に「:」を入れて、デジタル時計っぽくしています。

 しかし、上の例ではいつまで経っても時刻は変わりません。最初に表示された時刻のままです。
 それは、このスクリプトが実行時の時刻のみを表示するだけの仕組みだからです。

 ちゃんと時計として機能させるためには、「ループ」する構造にしなければなりません。

 1時間は1分を60回繰り返したものだし、1日は1時間を24回繰り返したものだし、1年は1日を365日繰り返したものです。
 これらは全て、ループしているといえますね。

 さて、時計としてのループはどういう構造にすればいいのか。
 答えは簡単。1秒ごとにループするようにすればいいのです。

 仕組みを簡単に言うと、「時刻の取得」⇒「時刻の表示」⇒「1秒待つ」の繰り返しをさせれば、時計を再現できるってことです。

 この「1秒待つ」という動作には、「wait命令」を使います。
 wait命令で「1秒待つ」は、「wait 100」と書きます。


 HSPでループを作る時は、必ず「wait命令」か「await命令」をループの中に入れないといけないそうです。
 そうしないと、HSPだけでWindowsの処理を独占してしまい、プログラムの停止すらできなくなってしまいます。ESCキーも利きません。
 ですから、とりあえず「ループにはwaitを入れる」ってことだけは覚えておかないといけないですね。
 ちなみに、「await命令」というのは、前回のwaitからの待ち時間を指定する命令らしいです。


 1秒待って再度時刻を取得、表示という流れは分かりましたが、これだけでは不十分です。
 このままでは、最初と同じ位置に次の文字が出て重なってしまうのです。
 そのため、一度背景色と同じ色で背景を塗りつぶす必要が出てきます。
 cls命令で画面を初期化してもいいですが、ここでは「boxf命令」を用います。

 boxf命令は、スクリーン上に四角形を表示する命令です。
 パラメータに何も指定しないことで、現在のスクリーン全体を覆う四角形を表示させることができます。
 これで、画面が初期化されるのと同じ効果になります。

バージョン2

 これを実行すると、以下のように表示されます。
バージョン2・実行

 画像では分かりませんが、ちゃんとデジタル時計っぽく動いてくれます。

 では、せっかくなので年月日も表示できるようにしてみましょう。
 font命令で、表示するフォントの種類と大きさも指定します。

バージョン3

 これを実行すると、以下のように表示されます。
バージョン3・実行

 うん、デジタル時計っぽい。
 ただ、欲を言えば、数値が一桁の時は、二桁目に「0」を表示して「01」などというふうに表示できるようにしたいですね。


 今回のまとめとしては、
  ・ループには必ずwait命令を入れる。
  ・時間取得にはgettime関数を使う。
  ・title命令でタイトルバーにいろいろと表示できる。
  ・boxf命令のパラメータ無しで画面をクリアできる。
 という感じですね。


 今回はこれで終わり。


2012/05/18/Fri 更新

inserted by FC2 system