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/17 12:18:30

MixJuice GET URL : kidspod.club/mj/1042

t/i

t/i

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

 同タイトルで投稿している PanCake 用のゲームを IchigoCake BASIC 専用に改造したものです。4つに分かれていたプログラムを1つにまとめ、IchigoCake BASIC 専用のコマンドに書き換えました。PanCake 用よりも若干スピードが上がってスムーズに動いていると思います。

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

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

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

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

【プログラムの説明】

  20-310   初期設定
  410-460  ステージ開始
  510    メインループの最初
  520-540  ゲームオーバー、クリア判定など
  600-710  自機処理
  810-940  動物処理
  950    メインループの最初に戻る
  1000-1030 ステージクリア
  1100-1140 ゲームオーバー
  1200-1260 文字移動ルーチン
  1300-1330 動物の向き(フリップ)ルーチン
  1500-1580 ステージセレクトルーチン

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

SOURCE CODE

10 'New_Safari
20 '
30 VIDEO0:CLV
40 PC.RESET:PC.SSTART #01
50 PC.SMOVE 0,#24,#20
60 PC.SCREATE 0,#11
70 FORI=1TO8:PC.SMOVE I,#50,#10:NEXT
100 PC.MSCORE 0,0,#12,">>CEG~"
110 PC.MSCORE 1,0,#12,"CDC~"
120 PC.MSCORE 2,0,#82,"$<E32E8<B>DD+"
130 PC.MSCORE 3,0,#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 '

400 '
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.MPLAY 1,2
460 '

500 '
510 '
520 IF(E=D)&(H=1)&(J=0)X=X-2:IF X<-16 GOTO1100
530 IF(E=N)&(H=0)&(J=0) GOTO1000
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.MPLAY 1,1
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.SFLIP 0,F
700 PC.SMOVE 0,X,Y-V
710 '

800 '
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.SCREATE D+1,#24+C: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.SMOVE I+1,X+[I*4],Y+[I*4+1]-W: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.SMOVE I+1,[I*4],[I*4+1]-W
920 IF((X-[I*4])*(X-[I*4])+(Y-[I*4+1])*(Y-[I*4+1])<24) H=1:PC.SROTATE 0,(1-F)*2+1:PC.MSCORE 0,0,#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 GOTO500

1000 '
1010 PC.MPLAY 0,2
1020 C=77:GSB1200
1030 S=S+1:GOTO400

1100 '
1110 PC.MPLAY 0,2
1120 C=85:GSB1200
1130 VIDEO1:CLS:?"STAGE ";S:?:?"GAME OVER":?:?"PUSH [Enter]"
1140 IF INKEY()=10 RUN ELSE CONT

1200 '
1210 FORI=1TO8:PC.SCREATE I,[C+I]:PC.SFLIP I,0:NEXT
1220 A=72
1230 A=A-4:FORI=1TO8:PC.SMOVE I,A+I*8,#10:NEXT
1240 IF A=0 IF C=85 PC.MPLAY 1,3:RTN ELSE PC.MPLAY 1,0:WAIT50
1250 IF A>-72 GOTO1230
1260 RTN

1300 '
1310 IF[A*4]>X B=1 ELSE B=0
1320 PC.SFLIP A+1,B
1330 RTN

1500 '
1510 FORI=1TO8:PC.SMOVE I,I*8,#10:PC.SCREATE I,[69+I]: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.SCREATE 7,A
1550 PC.SCREATE 8,B
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

COMMENT