一応 殴り書きだけど、サンプルも書いてみました。
僕自身初めて作って見たんで、無駄が多いかもしれないけど
考え方は合っていると思います。
マウスカーソルを目標に、レーザータイプとミサイルタイプが交互に発射されます。
違いが・・・わかるかな?
screen 0,320,240
sdim 煙chr,10
煙chr="●","◎","※","*","*","+","+","・","・","・"
ddim 煙A_X,20 :ddim 煙A_Y,20
ddim 煙B_X,20 :ddim 煙B_Y,20 :ddim 煙B_flg,20
*メイン
;##########################
repeat 20
煙A_X(cnt)=10.0 : 煙A_Y(cnt)=230.0; 弾位置初期化
loop
弾角度 = atan( mouseY-煙A_Y(0), mouseX-煙A_X(0)); マウス座標目掛け、角度設定
repeat 100; とりあえず弾の寿命を100ループに。
redraw 0:color 0,0,0:boxf 0,0,320,240
repeat 20; 尾の座標をスライドさせる。
煙A_X(20-cnt)=煙A_X(20-cnt-1) : 煙A_Y(20-cnt)=煙A_Y(20-cnt-1)
loop
煙A_X(0)=煙A_X(0)+cos( 弾角度 )*5 : 煙A_Y(0)=煙A_Y(0)+sin( 弾角度 )*5; 先頭の移動
repeat 10,1;-----------------------------
tmp=20-cnt*2; 先頭及び 尾の表示
pos 煙A_X(tmp),煙A_Y(tmp) : color 255-tmp*10,255-tmp*10,0
mes 煙chr(10-cnt)
loop;------------------------------------
redraw 1:await 10
loop
;########################## ↑ レーザータイプ
煙B_X(0)=310.0 : 煙B_Y(0)=230.0 : 煙B_flg(0)=9.0
煙B_cnt=0
弾角度 = atan( mouseY-煙B_Y(0), mouseX-煙B_X(0)); マウス座標目掛け、角度設定
repeat 100; とりあえず弾の寿命を100ループに。
redraw 0:color 0,0,0:boxf 0,0,320,240
煙B_cnt=煙B_cnt+1; 一定間隔で煙を発生させるためのカウンター
if 煙B_cnt=5 {
flg=0
repeat 19,1
if (flg=0)and(煙B_flg(cnt)<=0) {; 空いている煙を探し、発生させる。
煙B_X(cnt)=煙B_X(0) : 煙B_Y(cnt)=煙B_Y(0) : 煙B_flg(cnt)=9.0:flg=1
}
loop
煙B_cnt=0
}
repeat 19,1; 煙のアニメーションを進行させる。
if (煙B_flg(cnt)>0) :煙B_flg(cnt)=煙B_flg(cnt)-0.5
loop
煙B_X(0)=煙B_X(0)+cos( 弾角度 )*5 : 煙B_Y(0)=煙B_Y(0)+sin( 弾角度 )*5; 先頭の移動
repeat 20,1;-----------------------------
tmp=20-cnt; 先頭及び 尾の表示
if 煙B_flg(tmp)>0{
tmp2=9-int(煙B_flg(tmp))
pos 煙B_X(tmp),煙B_Y(tmp) : color 255-tmp2*10,255-tmp2*10,0
mes 煙chr(tmp2)
}
loop;-----------------------------
redraw 1:await 10
loop
;########################## ↑ ミサイルタイプ
goto *メイン