【IchigoJam】あああああああああああ
週Streak継続の期限まであと数時間しか無い!
何か書かなきゃ…でも何を書く…!?
複雑な内容は間に合わないのが怖いし…
あああああああああああああああああ!!!!!
という気持ちを IchigoJam で表現してみた。
※IchigoJamはjig.jpの登録商標です。
プログラム
10 ' アアアアアアアア
20 POKE #700,32,124,32,60,106,178,100,0
30 IF VER()>=13224 W=POS(3):H=POS(4) ELSE W=32:H=24
40 C=#E0:S=0:CLS
50 X=0:Y=0:U=1:V=0
60 POKE #900+Y*W+X,C
70 S=S+1:IF S>=5 S=0:WAIT 1
80 T=1
90 IF X+U<0 OR W<=X+U OR Y+V<0 OR H<=Y+V GOTO 120
100 IF VPEEK(X+U,Y+V)=C GOTO 120
110 X=X+U:Y=Y+V:GOTO 60
120 IF T>0 T=T-1:Z=U:U=-V:V=Z:GOTO 90
130 C=#E0*!C:GOTO 50
このプログラムは、CC0 1.0 でライセンスする。
OneFiveCrowd で実行する (非公式、高速)
IchigoJam web で実行する (公式、低速)
実行結果
解説
文字を用意する
20 POKE #700,32,124,32,60,106,178,100,0
美咲ゴシックの「あ」を、文字 #E0 のキャラクターパターンとして書き込んでいる。
画面サイズを取得する
30 IF VER()>=13224 W=POS(3):H=POS(4) ELSE W=32:H=24
対応しているバージョンでは、POS により画面の横幅と縦幅を取得する。
対応していないバージョンでは、画面サイズを決め打ちする。
初期化を行う
40 C=#E0:S=0:CLS
表示する文字 C と、ウェイトを入れる間隔を管理する変数 S を初期化する。
また、CLS により画面をクリアする。
現在位置をスタート地点にする
50 X=0:Y=0:U=1:V=0
現在の座標 (X, Y) と、進む方向 (U, V) を初期化する。
文字を表示する
60 POKE #900+Y*W+X,C
表示する文字 C を画面上の (X, Y) に表示する。
PRINT を使用して表示することも検討したが、
PRINT で画面の右下隅に 文字を置くと、意図せずスクロールしてしまう
キャラクターパターンをカスタムしているので、シリアル通信での出力はあまり意味が無い
ことから、今回は LOCATE・PRINT ではなく POKE により文字を画面に表示することにした。
ウェイトを入れる
70 S=S+1:IF S>=5 S=0:WAIT 1
1文字表示するごとに WAIT 1 をするのでは遅いと感じたので、5文字表示するごとに WAIT 1 をするようにした。
次の位置に進む
80 T=1
90 IF X+U<0 OR W<=X+U OR Y+V<0 OR H<=Y+V GOTO 120
100 IF VPEEK(X+U,Y+V)=C GOTO 120
110 X=X+U:Y=Y+V:GOTO 60
120 IF T>0 T=T-1:Z=U:U=-V:V=Z:GOTO 90
130 C=#E0*!C:GOTO 50
次に進もうとする位置に進めるかを判定し、進める場合は進む。
進めない場合は、かわりの処理を行う。
まず、90行目で次に進もうとする位置が画面内かを判定する。
画面内であれば、100行目で次に進もうとする位置に現在描画中の文字があるかを判定する。
現在描画中の文字が無い (すなわち、空き) ならば、110行目でそこに移動し、次の文字の描画に進む。
進もうとした位置が画面外または空きでないため進めないときは、120行目の処理を行う。
ここでは、T の値をみて処理を変える。
文字の描画後、最初にここに来たときは、進む方向を右に90度変え、もう一度判定を行う。
2回目にここに来たとき (すなわち、方向を変えても進めないとき) は、130行目の処理に移る。
130行目では、描画する文字を変え (今回は、「あ」を出すのか消すのかを切り替え)、また最初から描画処理を行うために戻る。
まとめ
あああああああああああああああああああああああああああああああ
この記事が気に入ったらサポートをしてみませんか?