移動
move
もう一度配置図を見てみます。
ここは一括処理でプログラムを短くしています。
最初の1から43までのforにして余白のvの部分はスキップします。(ループカウンタiを操作します)
そのスキップの場所と飛び先を示したデータが配列rd()です。
170行でrd()の偶数に各キャラのスタート位置をセットしています。<
br>160lc=0:ec=3:bc=19:dc=35
170rd(0)=lc:rd(2)=ec:rd(4)=bc:rd(6)=dc:rd(8)=43
700行で各キャラの現在の数(位置)+1を奇数位置にセットしています。<
br>700rd(1)=lc+1:rd(3)=ec+1:rd(5)=bc+1:rd(7)=dc+1
これを利用して先頭1から最後43までの一括forで(710行)
iが各キャラ種の最後(rd偶数で示す位置)までくると
次のキャラ種の先頭(rd奇数で示す位置)までスキップさせています。720行
720 if i>=
maxthenrc=rc+2:i=rd(rc):max=rd(rc+1):continue maxは現行キャラ種の最後尾が入ります
rcはキャラの種類を示し(どこの最後尾を削るか)、+2されて次のキャラへ移っています。
この一括処理がわかりにくい場合は種類の数だけforを記述する方法もあります。(表示部参照)
650 'move
自分キャラ0番は独立して移動処理
660 if
mvt>0 then gosub ctrl:
670 mx+=mmx-rx 移動先とスクロール方向rx,rxを加算
680 my+=mmy-ry
自弾、敵キャラ、敵弾、爆発を一括して処理
690rc=0:max=lc+1 <
br>700rd(1)=lc+1:rd(3)=ec+1:rd(5)=bc+1:rd(7)=dc+1 スキップ位置設定
710 for i=1 to 43
720 if i>=
maxthenrc=rc+2:i=rd(rc):max=rd(rc+1):continue キャラ種最後尾までくると次へスキップ
730 killf=0
740 on cag(i) gosub algo1,algo2,algo3,algo4
cag(i)が示す各アルゴリズム処理に飛んで移動量cmx(i),cmy(i)を取得します
750 if killf orsp_out(i)thenkn=i:max-=1:fn=max:i-=1:gosub
ckill: :continue
自己消去フラグkillfが立ってたり画面外に出た場合はキャラを消去します
knに現在のキャラ番号i、fnに現行キャラ種の最後尾maxを入れてckill:を呼ぶ
次ループで同一番号を処理するためiとmaxを1引く(中身は新たに最後尾だったものが入っている)
760 cx(i)+=cmx(i)-rx 移動先とスクロール方向rx,rxを加算
770
cy(i)+=cmy(i)-ry
780 next
乱数で敵を出現
790 if
rnd(1)<0.01andec<19thenec+=1:nn=ec:nx=irnd(2)*256-8:ny=16:na=irnd(2)+2:gosub cmake:
ecを+1してnnに代入、座標nx,nyとnaにキャラのアルゴリズム2(転がる玉)か3(浮遊)を乱数で選んでcmake:を呼ぶ
800 goto main: ループ
810 '