見出し画像

【IchigoJam】10カウント当てゲーム

なんかつくってみたものを期間内に4記事投稿するとプレゼントへの応募になるらしいので、今週も IchigoJam 用の雑プログラムをつくってみた。(直球)

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

ルール

ゲームを始めると、まず0~2のカウントが等間隔で表示され、3を表示するタイミングで表示が消える。
このカウントを参考に、カウントが10になるタイミングでキーを押せ!

※カウントの間隔はランダムであり、1秒とは限らないぞ!

操作方法

  • 任意のキー:スタート / タイミングの入力

プログラム

10 ' カウント ゲーム
20 PRINT "PRESS ANY KEY TO START";:GOTO 160
30 IF VER()>=14114 P=VER(4) ELSE P=60
40 P=P+RND(41)-20
50 WAIT 60
60 CLT:Q=-1
70 T=TICK()/P:IF T<>Q Q=T:PRINT CHR$(#18);:IF T<3 PRINT T;
80 IF T<3 GOTO 70
90 IF INKEY()=0 GOTO 90
100 R=TICK()
110 PRINT R/P;".";DEC$(R%P*100/P+100,2);" (";
120 D=R-P*10
130 IF D<0 PRINT D; ELSE IF D>0 PRINT "+";D; ELSE PRINT "PERFECT";
140 PRINT ")"
150 PRINT "PRESS ANY KEY TO RETRY";
160 IF INKEY()=0 GOTO 160 ELSE PRINT CHR$(#18);:GOTO 30

このプログラムは、CC0 1.0 でライセンスする。

OneFiveCrowd で実行 (高速、非公式) (推奨)
IchigoJam web で実行 (公式、低速)

実行結果例

画像
何回かゲームを行った結果

解説

10 ' カウント ゲーム

FILES 対応のタイトル。

20 PRINT "PRESS ANY KEY TO START";:GOTO 160

最初のメッセージを表示し、キー入力を待機する処理に移る。
この待機処理は、ゲーム終了時の処理を流用する。

30 IF VER()>=14114 P=VER(4) ELSE P=60
40 P=P+RND(41)-20

1秒に相当する TICK() の値を取得し、それに適当な値 (負の値を含む) を足すことでカウントの間隔を決定する。

50 WAIT 60
60 CLT:Q=-1

ゲーム開始時、少し待機した後、時間と描画の状態を初期化する。

70 T=TICK()/P:IF T<>Q Q=T:PRINT CHR$(#18);:IF T<3 PRINT T;
80 IF T<3 GOTO 70
90 IF INKEY()=0 GOTO 90

最初の3カウントを表示し、その後キー入力を待機する。
カウントは、変化した時のみ描画を行う。
CHR$(#18) は、カーソルがある行の内容を消去してカーソルを行頭に移動する特殊キーコードである。
(参考:IchigoJamの特殊キーコード表(特殊キャラクターコード表) by 表かんたん作成プログラム)

100 R=TICK()
110 PRINT R/P;".";DEC$(R%P*100/P+100,2);" (";

キーが押された時刻を取得し、カウント値に変換して出力する。
IchigoJam BASIC で非負の数値を十進数で0埋め指定桁数出力する #BASIC - Qiita
で紹介したテクニックを使用し、小数点以下2桁を出力している。

120 D=R-P*10
130 IF D<0 PRINT D; ELSE IF D>0 PRINT "+";D; ELSE PRINT "PERFECT";
140 PRINT ")"

10カウントに相当する時刻とキーが押された時刻の差 (TICK() 単位) を計算し、出力する。
キーが押されたのが早すぎる場合はマイナス、遅すぎる場合はプラスで出力する。
マイナスの場合は標準でマイナスの符号を表示してくれるが、プラスの場合はデフォルトだと符号を表示してくれないので、補っている。
タイミングがピッタリの場合、「±0」と表示したかったが、「±」は標準のキャラクターコードに無いようなので、かわりに「PERFECT」と表示するようにした。

150 PRINT "PRESS ANY KEY TO RETRY";
160 IF INKEY()=0 GOTO 160 ELSE PRINT CHR$(#18);:GOTO 30

キー入力を促すメッセージを出力し、キー入力を待機する。
キーが押されたら、キー入力を促すメッセージを消去し、次のゲームを開始する。

この記事が参加している募集

note オフィシャルイベント

この記事が気に入ったらサポートをしてみませんか?

コメント

ログイン または 会員登録 するとコメントできます。
【IchigoJam】10カウント当てゲーム|みけ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