一応作りましたがやりたいことと違っていたらすみません。
http://hspdev-wiki.net/?%C4%C9%C0%D7%C3%C6
ここのプログラムを少しいじっただけですが
旋回角度を決めることでゲームらしく動くことができます。
cx=0 :cy=0
#module
#deffunc plot int radius, int x, int y
circle x-radius, y-radius, x+radius, y+radius
return
#global
#const RADIUS 8
#const PI 3.1415926535897932384
#const MISSILE_MAX 3 //敵の弾の数
#const TURN_MAX 0.1 //敵の弾の最大旋回角度
#const MISSILE_LIFE 1 //敵の弾の寿命(このプログラムでは無効)
#const MISSILE_SPEED 5 //敵の弾の速さ
randomize
dim MissileX, MISSILE_MAX
dim MissileY, MISSILE_MAX
dim MissileLife, MISSILE_MAX
dim MissileSpeed, MISSILE_MAX
ddim MissileDirection, MISSILE_MAX
repeat MISSILE_MAX
gosub *make_missile
loop
*main//メインループ
redraw 0
gosub *clear
gosub *move_missile
gosub *plot_chara
gosub *plot_missile
redraw 1
await 8
goto *main
*clear// 画面を初期化する
color 255, 255, 255
boxf
return
*make_missile//敵の弾を作る
repeat MISSILE_MAX
if MissileLife(cnt)>0 : continue
MissileX(cnt) = rnd(ginfo_winx)
MissileY(cnt) = rnd(ginfo_winy)
MissileLife(cnt) = MISSILE_LIFE
MissileSpeed(cnt) = MISSILE_SPEED
MissileDirection(cnt) = atan(cy-MissileY(cnt), cx-MissileX(cnt))
break
loop
return
*move_missile//敵の弾を動かす
repeat MISSILE_MAX
turn = atan(cy-MissileY(cnt), cx-MissileX(cnt))-MissileDirection(cnt)
if turn> PI : turn -= PI*2
if turn<-PI : turn += PI*2
direction = limitf(turn, -TURN_MAX, TURN_MAX)+MissileDirection(cnt)
if direction> PI : direction -= PI*2
if direction<-PI : direction += PI*2
MissileX(cnt) += cos(direction)*MissileSpeed(cnt)
MissileY(cnt) += sin(direction)*MissileSpeed(cnt)
MissileDirection(cnt) = direction
loop
return
*plot_chara//ターゲットの弾を描画
color 0,0,255
cx=cx+2 :cy=cy+2
plot RADIUS,cx,cy
return
*plot_missile//全ての弾を描画
color 255,128,0
repeat MISSILE_MAX
plot RADIUS, MissileX(cnt), MissileY(cnt)
loop
return