Enjoy programming more!
Kidspod is a post site which supports young programmers.
First step to join us.
Register as a member
For members

2020/12/16 12:44:55

MixJuice GET URL : kidspod.club/mj/1040

t/i

t/i

サファリパニック(PanCake用)

 IchigoJam + PanCake 用のゲームです。PanCakeで表示可能なスプライト16個を全部出して動かしてみようと思い作りました。

(2020/12/22・修正)
 IchigoJam のバージョン 1.4以降の対応としていましたが、プログラム3の920行目の式の中で使用していた「()」を減らしたことにより、バージョン 1.2 や 1.3 でも動くようになりました。

(2020/12/26・IchigoCake で遊ぶ場合のご注意)
 IchigoCake 用のファームウェア PanCake C のバージョン 1.2 にはスプライトの重なる順番が仕様と逆になる不具合があり、大きい番号のスプライトの方が下に表示されてしまいます(小さい番号のスプライトが下になるのが正しい)。1.2 のままでも遊ぶことはできますが、自機が動物の上に表示されるのでちょっと違和感があると思います。PanCake の公式サイト(http://pancake.shizentai.jp/)にあるバージョン 1.2.1 にファームアップするか、1.2 のままなら自機のスプライト番号0を16番以降に変更してもらうと意図した通りに表示されます(プログラム0の50行目、60行目、プログラム2の690行目、700行目)。

【ストーリー】
 サファリパーク内をバスに乗って移動していると突然、動物たちが襲いかかって来た! バスが動物にぶつからないように避け続けなければならない!

【内容】
 画面固定のアクションゲームです。動物たちは空から降りて来て、地面に着いたらバス(自機)に向かって突進してきます。ジャンプと横移動を使って動物に当たらないように避けて下さい。

【遊び方】
 プログラムは4つに分かれていて、それぞれプログラム0〜3に保存します。プログラム0を実行してスタートします。最初にステージセレクトがあります。カーソルキーの左右で選んで、Enterキーで決定です。ステージが進むごとに出てくる動物の数が増えますが、ステージ15を選ぶといきなり最大15体の動物が出てきます。ゲームの操作は、カーソルキーの左右で横移動、スペースキーでジャンプです。ゲームオーバーになったら、Enterキーで再スタートです。

【プログラムの説明】

 <プログラム0>
  20-310   初期設定
  1500-1580 ステージセレクトルーチン

 <プログラム1>
  410-460  ステージ開始
  1000-1030 ステージクリア
  1100-1140 ゲームオーバー
  1200-1260 文字移動ルーチン

 <プログラム2>
  510    メインループの最初
  520-540  ゲームオーバー、クリア判定など
  600-710  自機処理

 <プログラム3>
  810-940  動物処理
  950    メインループの最初(プログラム2)に戻る
  1300-1330 動物の向き(フリップ)ルーチン

  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

SOURCE CODE

NEW
10 'Safari_0
20 '
30 VIDEO0:CLV
40 ?"PC RESET":?"PC SPRITE START 01
50 ?"PC SPRITE MOVE 00 24 20"
60 ?"PC SPRITE CREATE 00 11"
70 FORI=1TO8:?"PC SPRITE MOVE ";HEX$(I,2);" 50 10":NEXT
100 ?"PC MUSIC SCORE 00 00 12 >>CEG~"
110 ?"PC MUSIC SCORE 01 00 12 CDC~"
120 ?"PC MUSIC SCORE 02 00 82 $<E32E8<B>DD+"
130 ?"PC MUSIC SCORE 03 00 12 <GFEDC~~"
200 X=36:Y=32:S=1
210 LET[60],2,1,2,1,2,2,1,1
220 LET[70],#92,#93,#80,#86,#84,#FF
230 LET[78],#82,#8B,#84,#80,#91,#A4,#A4,#A4
240 LET[86],#86,#80,#8C,#84,#8E,#95,#84,#91
300 GSB1500
310 LRUN1
1500 '
1510 FORI=1TO8:?"PC SPRITE MOVE ";HEX$(I,2);" ";HEX$(I*8,2);" 10":?"PC SPRITE CREATE ";HEX$(I,2);" ";HEX$([69+I],2):NEXT
1520 '
1530 L=(L+1)%2:IF L=1 A=#A6+S/10%10:B=#A6+S%10%10 ELSE A=#9B:B=#9B
1540 ?"PC SPRITE CREATE 07 ";HEX$(A,2)
1550 ?"PC SPRITE CREATE 08 ";HEX$(B,2)
1560 S=S-(BTN(28)=1)+(BTN(29)=1):IF S=0 S=15 ELSE IF S=16 S=1
1570 WAIT10
1580 IF INKEY()=10 RTN ELSE GOTO1520

SAVE0


NEW
400 'Safari_1
410 '
420 [76]=#A6+S/10%10:[77]=#A6+S%10%10
430 C=69:GSB1200
440 D=0:E=0:N=S:IF S>15 N=15
450 ?"PC MUSIC PLAY 01 02"
460 LRUN2
1000 '
1010 ?"PC MUSIC PLAY 00 02"
1020 C=77:GSB1200
1030 S=S+1:GOTO400
1100 '
1110 ?"PC MUSIC PLAY 00 02"
1120 C=85:GSB1200
1130 VIDEO1:CLS:?"STAGE ";S:?:?"GAME OVER":?:?"PUSH [Enter]"
1140 IF INKEY()=10 LRUN0 ELSE CONT
1200 '
1210 FORI=1TO8:?"PC SPRITE CREATE ";HEX$(I,2);" ";HEX$([C+I],2):?"PC SPRITE FLIP ";HEX$(I,2);" 00":NEXT
1220 A=72
1230 A=A-4:FORI=1TO8:?"PC SPRITE MOVE ";HEX$(I,2);" ";HEX$(A+I*8,2);" 10":NEXT
1240 IF A=0 IF C=85 ?"PC MUSIC PLAY 01 03":RTN ELSE ?"PC MUSIC PLAY 01 00":WAIT50
1250 IF A>-72 GOTO1230
1260 RTN

SAVE1


NEW
500 'Safari_2
510 '
520 IF(E=D)&(H=1)&(J=0)X=X-2:IF X<-16 LRUN1,1100
530 IF(E=N)&(H=0)&(J=0) LRUN1,1000
540 L=(L+1)%8:V=L/4
600 '
610 IF H=1 GOTO660
620 IF(BTN(28)=1)&(X>0) X=X-1:F=1
630 IF(BTN(29)=1)&(X<72) X=X+1:F=0
640 IF(K=1)&(BTN(32)=0) K=0
650 IF(J=0)&(K=0)&(BTN(32)=1) K=1:J=1:Q=-650:?"PC MUSIC PLAY 01 01"
660 '
670 IF J=1 Y=Y+Q/100:Q=Q+100:V=0
680 IF(J=1)&(Y>=32) J=0:Q=0:Y=32
690 ?"PC SPRITE FLIP 00 ";HEX$(F,2)
700 ?"PC SPRITE MOVE 00 ";HEX$(X,2);" ";HEX$(Y-V,2)
710 LRUN3

SAVE2


NEW
800 'Safari_3
810 '
820 IF(H=0)&(D<N)&(RND(2)=0) [D*4]=RND(72):[D*4+1]=-8:[D*4+2]=1:C=RND(8):[D*4+3]=[60+C]:?"PC SPRITE CREATE ";HEX$(D+1,2);" ";HEX$(#24+C,2):A=D:GSB1300:D=D+1
830 FORI=0TO14:W=L/4
840 IF[I*4+2]<2 W=0
850 IF[I*4+2]=0 GOTO930
860 IF[I*4+2]=4 ?"PC SPRITE MOVE ";HEX$(I+1,2);" ";HEX$(X+[I*4],2);" ";HEX$(Y+[I*4+1]-W,2):GOTO930
870 IF L%[I*4+3]>0 GOTO930
880 IF[I*4+2]=3 [I*4]=[I*4]-4:IF[I*4]<-7 [I*4+2]=0:E=E+1
890 IF[I*4+2]=2 [I*4]=[I*4]+4:IF[I*4]>79 [I*4+2]=0:E=E+1
900 IF[I*4+2]=1 [I*4+1]=[I*4+1]+4:IF[I*4+1]>=32 [I*4+1]=32:A=I:GSB1300:IF[I*4]<X [I*4+2]=2 ELSE [I*4+2]=3
910 ?"PC SPRITE MOVE ";HEX$(I+1,2);" ";HEX$([I*4],2);" ";HEX$([I*4+1]-W,2)
920 A=X-[I*4]:B=Y-[I*4+1]:IF(A*A+B*B<24) H=1:?"PC SPRITE ROTATE 00 ";HEX$((1-F)*2+1,2):?"PC MUSIC SCORE 00 01 12 GDC~":[I*4+2]=4:[I*4]=[I*4]-X:[I*4+1]=[I*4+1]-Y:E=E+1
930 '
940 NEXT
950 LRUN2
1300 '
1310 IF[A*4]>X B=1 ELSE B=0
1320 ?"PC SPRITE FLIP ";HEX$(A+1,2);" ";HEX$(B,2)
1330 RTN

SAVE3

COMMENT

Kidspod運営チーム
Kidspod運営チーム2021/01/08 10:29:47

シンプルながら侮れない難易度が楽しいです。操作性も良いですね! 動物に当たってしまったときのバスの動きが予想外で、思わず笑ってしまいました。ゲームオーバーの演出がいいゲームは楽しい!