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 でライセンスする。
OneFiveCrowd で実行する (高速、非公式) (推奨)
IchigoJam web で実行する (公式、低速)
解説
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 経由で実行する際は、以下のポイントに気をつけるとよい。
Echo をオフにする
「Monitor」ではなく「ターミナルセンター」をアクティブにした状態で入力を行う
Echo がオンの状態で操作を行うと、Enter でマークをした際、表示が上にズレてしまった。
また、Echo をオフにして「Monitor」がアクティブな状態でカーソル移動の入力を行うと、表示が乱れてしまった。
まとめ
IchigoJam BASIC で、マークシートのように数字を表示し、マークをしたり消したりできるようにできた。


コメント