IchigoJam で「演算子ゲーム」を作ってみた。
※IchigoJamはjig.jpの登録商標です。
遊び方
10123 3376 = 13499
のような、演算子が抜けた式が表示される。
この式を成立させる (演算子を左の2個の数に適用した計算結果を、右の数にする) ための演算子を
-
+
(加算) -
-
(減算) -
&
(ビットAND) -
|
(ビットOR) -
^
(ビットXOR)
の中から選び、該当する演算子をキーボードまたはUARTから入力する。
演算子を入力すると、正誤が判定される。
正解なら右側に O
が表示され、不正解なら右側に X
が表示される。
正解でも不正解でも、1回答えを入力すると次の問題に進む。
20問正解するまでの時間が計測される。
プログラム
10 ' エンザンシ ゲーム
20 C=0:T=20:O="+-&|^":CLS:CLT
30 A=RND(16384):B=RND(16384)
40 IF A<B THEN X=A:A=B:B=X
50 [0]=A+B:[1]=A-B:[2]=A&B:[3]=A|B:[4]=A^B
60 S=RND(5):K=1
70 FOR I=0 TO 4
80 IF I<>S AND [I]=[S] THEN K=0
90 NEXT
100 IF !K THEN GOTO 30
110 PRINT DEC$(A,5);" ";DEC$(B,5);" = ";DEC$([S],5);CHR$(#12,#1D,#1D,#1D,#1D,#1D,#1D);
120 K=INKEY():I=-1
130 FOR J=0 TO 4
140 IF K=PEEK(O+J) THEN I=J
150 NEXT
160 IF I<0 THEN GOTO 120
170 PRINT CHR$(PEEK(O+I),#17);" ";CHR$(PEEK("XO"+(I=S)))
180 C=C+(I=S)
190 IF C<T THEN GOTO 30
200 PRINT CHR$(#0A);"TIME: ";TICK()
実行結果例
解説
10行目:タイトル
FILES
対応のタイトル行。
20行目:初期化
現在の正解数 C
、要求正解数 T
、演算子リスト O
を初期化する。
さらに、タイマーと画面をクリアする。
30~100行目:問題生成
- 30行目:乱数で2個の数を決定する。
- 40行目:必ず左の数が右の数以上になるように調整する。
- 50行目:2個の数に各演算子を適用した結果を計算する。
- 60行目:正解の演算子を選択する。有効フラグを立てる。
- 70~90行目:別解が見つかったら、有効フラグを折る。
- 100行目:有効フラグが折れている (別解がある) なら、生成をやり直す。
110行目:問題描画
2個の数、イコール、計算結果を描画する。
さらに、
IchigoJamの特殊キーコード表(特殊キャラクターコード表) by 表かんたん作成プログラム
を参考に、#12
(行頭に移動) と #1D
(1文字右に移動) を用いてカーソルを演算子を描画する位置に移動しておく。
120~160行目:入力受け付け
- 120行目:キー入力を読み込む。選択された演算子を無効とする。
- 130~150行目:読み込んだ入力が選択肢にある演算子と一致すれば、その情報を記録する。
- 160行目:入力が有効な演算子でないなら、入力の読み込みに戻る。
170行目~200行目:正誤判定・描画など
- 170行目:入力された演算子と正誤を描画する。
#17
(行末に移動) を用いる。 - 180行目:正解の場合、現在の正解数を更新する。
- 190行目:現在の正解数が要求正解数に満たない場合、次の問題に進む。
- 200行目:クリアにかかった時間を出力する。
ライセンス
今回のプログラムは、CC BY 4.0 でライセンスする。
このプログラム (改造したものを含む) を公開の場で利用する際は、出典を示していただけると嬉しい。
これは、Qiitaの利用規約に基づくプログラムの利用を禁止するものではない。