見出し画像

【IchigoJam】????????

また note の記事を書いていない週末がやってきてしまった…あまり時間も残ってないし、面倒だから複雑なことは書きたくない…また雑な IchigoJam 用のプログラムを書いてごまかすか…アドベントカレンダーに載せるほどではない程度に雑なのを…

というわけで、何を書くべきかよくわからない気持ちをハテナの山で表現した。

※IchigoJamはjig.jpの登録商標です。

作ったもの

「?」がどんどん積もっていく。
画面いっぱいに積もると、落ちていき、また積もっていく。

スクリーンショット

プログラム

10 ' ????????
20 IF VER()>=13224 W=POS(3):H=POS(4) ELSE W=32:H=24
30 CLS:N=W:FOR I=0 TO N-1:[I]=I:[W+I]=H-1:NEXT
40 P=RND(N):X=[P]:Y=[W+P]
50 IF X=W-1 AND Y=H-1 POKE#900+Y*W+X,#3F ELSE LOCATE X,Y:?"?";
60 [W+P]=[W+P]-1:IF [W+P]<0 [P]=[N-1]:[W+P]=[W+N-1]:N=N-1
70 IF N>0 WAIT 1:GOTO 40
80 WAIT 60
90 FOR I=1 TO H:SCROLL DOWN:WAIT 2:NEXT
100 WAIT 60
110 GOTO 30

このプログラムは、CC0 1.0 でライセンスする。

OneFiveCrowd で実行 (高速、非公式) (推奨)
IchigoJam web で実行 (公式、低速)

解説

10 ' ????????

FILES 対応のタイトル。

20 IF VER()>=13224 W=POS(3):H=POS(4) ELSE W=32:H=24

画面のサイズを取得する。

30 CLS:N=W:FOR I=0 TO N-1:[I]=I:[W+I]=H-1:NEXT

画面をクリアし、各列で今どこまで「?」が積もっているか (次にどこに「?」を置くべきか) の情報を初期化する。

40 P=RND(N):X=[P]:Y=[W+P]

候補の列の中から、今回どこに「?」を積むかをランダムに選択する。
それに応じて、具体的にどこに「?」を置くかを決定する。

50 IF X=W-1 AND Y=H-1 POKE#900+Y*W+X,#3F ELSE LOCATE X,Y:?"?";

決定した位置に「?」を置く。
右下に置く際は、PRINT で置いてしまうと意図に反してスクロールしてしまうので、POKE で置く。
それ以外に置く際は、シリアル通信でも見られるよう、PRINT (の省略形) で置く。

60 [W+P]=[W+P]-1:IF [W+P]<0 [P]=[N-1]:[W+P]=[W+N-1]:N=N-1

「?」を置いた列について、次に「?」を置く位置を1行上げる。
その結果、次に「?」を置く位置が画面外になったら、候補列の末尾にある候補を今回積んだ列の情報の位置に上書きし、今回積んだ列を候補から外す。

70 IF N>0 WAIT 1:GOTO 40

まだ積める列が残っているならば、少し待機し、次の「?」を積みに向かう。
積める列が無くなった (画面全体が「?」で埋まった) ら、下の処理を行う。

80 WAIT 60
90 FOR I=1 TO H:SCROLL DOWN:WAIT 2:NEXT
100 WAIT 60
110 GOTO 30

少し間を置いたあと、スクロールにより「?」を下に落とす。
画面が空になったら、再び少し間を置き、最初に戻る。

いいなと思ったら応援しよう!

この記事が参加している募集