IchigoJam でカウンタ
致命的に頭が悪くてクズで愚かでバカなので、今週もnoteの記事を書かないまま、残り時間が少なくなってしまった。
書きたいことはあるけど、時間内に書ききれるか不安だし、今週も何か作って埋めるか……
としても、何を作るかも決まらない……頭が悪い……
残り約1.5時間、ようやく何を作るかを決めることができた。
間に合うように記事を書こう。
この前みたいな、意識を飛ばしてタイムアップなどはあってはならない。
今回やること
IchigoJam BASIC でカウンタを作る。
キーボードのキーを押すことで数を数え、画面に表示する。
2回目以降の実行時、あえて画面を初期化しないことで、各カウント値が何を表しているかのメモを画面に書き、それを残せるようにした。
ただし、スクロールでカウント値の表示位置がずれてしまうと、おかしくなるので注意。
カウンターツールはGカウンター!
のような感じのものを作りたいと思った。
操作方法
Q / W / E / A / S / D / Z / X / C:対応するカウント値を 1 増やす
Shift + Q / W / E / A / S / D / Z / X / C:対応するカウント値を 1 減らす
Delete:全てのカウント値をリセットする
実行結果例
プログラム
10 ' カウンタ
20 IF R<>14687 R=14687:CLS:K=#7F ELSE K=-1
30 T=5:Y=0:U=#51:GOSUB70:Y=11:U=#57:GOSUB70:Y=22:U=#45:GOSUB70
40 T=11:Y=0:U=#41:GOSUB70:Y=11:U=#53:GOSUB70:Y=22:U=#44:GOSUB70
50 T=17:Y=0:U=#5A:GOSUB70:Y=11:U=#58:GOSUB70:Y=22:U=#43:GOSUB70
60 LOCATE0,19:K=INKEY():GOTO30
70 G=#84A+2*U:POKE#8CE,PEEK(G),PEEK(G+1)
80 IF K=#7F:B=0:GOTO120
90 IF K=U:B=B+1:GOTO120
100 IF K=U|#20:B=B-1:GOTO120
110 IF K>=0 RETURN
120 N=ABS(B):H=5-(N>9)-(N>99)-(N>999)-(N>9999)-(B<0)
130 LOCATE Y,T:PRINT CHR$(U);":";
140 IF H>0 PRINT " ";:H=H-1:GOTO140
150 PRINT B:POKEG,PEEK(#8CE),PEEK(#8CF):RETURNこのプログラムは、CC BY 4.0 でライセンスする。
OneFiveCrowd で実行する (高速、非公式) (推奨)
IchigoJam web で実行する (公式、低速)
解説
各変数の役割
Q / W / E / A / S / D / Z / X / C:対応するカウント値を記録する
カウント値を増減させるために押すキーと同じ名前の変数を使用するようにした
R:初回実行かの判定
K:入力されたキーコード
T:カウント値を表示する縦座標
Y:カウント値を表示する横座標
U:カウントに用いるキーコード
G:カウント値が記録されている変数のアドレス
B:カウント値 (作業用)
N:カウント値の絶対値
H:カウント値の前に出力する空白の数
各部分の役割
10行目:FILES 対応のタイトル
20行目:初期化処理
R が適当に決めた値でなかったら、最初の実行と判定し、画面とカウント値を初期化する
R が適当に決めた値だったら、2回目以降の実行と判定し、カウント値の描画のみを行う
30~50行目:カウント処理の呼び出し
カウント値を描画する座標と、カウント用のキーを設定し、呼び出しを行う
60行目:キー入力の取得
実行停止時の挙動を考え、カーソル位置の設定も行う
70~150行目:カウント処理
70行目:カウント値を格納する変数のアドレスを取得し、値を作業用の変数にコピーする
80~110行目:キー入力・描画判定
80行目:Delete が押されたら、カウント値を 0 にして描画する
90行目:指定のキーが押されたら、カウント値を 1 増やして描画する
100行目:Shift+指定のキーが押されたら、カウント値を 1 減らして描画する
110行目:判定対象のキーが押されて居ない場合は、最初だけ描画する
120行目:カウント値の位置合わせ用の空白の数を求める
130行目:カウントに用いるキーの情報を出力する
140行目:カウント値の位置合わせ用の空白を出力する
150行目:カウント値を出力し、カウント値を格納する変数に書き戻す
まとめ
IchigoJam BASIC で、9個までの数を並列で数えられるカウンタを作ることができた。
※IchigoJamはjig.jpの登録商標です。


コメント