SHIROのIchigoJam日記

IchigoJamの電子工作とプログラミングをメインに

Jump64

以前「十勇士クラブTV」のライブで、IchigoJamでジャンプゲームを作りました。

それをヒントに、Ichigo64環境(IchigoJam+IchigoDot)用のジャンプゲームを作ってみました。

  • 起動するとタイトル画面の後、画面下に地面、左側にプレイヤーを表すドットが表示されます。ダウンカウントの後にゲームがスタートして、画面が左へスクロールしていきます。
  • ボタンを押すと、プレイヤーが上へジャンプします。地面にはときどき穴が開いていますので、ジャンプして飛び越えてください。
  • 上空にはときどきアイテムが出現します。ジャンプしてゲットするとスコアが1ポイント増えます。最初は下に出てくるアイテムにしか届きませんが、10ポイントゲットすると倍の高さまでジャンプできるようになります。
  • 地面の穴へ落ちるとゲームオーバーです。ゲットしたポイントがドット数で表示されます(64ポイントまで)。ボタンを押すとリプレイします。

※11/24 PUSH方向が「上」になるように変更。

1 '*Jump64J*
2 IFBTN()GOTO2
3 WAIT60:UART1:CLS:?
4 CLV:?"MATLED SHOW 202AAA450053ABAA":PLAY"R8E16G16R4R8E16G16":WAIT150:SRNDANA(2)+TICK()
5 [7]=#FF:X=64:Y=6:GSB30:W=2
6 FORI=0TO2:[I]=1:NEXT:FORI=2TO0STEP-1:BEEP30,5:GSB31:[I]=0:WAIT55:NEXT:GSB31:BEEP10,30
7 IF(Y=6)&&([7]&X=0)GOTO17
8 GSB22
9 [7]=([7]<<1)&#FF:IFRND(16)>0[7]=[7]+1
10 P=-1:IF!RND(10)P=3*RND(2)
11 GSB22:GSB30
12 FORI=0TO6:[I]=([I]<<1)&#FF:NEXT
13 IFP>-1[P]=[P]+1
14 GSB22:IFJGSB24
15 IF[Y]&XGSB26
16 GSB30:GSB22:GOTO7
17 GSB30:BEEP30,30:WAIT60:IFS>64S=64
18 FORI=0TO7:[I]=0:NEXT:IF!SGOTO20
19 FORN=0TOS-1:M=N/8:[M]=[M]+(1<<(N%8)):NEXT
20 GSB31
21 IF!BTN()GOTO21 ELSEGOTO4
22 IFBTN()&&J=0&&Y=6&&([7]&X)BEEP30,5:J=1:V=W
23 RTN
24 Y=Y-V:V=V-1:IFY=6J=0
25 RTN
26 GSB28:GSB31:BEEP10,5:S=S+1:IFS=10W=3:BEEP10,5
27 GSB28:GSB30:RTN
28 IFY>0[Y-1]=[Y-1]^X
29 [Y+1]=[Y+1]^X:[Y]=[Y]^(X<<1)^(X>>1):RTN
30 [Y]=[Y]^X
31 ?"MATLED SHOW ";:FORB=0TO7:IF[B]<16?0;
32 ?HEX$([B]);:NEXT:?:RTN
ちなみにライブで作ったIchigoJam版はこちら。
10 '*** JUMP ***
20 CLS:CLV
30 X=15:Y=21:V=0:J=0:W=10
40 LOCATE X,Y
50 PRINT CHR$(7);
60 LOCATE 0,22
70 FOR I=0 TO 31
80 PRINT CHR$(1);
90 NEXT
100 LOCATE 0,0
110 PRINT S
120 '--- LOOP ---
130 IF INKEY()=32 AND J=0 THEN GOSUB 480
140 LOCATE X,Y
150 PRINT " ";
160 Y=Y+V:IF J=1 THEN V=V+1
170 IF VPEEK(X,Y)=36 THEN BEEP:S=S+100
180 IF VPEEK(X,Y)=64 THEN BEEP:W=2:Z=1
190 LOCATE X,Y
200 PRINT CHR$(7);
210 IF Y>=21 THEN J=0:V=0
220 GOSUB 290
230 IF VPEEK(X,Y+1)<>1 AND Y=21 THEN GOTO 250
240 GOTO 120
250 '--- MISS ---
260 LOCATE 10,12
270 PRINT "*** MISS ***"
280 END
290 '--- SCROLL ---
300 LOCATE X,Y
310 PRINT " ";
320 SCROLL 3
330 IF Z>0 THEN Z=Z+1
340 IF Z>=32 THEN Z=0:W=10
350 IF VPEEK(X,Y)=36 THEN BEEP:S=S+100
360 IF VPEEK(X,Y)=64 THEN BEEP:W=2:Z=1
370 LOCATE 31,22
380 IF RND(10)<9 THEN PRINT CHR$(1);
390 LOCATE X,Y
400 PRINT CHR$(7);
410 S=S+1
420 LOCATE 0,0
430 PRINT S
440 IF RND(10)<1 THEN LOCATE 31,15:PRINT "$";
450 IF RND(20)<1 THEN LOCATE 31,15:PRINT "@";
460 WAIT W
470 RETURN
480 '--- JUMP ---
490 J=1
500 V=-3
510 RETURN