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

2022/12/12 22:55:28

MixJuice GET URL : kidspod.club/mj/2147

t/i

t/i

ロケットマン

【内容】
 ロケットマンが敵の地下基地に潜入して進んで行く横スクロールゲームです。昔からよくあるおなじみの空中制御する避けゲーなのですが、キャラクターパターンを増やしていて軌跡がちょっときれいなのが見て欲しい所です。


【遊び方】
 プログラムは2つあります。プログラム0と1に保存して、0の方から実行して下さい。画面は自動的に右に進んで行きます。スペースキーを押して噴射オン、離して噴射オフで、ロケットマンが上下に動きます。上下の動きには加速がつくので気をつけて下さい。進むにつれて段階的にスクロールスピードが速くなって行きます。壁や敵にぶつかるとゲームオーバーです。Enterキーを押して再スタートです。


【プログラムについて】
 ロケットマンの縦の動きを細かくするためにキャラクター2個にまたがる中間の絵を用意していて4ドット単位で上下移動できるようにしています。ロケットマンのY座標を10倍の値で計算して下1桁の値を小数点以下として見て0.5以上か未満かで表示する絵を選んでいます。そして状況によりキャラクター1個か2個かを判断して表示しています。
 通路は横の道と縦の道を交互に作っていて、上に来たら下へ、下に来たら上へと進むようにしています。そして画面がスクロールするごとに右端に縦1列ずつ表示しています。地形データの作成には、変数[48]〜[91]の保存場所を使っています。

<プログラム0>
20-30行目 初期設定
50-90行目 キャラクター定義
100-120行目 地形データ設定
130行目 プログラム1へ

<プログラム1>
300行目 煙表示、左スクロール
310行目 スペースキー入力
320行目 自機移動
330-350行目 自機の当たり判定
400-440行目 画面表示
500行目 ゲームオーバー判定
510行目 ビープ音、ウェイト
520行目 地形データ表示回数判定
600-630行目 地形データ作成
900-910行目 ゲームオーバー

<変数>
A 通路上端位置
B 通路下端位置
C 横通路位置
D 通路部分(空白)の長さ
G 通路作成方向(0:縦、1:横)
H 地形表示回数
I FORループ
K 加速度
L 通路幅(固定)
M 自機位置アドレス
N 自機状況(0:1個表示、1:2個表示、4:衝突、5:画面外)
P 自機キャラクター番号
Q 自機キャラクター表示(0:通常、2:半分ずれ)
S 距離
T 敵出現カウンター
U 敵出現頻度
V 矢印表示カウンター
W ウェイト
X 自機x座標(固定)
Y 自機y座標(*10倍)

[48]-[91] 地形データ作成用(#860-#8B7)

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

SOURCE CODE

NEW

10 'Roc-0
20 VIDEO1:CLS:CLV:CLP
30 A=8:C=A:G=1:H=2:L=8:X=15:V=31-X:T=31-X:U=32:M=#900+X:K=100:W=9
40 POKE#700,#3C,#62,#62,#3C,#DA,#19,#28,#50
50 COPY#710,#800,80:COPY#714,#700,8
60 POKE#720,#1E,#31,#31,#1E,#2D,#4D,#14,#28
70 POKE#728,#10,#30,#60,#70,#A0,#40,#80,#00
80 COPY#734,#720,8:POKE#73C,#10,#70,#60,#80
90 POKE#746,#14,#28,#14,#28:COPY#75A,#746,4
100 FORI=0TO31:POKE#880+I,16:NEXT
110 COPY#8A0,#880,24:COPY#8A0+C,#860,L
120 COPY#900,#880,12:COPY#914,#880,12:COPY#BE0,#880,32
130 LRUN1

SAVE0
NEW

200 'Roc-1
300 POKE M,232+Q:POKE M+32,233+Q:SCROLL3
310 IF BTN(32) N=1:P=228:K=K-155 ELSE N=0:P=224
320 Y=Y+K/10:Q=(Y%10>4)*2:N=N||Q:P=P+Q:K=K+98:M=#900+Y/10*32+X
330 IF(Y<0)|(Y>230) N=5:P=0
340 IF PEEK(M)<>0 N=4:P=244
350 IF(U=2)&(PEEK(M+32)<>0) N=4:P=244:M=M+32
400 IF N<5 POKE M,P:IF N=1 POKE M+32,P+1
410 FORI=0TO23:POKE#91F+I*32,PEEK(#8A0+I):NEXT
420 T=(T+1)%U:IF T=0 POKE#91F+(A+RND(D))*32,241:IF U>4 U=U-4
430 S=S+1:IF S%20=0 LCX+1,0:?S;:IF W>0 W=W-1:BEEP5,5
440 V=(V+1)%20:IF V=0 POKE#91F,225
500 IF N>3 GOTO900
510 BEEP(K+500)/2,5:WAIT W
520 H=H-1:IF H>0 GOTO300
600 G=G^1:COPY#8A0,#880,24
610 IF G=1 A=C:D=L:COPY#8A0+A,#860,D:H=2:GOTO300
620 IF C>8 A=RND(C-6)+1:B=C:C=A ELSE A=C:B=15-RND(10-A):C=B
630 D=B+L-A:H=8:COPY#8A0+A,#860,D:GOTO300
900 BEEP20,20:LC11,10:?"GAME OVER";:LC13,12:?S;"m";
910 IF INKEY()=10 LRUN0 ELSE CONT

SAVE1

COMMENT

Kidspod運営チーム
Kidspod運営チーム2022/12/28 20:04:28

はー、おもしろ! キャラクタをうまい位置に持ってくるための力加減が絶妙に難しくて、何度もやってしまいます。うまく壁を乗り越え、天井からの出っ張りをさけたときが快感!