IchigoJam で シンカリオンCW
今週ももう残りわずか
頭ついてない
また適当なプログラムを書いてごまかしとこ
そういえば「シンカリオンCW」という言葉があったな
どういう文脈で見たんだったかな
よくわからないけどネタにさせてもらうよ
今回やったこと
IchigoJam BASIC で、「シンカリオン」の文字を時計回り (CW:clockwise) に回す。
※IchigoJamはjig.jpの登録商標です。
プログラム
三角関数を使用しているので、1.4系以降専用である。
10 'シンカリオンCW
20 S="シンカリオン"
30 N=LEN(S):CLS:CLT
40 FOR I=0 TO N-1
50 T=TICK():A=T-I*360/N
60 X=(16*512+23*SIN(A))/512:Y=(12*512-23*COS(A))/512
70 IF X=[I] AND Y=[N+I] GOTO 110
80 LOCATE [I],[N+I]:?" ";
90 LOCATE X,Y:?CHR$(PEEK(S+I));
100 [I]=X:[N+I]=Y
110 NEXT
120 GOTO 40このプログラムは、CC0 1.0 でライセンスする。
OneFiveCrowd で実行 (高速、非公式) (推奨)
IchigoJam web で実行 (公式、低速)
解説
10行目:FILES 対応のタイトル
20行目:回す文字列の指定
30行目:文字列の長さの取得と、画面の初期化
40行目~120行目:各文字の位置を更新する処理
50行目:時刻を取得し、そこから文字の角度を計算する
60行目:角度から文字の座標を計算する
70行目:文字の座標が変化したかをチェックする
80行目:前に描画した文字を消す
90行目:新しい座標に文字を描画する
100行目:新しい座標を記録する
実行結果例
実行すると、「シンカリオン」の6文字が時計回りに回る。
過去作との比較
IchigoJam で文字を回すといえば、
IchigoJam で PDCA を回す #ネタ - Qiita
もあった。
このときのコードを見直すと、
回す文字数が固定で、1文字ずつ埋め込んでいる
座標計算の質が悪く、真上などで不自然にピョコピョコと動く
処理時間を考慮せずに WAIT しているので、回転速度が処理速度の影響を受ける
という問題があった。
一方、今回のコードでは
回す文字列を1箇所で指定し、文字数も柔軟に対応できる
より動きが自然になる座標計算を用いている
時刻から角度を求める方式なので、回転速度が処理速度の影響を受けない
というように、これらの問題が改善されている。
座標計算は、まず文字単位の座標系の座標を2倍し、文字の中心の位置を計算する。
その後その結果を2で割ることで、文字を描画する位置を得ている。
今回の角度は、時刻を基本的にそのまま用いている。
TICK() で取得できる時刻は、32767 の次が 0 に戻る。
32767 を 360 (1周を表す角度) で割ると 7 余るので、この余りにより約9分に1回文字の位置が飛ぶことが考えられる。
今回は、これはたまにしか起こらないし、飛ぶ幅も小さいとして、無視することにした。
対策は読者への宿題としたい。
また、処理速度の影響は受けないはずであるが、IchigoJam web やPAL環境などの時間の単位自体が違う環境で実行すると、回転速度が変わると考えられる。
おまけ
よくわからないけど、「シンカリオンCW」は今日やっていた『オールスター合唱バトル6』に出ていた「福澤 朗」と何か関係があるのですか……?
シンカリオンCW、特別回(イナの回想、福澤朗、石橋陽彩取材、プレゼン)は話数としてカウントしないんだった
— でひ (@mittsun0atlimit) June 8, 2025
ダビングするにあたって話数がズレたなぁと思ったがそういうことか


コメント