|
読者諸兄は、十進BASICは時計を作成する
のに最適化した言語であることをご存知でしょう
か?そもそも、プログラミング言語でアナログ
時計を作成しようとすれば、たとえば、秒針の
先を指定するのに、 x=r*cos(90-(360/60*theta))
y=r*sin(90-(360/60*theta)) 、といったよう
に三角関数を使わなければなりません。
ところが我が十進BASICでは、絵定義
があるので三角関数を使う必要がありません。
時間計算と度数法の概念だけ理解してれば
いーので、小学生でも作れます。
以下プログラムコードです。
OPTION ANGLE DEGREES !ウインドウ上部にあるアイコンをクリックすればこれさえも不要
SET WINDOW 100,-100,-100,100 !角座標系をいわゆる時計回りにするためにx座標の正負を逆転
SET TEXT JUSTIFY"center","half" !これにより文字配置の微調整を省略できる
SET TEXT HEIGHT 12.5
do
draw 時計
wait delay .5
loop
picture 時計
set draw mode hidden !最下段のexplicitとともに画面のちらつきを消す、ハイスペックなハードなら不要
CALL 枠
call 文字盤全
call 針
set draw mode explicit
end picture
sub 枠
SET COLOR "black"
draw disk with scale(98)
SET COLOR "white"
draw disk with scale(92)
END SUB
sub 文字盤全
SET COLOR "black"
for q=1to 12
DRAW 文字(q)WITH SHIFT(0,83)*ROTATE(30*q)
next Q
for q=0to 59
draw 印 with rotate(6*q)
next Q
END SUB
PICTURE 文字(q)
PLOT label,AT 0,0:STR$(q)
END PICTURE
picture 印 !分秒の単位時間を示すために必要
SET LINE width 1
set COLOR "black"
PLOT 0,90;0,91.5 !(90°-(... と書かないでも済むように縦描きで描く、以下同様
end picture
sub 針
LET t$=time$
LET h=mod(val(t$(1:2)),12)
LET m=val(t$(4:5)) !十進Bのtime$は0を充填した hh:mm:ss のフォーマットなのでint,mod関数を使った時間計算が不要!
LET s=val(t$(7:8))
DRAW 時針 with rotate(30*h)
DRAW 分針 with rotate(06*m)
DRAW 秒針 with rotate(06*s)
SET COLOR 12
DRAW disk WITH SCALE(8) !Windows7 時計ガジェットで言うところの「dot」
SET COLOR "white"
draw disk with scale(2)
END SUB
PICTURE 時針
SET LINE width 10
set color "red"
PLOT 0,0;0,60
END PICTURE
PICTURE 分針
SET LINE width 5
SET COLOR "green"
PLOT 0,0;0,85
END PICTURE
PICTURE 秒針
SET LINE width 1
set COLOR "black"
PLOT 0,0;0,90
END PICTURE
END
ねっ、簡単でしょ?
著者は、プログラムの骨格を作るのに15分
でできました(もっとも、どーしても細かい部
分を加工したくなるのですべて完成させるのに
は1時間以上要しましたが)。時針、分針は各
1時間、1分単位で動きます。実物のアナログ
時計のように滑らかに動かすためには時間単位
をもっと細かく設定しなければなりません。逆
に時の文字盤の上に5,10,15..と刻む分秒用の
文字盤を追加すれば解りやすい、川栄李っちゃ
んクラスでも読める時計を作ることができます。
著者は、あまりにもイージー過ぎるので長い
間これを作るのを拒否してきました。それが
作成する気になった理由は、Windows7で愛用
してきたアナログ時計ガジェットがWindows10
で(8か?)廃止されてしまったので必要に
迫られたためです(マイクロソフトバカヤロ
コノヤロ)。
|
|