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:34:41

MixJuice GET URL : kidspod.club/mj/2069

t/i

t/i

リンゴマン(IchigoCake用)

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

(ご注意)
 PanCake C のバージョン 1.2 だとスプライトが正しい順番で表示されません。1.2.1 にアップデートするか、1.2のままの場合は、40行目と650行目のスプライト番号を8から6に変更して下さい(リンゴマンの頭を体の上に表示するため)。

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

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


<プログラム>
20-230行目 初期設定(画面、スプライト、サウンド、変数など)
300行目 メインループの先頭
310-430行目 リンゴマンの操作、移動、ジャンプ
500-540行目 火の玉、敵、やられ敵の移動
600-710行目 スプライトの表示更新(位置、画像、向きなど)
800-850行目 火の玉、敵とのヒットチェック、リンゴマンの位置判定など
900-980行目 画面スクロール処理
990行目 メインループの先頭へ戻る
1000-1030行目 ゲームオーバー


<スプライト番号>
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

10 'Ringo-Man
20 VIDEO0:CLV:PC.RESET:PC.SSTART #15
30 FORI=0TO5:PC.SCREATE I,#5E:NEXT
40 PC.SCREATE 8,#1F
50 PC.SROTATE 9,2
60 PC.SCREATE 10,#59
70 PC.SCREATE 11,#3E
80 PC.SCREATE 12,#3E
90 FORI=0TO2:PC.SMOVE 13+I,#38+I*8,0:NEXT
100 PC.MSCORE 0,0,#12,"C~>>>G~"
110 PC.MSCORE 1,0,#12,"CDC~"
120 PC.MSCORE 2,0,#12,">GAC~~"
130 PC.MSCORE 3,0,#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
300 '
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.MPLAY 1,1
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.MPLAY 1,3
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
600 '
610 FORI=0TO2:PC.SMOVE I,C+I*8,D:PC.SMOVE I+3,E+I*8,F: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.SMOVE 7,X,Y-N:PC.SCREATE 7,P:PC.SFLIP 7,H
650 PC.SMOVE 8,X,Y-4-N:PC.SFLIP 8,!H
660 PC.SMOVE 9,V,Y+6:PC.SCREATE 9,#40+O
670 PC.SMOVE 10,[80],[81]
680 PC.SMOVE 11,[83],[84]-L>>2
690 PC.SMOVE 12,[86],[87]:PC.SROTATE 12,M
700 PC.SCREATE 13,#A6+R/100:PC.SCREATE 14,#A6+R/10%10:PC.SCREATE 15,#A6+R%10%10
800 '
810 IF((X-[80])*(X-[80])+(Y-[81])*(Y-[81])<64) J=2:Q=-750:PC.MPLAY 1,2:[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 GOTO1000 ELSE U=1:PC.MPLAY 1,0:[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 GOTO1000
850 WAIT S:IF G=0 GOTO300
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.MPLAY 1,3
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 GOTO300
1000 '
1010 PC.MSCORE 3,1,#12,"<GFEDC~~":VIDEO1:CLS
1020 ?"Game Over":?:?"Result:";R;"m":?:?"Push [Enter]"
1030 IF INKEY()=10 RUN ELSE CONT

COMMENT

Kidspod運営チーム
Kidspod運営チーム2021/05/06 14:38:00

これは楽しい! スクロールも滑らかで、まさしくアクションゲーム。火の玉を取るタイミングが勝負所ですね。足場が見えていないのに取ってしまうとどこにも降りれない、かといって待ちすぎるとスクロールに追いつかれる……。ガイコツもいるのでなかなかの難易度。それだけに何度も挑戦したくなります。