アナログ時計を作りましょう

 投稿者:名無しさん  投稿日:2020年 1月26日(日)22時34分11秒
   読者諸兄は、十進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か?)廃止されてしまったので必要に
迫られたためです(マイクロソフトバカヤロ
コノヤロ)。
 

戻る