移動 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 '