【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
キー入力を促すメッセージを出力し、キー入力を待機する。
キーが押されたら、キー入力を促すメッセージを消去し、次のゲームを開始する。
この記事が気に入ったらサポートをしてみませんか?
コメント