Here's a little example, uses paste image - but could easily be changed to objects or sprites - thing with paste image is that you can avoid having to manage the residual media. Like if you use sprites, you'll have to delete or hide them, same with objects, but paste image is an instant thing. You could also paste a sprite - which is very handy if you decided to rotate the bullet sprite to suit the direction, allows for nicer bullet textures, rockets for instance.
`Bullet handling example
sync on : sync rate 0
`Make the bullet image
box 0,0,5,5,rgb(255, 128, 0),rgb(255, 0, 0),rgb(255, 128, 0),rgb(255, 0, 0)
get image 100,0,0,5,5
`Bullets array and globals
global bullet_count=255
global bullet_cur=0
Type Bulletype
x as float y as float
xs as float ys as float
state as byte
Endtype
Dim bullet(bullet_count) as bulletype
`Main Loop
do
cls
`Grab the mouse data
lastmb=mb
mb=mouseclick()
x=mousex()
y=mousey()
`Rotate the turret based on the system timer()
ang#=wrapvalue(timer()/3.6)
spd#=0.1
`Click mouse to fire bullet
if mb=1 and lastmb=0 then bullet_fireang(x,y,ang#,spd#)
`Draw an aim line
line x,y,x+sin(ang#)*10.0,y+cos(ang#)*10.0
bullet_update()
sync
loop
`Update each bullet if it's state is >0
Function bullet_update()
for b=0 to bullet_count
If bullet(b).state>0
inc bullet(b).x,bullet(b).xs
inc bullet(b).y,bullet(b).ys
if bullet(b).x>640 or bullet(b).x<0 then bullet(b).state=0
if bullet(b).y>480 or bullet(b).y<0 then bullet(b).state=0
paste image 100,bullet(b).x,bullet(b).y
endif
next b
Endfunction
`Fire a bullet at a specified angle and speed
Function bullet_fireang(x,y,ang#,spd#)
bullet(bullet_cur).x=x
bullet(bullet_cur).y=y
bullet(bullet_cur).xs=sin(ang#)*spd#
bullet(bullet_cur).ys=cos(ang#)*spd#
bullet(bullet_cur).state=1
inc bullet_cur,1 : if bullet_cur>bullet_count then bullet_cur=0
Endfunction