キャラを追加、消去する(キャラ数が流動的)
配列内データの操作





乱数でキャラ発生して画面端まで来ると消去させるプログラムです

本体に同梱されています。
"smp_cara.bas"

100 circle(7,7),7,col(9)
100 circle(7,7),7,col(9)
110 get@(0,0),16,16,(0,0)
120 sp_def 0,(0,0),16,16
130 dim cx(100),cy(100),cmx(100),cmy(100),cpt(100)
140 ec=0:cls 3    ecはキャラ数、0個でスタート
150 for i=1 to ec    ecが0の時はループはスキップされる
160 sp_put i
170 cx(i)+=cmx(i)
180 if sp_out(i) then kn=i:i-=1:gosub ckill: :continue
  右にはみ出したキャラを消す
  knに現在の番号iを代入してckill:を呼び出す
  戻ると現在の番号iに一番後ろだった未処理のものが入るので
  iを1引いてcontinueでもう一度同じ番号を処理をさせる
  (nextまたはcontinueで+1されるので±0で次ループが再び同じ番号になる)

190 next
200 if rnd(1)<0.2 and ec<100 then ec+=1:nn=ec:gosub cmake:
  乱数の一定確率でキャラ発生(最大数100に制限)
  ecを1足してnnに代入、cmake:を呼ぶ

210 vsync
220 goto 150
230 '
  キャラ追加処理
  新番号nn(最後尾ecに1足した場所)に座標と移動方向、パターンをセットする

240 cmake:
250 cx(nn)=0:cy(nn)=int(rnd(1)*400)
260 cmx(nn)=int(rnd(1)*4)+1:cmy(nn)=0:cpt(nn)=0
270 sp_on nn,1    追加のスプライトを表示ONにする
280 sp_put nn,(cx(nn),cy(nn)),cpt(nn)   表示と変数の割り当て
290 return
300 '
  キャラ削除処理
  kn(iの値、現在の位置)にec(一番後ろのキャラ)を入れ替える

310 ckill:
320 cx(kn)=cx(ec):cy(kn)=cy(ec)
330 cmx(kn)=cmx(ec):cmy(kn)=cmy(ec)
340 cpt(kn)=cpt(ec)
350 sp_swap kn,ec
  スプライトも丸ごと入れ替える(これで表示だけでなく衝突判定データも入れ替わる)
360 sp_on ec,0    最後に一番後ろのスプライトを表示OFFにして
370 ec-=1    ecの値を1減らす
380 return