LoginSignup
0
0

演算子ゲーム for IchigoJam

Posted at

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()

OneFiveCrowd で実行する

実行結果例

解説

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の利用規約に基づくプログラムの利用を禁止するものではない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0