【内容】
ロケットマンが敵の地下基地に潜入して進んで行く横スクロールゲームです。昔からよくあるおなじみの空中制御する避けゲーなのですが、キャラクターパターンを増やしていて軌跡がちょっときれいなのが見て欲しい所です。
【遊び方】
プログラムは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)
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
はー、おもしろ! キャラクタをうまい位置に持ってくるための力加減が絶妙に難しくて、何度もやってしまいます。うまく壁を乗り越え、天井からの出っ張りをさけたときが快感!