見出し画像

【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 の使用を推奨する。

実行結果例

ゲーム中の画面

途中「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」が揃ったときは、ちょっと豪華な効果音を鳴らす)

    • 次の文字を出現させる処理に移る


いいなと思ったら応援しよう!