見出し画像

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 でライセンスする。

解説

各変数の役割

  • 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の登録商標です。


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

コメント

ログイン または 会員登録 するとコメントできます。
IchigoJam でカウンタ|みけCAT
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1