【IchigoJam】streak typing ~streakを繋げ!3~
頭が悪いので、今週も記事を書くのを怠ってしまった。
今回も IchigoJam 用の適当なプログラムを書いてごまかすぞ。
※IchigoJamはjig.jpの登録商標です。
ルール
60秒間で「streak」といっぱいタイプし、streakを増やしていこう!
ただし、streakを増やすにあたってミスは厳禁!
ミスタイプをすると、streakがゼロに戻っちゃうよ!
操作方法
各種キー:タイピング (ゲーム画面)
スペースキー:スタート (タイトル画面) / 再スタート (タイムアップ画面)
プログラム
10 ' streak typing
20 LET[0],#73,#74,#72,#65,#61,#6B
30 CLS:LOCATE9,7:?"streak typing":LOCATE6,15:?"Press SPACE to start"
40 IF INKEY()<>32 WAIT1:GOTO40
50 CLS:?"Current streak 0":?"Longest streak 0":C=0:M=0:S=0:P=-1:T=60:LOCATE13,11:?"streak"
60 LOCATE1,23:FORI=1TO30:?CHR$(#8F);:NEXT:CLT
70 K=INKEY()*(P<0):IF K=0 WAIT1:GOTO110
80 IF K|#20=[S] LOCATE13+S,11:?" ":S=S+1 ELSE LOCATE13+S,12:?CHR$(K):P=TICK()+60
90 IF S=6 C=C+1:S=0:LOCATE14,0:?DEC$(C,5):LOCATE13,11:?"streak"
100 IF C>M M=C:LOCATE14,1:?DEC$(M,5)
110 IF P>=0 AND TICK()>=P C=0:LOCATE14,0:?DEC$(C,5):LOCATE13+S,12:?" ":S=0:LOCATE13,11:?"streak":P=-1
120 U=60-TICK()/60
130 IF U<T T=T-1:LOCATE1+T/2,23:?CHR$(#80+T%2*#5);
140 IF U>0 GOTO 70
150 LOCATE12,7:?"TIME UP!":LOCATE6,15:?"Press SPACE to retry"
160 IF INKEY()<>32 GOTO160 ELSE GOTO50
このプログラムは、CC BY 4.0 でライセンスする。
OneFiveCrowd で実行する (非公式、高速、推奨)
IchigoJam web で実行する (公式、低速)
実行結果例
タイトル画面。
このプログラムを起動すると、まずこの画面になる。
ゲーム画面。
真ん中に打ち込むべき文字列が表示されており、この文字列の左端の文字が次にタイプするべき文字である。
上にはスコアが表示されている。「Current streak」が現在何連続でミスなく「streak」を打ち込んだからであり、「Longest streak」はこのゲーム中における Current streak の最大値である。
(ゲームを越えて保持される「ハイスコア」は実装していない)
下には制限時間を表すバーが表示されている。これが段々短くなっていき、無くなったらゲーム終了である。
ゲーム画面でミスタイプをしたときの様子。
真ん中の文字列の左端の文字の下に、間違って入力した文字が表示されている。
なお、入力の大文字と小文字は区別しないので、たとえば「r」を入力するべきときに「R」を入力するのは正解扱いになる。
このあと、Current streak は 0 になり、入力するべき文字列は「streak」に戻る。
タイムアップ画面。
メッセージが表示され、ゲームが停止している。
スペースキーを押すと、スコアや文字列をリセットし、新しいゲームを開始する。
解説
プログラムは、以下の構成になっている。
10行目:FILES対応のタイトル
20行目:打ち込んでもらう文字列「streak」のデータ
30~40行目:タイトル画面
30行目:タイトル画面の描画
40行目:スペースキーが押されるまで待機する
50~140行目:ゲーム画面
50行目:初期状態の描画と、変数の初期化
60行目:残り時間バーの初期状態の描画
70~100行目:キー入力の受け付け
70行目:キー入力を読み取り、押されていないか硬直中であればこの後の処理を飛ばす
80行目:押されたキーの処理を行う
押されたキーが正解の場合、対応する文字を画面から消し、状態を進める
押されたキーが不正解の場合、押されたキーを表示し、硬直を開始する
90行目:「streak」を1個打ち終えた際の処理 (Current streak の加算、状態のリセット) を行う
100行目:Curren streak が Longest streak を上回ったら、Longest Streak を更新する
110行目:硬直中、硬直終了時刻になったら、状態をリセットして硬直を解除する
120行目:時刻から残り時間を求める
130行目:残り時間が減っていれば、それに描画を追従させる
140行目:残り時間が1秒以上あれば、ゲームの処理を繰り返す
150~160行目:タイムアップ画面
150行目:タイムアップ画面の描画 (ゲーム画面に追加する)
160行目:スペースキーが押されるまで待機する
以下の変数を用いている。
C:Current streak
M:Longest streak
S:次に打つべきなのが何文字目か
P:ミスタイプ時の硬直終了時刻
T:残り時間として表示している時間 (秒)
I:ループ変数
K:入力されたキーコード
U:残り時間 (秒)