![見出し画像](https://assets.st-note.com/production/uploads/images/153622762/rectangle_large_type_2_a0757af61c7c7cc35d8b2930b253b75f.png?width=1200)
【IchigoJam】streakゲーム ~streakを繋げ!2~
またもや「streakを繋ぐ」シリーズ。
IchigoJam で、よくある「スネークゲーム」ならぬ「streakゲーム」を作ってみた。
※IchigoJamはjig.jpの登録商標です。
ルール
「streak」が自動で進んでいく。
画面内のランダムな位置に現れる文字を先頭に繋ぎ、どんどん長くしていこう!
得点表示・画面端・自分に当たってしまうとゲームオーバー!
操作方法
十字キー・WASDキー:方向を変える
スペースキー:ゲームオーバー時にリトライする
プログラム
10 ' streak ゲーム
20 IFVER()>=13224A=POS(3):B=POS(4)ELSE A=32:B=24
30 LET[0],#73,#74,#72,#65,#61,#6B
40 FORI=0TO3:FORJ=0TO5:FORK=0TO7:POKE#700+(I*8+J)*8+K,PEEK([J]*8+K):NEXT:NEXT:NEXT
50 CLS:?" 6":X=(A-1)/2:Y=(B-1)/2:D=0:S=6:LOCATEX,Y:?CHR$(#E0,#E1,#E2,#E3,#E4,#E5):CLT
60 U=RND(A):V=RND(B):IFSCR(U,V)GOTO60ELSEPOKE#900+V*A+U,#E5-S%6
70 T=5-TICK():IFT>0:WAITT
80 CLT:K=INKEY():L=K&#DF:IFL=#44ORK=RIGHTD=2
90 IFL=#53ORK=DOWND=3
100 IFL=#41ORK=LEFTD=0
110 IFL=#57ORK=UPD=1
120 Z=X+(D=2)-(D=0):W=Y+(D=3)-(D=1):IFZ=UANDW=VGOTO190
130 IFZ<0ORA<=ZORW<0ORB<=WORSCR(Z,W)PLAY"L16O3EDC4":GOTO180
140 POKE#900+W*A+Z,PEEK(#900+Y*A+X)&#E7+D*8:X=Z:Y=W
150 FORI=1TOS:E=PEEK(#900+W*A+Z)/8&3:Q=Z+(E=0)-(E=2):R=W+(E=1)-(E=3)
160 POKE#900+W*A+Z,PEEK(#900+R*A+Q)&#E7+E*8:Z=Q:W=R:NEXT
170 POKE#900+W*A+Z,0:GOTO70
180 IFINKEY()=#20GOTO50ELSEWAIT1:GOTO180
190 POKE#900+V*A+U,#E5-S%6+D*8:S=S+1:LOCATE0,0:?DEC$(S,3);:X=Z:Y=W
200 IFS%6PLAY"O4C32"ELSEPLAY"L32O5CDEF16"
210 GOTO60
このプログラムは、CC BY 4.0 でライセンスする。
OneFiveCrowd で実行する (非公式、高速、推奨)
IchigoJam web で実行する (公式、低速)
IchigoJam の実機 (1.4.3) では、少し長くなると動作が遅くなる様子がみられた。
実機で動かす場合は、IchigoJam R の使用を推奨する。
実行結果例
![](https://assets.st-note.com/img/1725804581-4AFEugfk3NsDHmIYtO0oLi7Z.png?width=1200)
途中「s」が2個連続している場所があるが、これは体を動かす処理の途中であるからだと考えられる。
解説
10行目:FILES 対応のタイトル
20行目:画面サイズを取得する
30~40行目:キャラクターパターンを設定する
「streak」を進める方向をVRAM上に記録するため、「s」「t」「r」「e」「a」「k」のフォントをキャラクターパターンRAMにコピーし、4方向に対応する4種類の文字コードで同じ文字が出るようにする50行目:ゲームを初期化する
画面をクリアし、最初の得点 (長さ) を表示する
「streak」の初期位置・方向・長さを設定し、「streak」を表示する
ウェイト用にタイマーをクリアする
60行目:取る用の文字を出す
文字を出す位置をランダムに決める
決めた位置に既に何かある場合は、決め直す
決めた位置に文字を出す
70行目:1フレームの時間がまだ経っていなければ、ウェイトを入れる
80行目~110行目:入力に応じて進む方向を変える
120行目:次に進む位置を求め、文字を取る判定を行う
130行目:ゲームオーバーの判定を行う
ゲームオーバーの場合は、効果音を鳴らす
140~170行目:「streak」の位置を動かす
まず、新しい頭の位置に古い頭の文字を置き、頭の位置を更新する
VRAMに記録した方向の情報を用いて、体を順に進める
最後に、一番最後の文字を消去する
180行目:ゲームオーバー時の処理を行う
ゲームの進行を止め、リトライの入力を待機する
190~210行目:文字を取ったときの処理を行う
取った文字に、次の体の方向の情報を設定する
長さの表示を更新する
頭の位置を更新する
効果音を鳴らす (「streak」が揃ったときは、ちょっと豪華な効果音を鳴らす)
次の文字を出現させる処理に移る