キャラを追加、消去する(キャラ数が流動的)
配列内データの操作
乱数でキャラ発生して画面端まで来ると消去させるプログラムです
本体に同梱されています。
"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