見出し画像

IchigoJam でマークシート

今週も、無策で締切間近……
書きたいネタはあるけど、コストが高めで間に合うか不安だし……
雑になんか作ってごまかすか……
といっても、なんか作るにしても何を作るか考えて、作って、動作確認して、記事を書いて、だからタダじゃないし……
で、何を作る……?

今日のちびまる子ちゃんに、「マーク」(花輪クンの友達) が出てきた。
そうだ、IchigoJam でマークシート的なものを作ろう。

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

今回作ったもの

IchigoJam BASIC で、マークシートのような画面を作る。
1~40の各項目について、それぞれ1~4を選択できる。
それぞれの欄は独立にマークできる (1個の項目で複数の選択肢をマークできる) ので、マークがズレないように注意!

操作方法

  • 矢印キー / WASD:カーソルを移動する

  • Enterキー / スペースキー:カーソルの位置をマークする

  • BackSpaceキー:カーソルの位置のマークを消す

実行結果例

画像
初期画面
画像
マークの記入例

プログラム

10 ' マークシート
20 CLS:FORI=0TO39:LOCATE4+(I<9)+14*(I>19),3+I%20:?I+1;" 1 2 3 4";:NEXT:FORI=0TO1:LOCATE7+14*I,1:?"1 2 3 4";:NEXT
30 POKE#700,0,24,56,48,96,64,128,0:POKE#748,56,124,254,254,254,254,124,0
40 Q=0:C=0
50 LOCATE8+C*2+14*(Q>19),3+Q%20:?CHR$(#E0);
60 LOCATE0,23
70 K=INKEY():L=K&#DF
80 IFK=10ORK=13ORK=32:LOCATE7+C*2+14*(Q>19),3+Q%20:?CHR$(#E9);:GOTO60
90 IFK=8:LOCATE7+C*2+14*(Q>19),3+Q%20:?C+1;:GOTO60
100 IFK=LEFTORL=#41:X=-1:Y=0:GOTO150
110 IFK=RIGHTORL=#44:X=1:Y=0:GOTO150
120 IFK=UPORL=#57:X=0:Y=-1:GOTO150
130 IFK=DOWNORL=#53:X=0:Y=1:GOTO150
140 WAIT1:GOTO70
150 LOCATE8+C*2+14*(Q>19),3+Q%20:?" ";
160 Q=Q+Y:C=C+X
170 IFC<0:C=C+4:Q=Q-20
180 IFC>3:C=C-4:Q=Q+20
190 IFQ<0:Q=Q+40
200 IFQ>39:Q=Q-40
210 GOTO50

このプログラムは、CC BY 4.0 でライセンスする。

解説

  • 10行目:FILES 対応のタイトル

  • 20行目:項目番号と選択肢番号の描画

  • 30行目:カーソルとマークのキャラクターパターンの設定

  • 40行目:カーソルの位置の初期化

  • 50行目:カーソルの描画

  • 60行目:プログラムの停止時の見た目を良くするための処理

  • 70行目:キー入力と、英小文字を大文字に変換

  • 80行目:マークをする

  • 90行目:マークを消す

  • 100~130行目:カーソルの移動を指示する

  • 140行目:キー入力を待機する

  • 150~210行目:カーソルを移動する

    • 150行目:描画済みのカーソルを消す

    • 160行目:指示に沿ってカーソルを移動する

    • 170~200行目:カーソルの位置を補正する

    • 210行目:カーソルを描画する処理に飛ぶ

実装のポイント

キャラクターパターンの作成

今回用いたカーソルとマークのキャラクターパターンは、
キャラクターエディタ - イチゴジャム レシピ
を用いて作成した。

このツールには、作成したキャラクターパターンを数値の列として出力する機能がある。
OneFiveCrowd で実行すると、「画面エクスポート」機能によりこの列を簡単に文字列として取り出すことができる。

カーソルのキャラクターパターンは、鉛筆をイメージした。

マークのキャラクターパターンを作成する際は、まず以下のプログラムを実行し、1~4の数字で使われる位置を求めた。

FORI=0TO7:POKE#800-8+I,PEEK(#31*8+I)|PEEK(#32*8+I)|PEEK(#33*8+I)|PEEK(#34*8+I):NEXT

そして、これらの位置を全てカバーし、かつ一番下の行は空けるようなパターンを作成した。

キャラクターパターンの設定が反映されない環境への配慮

標準のキャラクターパターンを用いるよりも良い見た目になるよう、カーソルとマークには独自のキャラクターパターンを設定した。
しかし、本体のビデオ出力を直接見ず、UART 経由で出力を確認する環境 (たとえば IJUtilities) では、キャラクターパターンの設定が反映されないことがある。

今回は、そのような環境でも見た目が悪くなりすぎないよう、キャラクターパターンの設定枠を単純に前から用いるのではなく、デフォルトのキャラクターパターンでもカーソルやマークとして使えるような枠を選んだ。
本当は、最初デフォルトのキャラクターパターンを使うつもりで作って、それだとあまり見た目がよくないから独自のキャラクターパターンを入れたからなんだけどね。特にマークは、丸を使うと下のマークとくっついてしまうし、コインを使うと明らかに数字より細くなるので美しくなかった。

画像
IJUtilities での表示

なお、本作を IJUtilities 経由で実行する際は、以下のポイントに気をつけるとよい。

  • Echo をオフにする

  • 「Monitor」ではなく「ターミナルセンター」をアクティブにした状態で入力を行う

Echo がオンの状態で操作を行うと、Enter でマークをした際、表示が上にズレてしまった。
また、Echo をオフにして「Monitor」がアクティブな状態でカーソル移動の入力を行うと、表示が乱れてしまった。

まとめ

IchigoJam BASIC で、マークシートのように数字を表示し、マークをしたり消したりできるようにできた。

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

コメント

ログイン または 会員登録 するとコメントできます。
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