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

2021/05/06 05:22:20

MixJuice GET URL : kidspod.club/mj/2068

t/i

t/i

リンゴマン(PanCake用)

 IchigoJam(1.4以降)+ PanCake 用のジャンプアクションゲームです。PanCake で画面がスクロールするゲームをやってみたいと思い作りました。

(ご注意)
 現状、IchigoJam のバージョン 1.2 や 1.3 だと Complex expression エラーが出て止まるので、1.4以降でお願いします。また、IchigoCake の場合、PanCake C のバージョン 1.2 だとスプライトが正しい順番で表示されません。1.2.1 にアップデートして下さい。

【遊び方】
 リンゴマンを操作してジャンプで上へ登って行きます。自力のジャンプだけでは上の足場となるブロックまで届きません。左右に動く火の玉を取ることで噴射して高く上がれます。画面は強制的に縦スクロールします。上へ上がって行くにつれてスピードアップします。急いで上がらないと画面の下に消えてゲームオーバーになります。またガイコツの敵に触れてもゲームオーバーですが、噴射ジャンプ中だけは敵を吹っ飛ばすことができます。操作は、カーソルキーの左右で横移動、スペースキーでジャンプです。ゲームオーバーになったら、Enterキーで再スタートです。

【プログラムについて】
 画面はスプライト15個使って表示していて、スコア用の数字以外の全てのスプライトをドット単位で下へ移動させて行くことで画面がスクロールしているように見せています。画面の下に消えたスプライト(ブロック、敵、火の玉)は、画面の上へ移動して新たな物体として現れます。


<プログラム0>
20-230行目 初期設定(画面、スプライト、サウンド、変数など)
1000-1030行目 ゲームオーバー

<プログラム1>
300行目 メインループの先頭
310-430行目 リンゴマンの操作、移動、ジャンプ
500-540行目 火の玉、敵、やられ敵の移動

<プログラム2>
600-710行目 スプライトの表示更新(位置、画像、向きなど)

<プログラム3>
800-850行目 火の玉、敵とのヒットチェック、リンゴマンの位置判定など
900-980行目 画面スクロール処理
990行目 メインループの先頭へ戻る


<スプライト番号>
0-2 ブロック1
3-5 ブロック2
7 リンゴマン・体
8 リンゴマン・頭
9 噴射
10 火の玉
11 敵
12 やられ敵(吹っ飛び専用)
13-15 数字


<変数>
A,B ヒットチェック座標
C,D ブロック1・座標
E,F ブロック2・座標
G スクロール(0:なし、1:あり)
H リンゴマン・左右フリップ
I FORループ
J ジャンプ&落下(0:なし、1:ジャンプ、2:噴射ジャンプ)
K スペースキー(0:押した、1:押してない)
L カウンター(0-7)
M やられ敵・回転
N リンゴマン・上下動
O カウンター(0-1)
P リンゴマン・表示画像番号
Q ジャンプ・落下移動量
R 距離(スコア)
S スピード(WAIT)
T スピードアップ確認(0:可、1:不可)
V 噴射・x座標
W リンゴマン・ジャンプ先y座標
X,Y リンゴマン・座標
Z スクロール値
[0]-[39] ヒットマップ(#800-#84F)
[40]-[79] マップコピー用 (#850-#89F)
[80]-[82] 火の玉・xy座標、x移動量
[83]-[85] 敵・xy座標、x移動量
[86]-[89] やられ敵・xy座標、xy移動量

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

SOURCE CODE

NEW

10 'Ringo-0
20 VIDEO0:CLV:?"PC RESET":?"PC SPRITE START 15"
30 FORI=0TO5:?"PC SPRITE CREATE ";HEX$(I,2);" 5E":NEXT
40 ?"PC SPRITE CREATE 08 1F"
50 ?"PC SPRITE ROTATE 09 02"
60 ?"PC SPRITE CREATE 0A 59"
70 ?"PC SPRITE CREATE 0B 3E"
80 ?"PC SPRITE CREATE 0C 3E"
90 FORI=0TO2:?"PC SPRITE MOVE ";HEX$(13+I,2);" ";HEX$(#38+I*8,2);" 00":NEXT
100 ?"PC MUSIC SCORE 00 00 12 C~>>>G~"
110 ?"PC MUSIC SCORE 01 00 12 CDC~"
120 ?"PC MUSIC SCORE 02 00 12 >GAC~~"
130 ?"PC MUSIC SCORE 03 00 12 >>>A~B~"
200 X=40:Y=32:C=8:D=8:E=32:F=40:S=8
210 LET[80],88,16,-4,0,0,2,-8
220 POKE#800+21,1,1,1:POKE#800+64,1,1,1
230 LRUN1
1000 '
1010 ?"PC MUSIC SCORE 03 01 12 <GFEDC~~":VIDEO1:CLS
1020 ?"Game Over":?:?"Result:";R;"m":?:?"Push [Enter]"
1030 IF INKEY()=10 RUN ELSE CONT

SAVE0
NEW

300 'Ringo-1
310 A=PEEK(#800+(X-1)/8+(Y+8-Z)/8*10):B=PEEK(#800+(X-1)/8+(Y+15-Z)/8*10)
320 IF(BTN(28)=1)&(X>0)&(A=0)&(B=0) X=X-2:H=1
330 A=PEEK(#800+(X+8)/8+(Y+8-Z)/8*10):B=PEEK(#800+(X+8)/8+(Y+15-Z)/8*10)
340 IF(BTN(29)=1)&(X<72)&(A=0)&(B=0) X=X+2:H=0
350 A=PEEK(#800+X/8+(Y+16-Z)/8*10):B=PEEK(#800+(X+7)/8+(Y+16-Z)/8*10)
360 IF(J=0)&(A=0)&(B=0) J=1:Q=0
370 IF(J>0)&((A=1)|(B=1)) J=0:Q=0:Y=(Y-Z)/8*8+Z
380 IF(K=1)&(BTN(32)=0) K=0
390 IF(J=0)&(K=0)&(BTN(32)=1) K=1:J=1:Q=-400:?"PC MUSIC PLAY 01 01"
400 IF J>0 W=Y+Q/100:Q=Q+100
410 A=PEEK(#800+X/8+(W+6-Z)/8*10):B=PEEK(#800+(X+7)/8+(W+6-Z)/8*10)
420 IF J>0 IF(Q<0)&((A=1)|(B=1)) Q=0 ELSE Y=W
430 IF(G=0)&(J=2) G=1:?"PC MUSIC PLAY 01 03"
500 '
510 [80]=[80]+[82]:IF(([80]=0)&([82]<0))|(([80]=72)&([82]>0)) [82]=-[82]
520 [83]=[83]+[85]:IF(([83]=0)&([85]<0))|(([83]=72)&([85]>0)) [85]=-[85]
530 IF U=1 [86]=[86]+[88]:[87]=[87]+[89]/100:[89]=[89]+250:IF(([86]<-8)|([86]>80)|([87]<-16)|([87]>48)) U=0:[86]=-8
540 LRUN2

SAVE1
NEW

600 'Ringo-2
610 FORI=0TO2:?"PC SPRITE MOVE ";HEX$(I,2);" ";HEX$(C+I*8,2);" ";HEX$(D,2):?"PC SPRITE MOVE ";HEX$(I+3,2);" ";HEX$(E+I*8,2);" ";HEX$(F,2):NEXT
620 L=(L+1)%8:O=O^1:P=O+3:IFJ>0 N=0 ELSE N=O
630 IF J=2 P=1:V=X ELSE V=-8
640 ?"PC SPRITE MOVE 07 ";HEX$(X,2);" ";HEX$(Y-N,2):?"PC SPRITE CREATE 07 ";HEX$(P,2):?"PC SPRITE FLIP 07 ";HEX$(H,2)
650 ?"PC SPRITE MOVE 08 ";HEX$(X,2);" ";HEX$(Y-4-N,2):?"PC SPRITE FLIP 08 ";HEX$(!H,2)
660 ?"PC SPRITE MOVE 09 ";HEX$(V,2);" ";HEX$(Y+6,2):?"PC SPRITE CREATE 09 ";HEX$(#40+O,2)
670 ?"PC SPRITE MOVE 0A ";HEX$([80],2);" ";HEX$([81],2)
680 ?"PC SPRITE MOVE 0B ";HEX$([83],2);" ";HEX$([84]-L>>2,2)
690 ?"PC SPRITE MOVE 0C ";HEX$([86],2);" ";HEX$([87],2):?"PC SPRITE ROTATE 0C ";HEX$(M,2)
700 ?"PC SPRITE CREATE 0D ";HEX$(#A6+R/100,2):?"PC SPRITE CREATE 0E ";HEX$(#A6+R/10%10,2):?"PC SPRITE CREATE 0F ";HEX$(#A6+R%10%10,2)
710 LRUN3

SAVE2
NEW

800 'Ringo-3
810 IF((X-[80])*(X-[80])+(Y-[81])*(Y-[81])<64) J=2:Q=-750:?"PC MUSIC PLAY 01 02":[81]=[81]-32:[82]=-[82]:IF[82]>0 [80]=-8 ELSE [80]=80
820 IF((X-[83])*(X-[83])+(Y-[84])*(Y-[84])<32) IF J<2 LRUN0,1000 ELSE U=1:?"PC MUSIC PLAY 01 00":[86]=[83]:[87]=[84]:[88]=[83]-X:[89]=-750:[84]=[84]-64:[85]=-[85]:IF[85]>0 [83]=-8 ELSE [83]=80
830 IF[88]<0 M=3 ELSE M=1
840 IF Y>63 LRUN0,1000
850 WAIT S:IF G=0 LRUN1
900 '
910 D=D+1:F=F+1:Y=Y+1:[81]=[81]+1:[84]=[84]+1:[87]=[87]+1:Z=(Z+1)%8
920 IF Z=0 COPY#85A,#800,70:COPY#800,#850,80:R=R+1
930 IF(R%5=0)&(S>0)&(T=0) S=S-1:T=1:?"PC MUSIC PLAY 01 03"
940 IF R%5=1 T=0
950 IF D>55 C=RND(8)*8:D=-8:POKE#800+C/8,1,1,1
960 IF F>55 E=RND(8)*8:F=-8:POKE#800+E/8,1,1,1
970 IF [81]>55 [81]=-8
980 IF [84]>55 [84]=-8
990 LRUN1

SAVE3

COMMENT