1. They appear to make sense.
2. I don't have a degree in computer science (although I should get one soon) and I managed it.
3. My code is not DBPro specific I don't think.
Here's some sample code. Camera is rotated using the mouse, thrust is applied using the left and right mouse buttons to produce forward and reverse thrust respectively. There is friction applied, simply because I don't know how you want to limit the velocity. Strafe around the xy plane using wasd. Fire using the middle mouse button (button value 4), which fires spheres at a relative velocity to the camera's movement. I assumed you wanted full 3d motion, so I took ages to work out the polar velocity equations. It's commented and is a full program for your copy 'n' paste pleasure. Written in DBPro, but also works in DBv1.x. Enjoy.
rem Space Flight Code, by The Darthster!
rem Initialisation
sync on
sync rate 30
hide mouse
autocam off
rem Make a terrain to fly over
make matrix 1,10000,10000,50,50
rem Set up initial positions and angles
x#=5000
y#=200
z#=5000
theta#=0
phi#=0
thruststep#=0.1
rem Set up bullets
dim shot#(10,10)
for i=0 to 9
make object sphere i+1,5
next i
do
rem Mouseclicks control speed
if mouseclick()=1 then thrust#=thrust#+thruststep#
if mouseclick()=2 then thrust#=thrust#-thruststep#
if keystate(17)=1 then yaxisstrafe#=yaxisstrafe#-thruststep#
if keystate(30)=1 then xaxisstrafe#=xaxisstrafe#-thruststep#
if keystate(31)=1 then yaxisstrafe#=yaxisstrafe#+thruststep#
if keystate(32)=1 then xaxisstrafe#=xaxisstrafe#+thruststep#
rem Shooting
rem Putting in a firing delay
if mouseclick()=4 and shotrecently#=0
shotrecently#=4
for i=0 to 9
rem If the bullet is 'dead' then create a new one
if shot#(i,0)=0
rem Alive
shot#(i,0)=1
rem Current position
shot#(i,1)=x#
shot#(i,2)=y#
shot#(i,3)=z#
rem Current velocities plus velocities provided by the gun
shot#(i,4)=xvel#+(sin(theta#)*cos(phi#)*20)
shot#(i,5)=yvel#-(sin(phi#)*20)
shot#(i,6)=zvel#+(cos(theta#)*cos(phi#)*20)
rem Angle
shot#(i,7)=theta#
shot#(i,8)=phi#
rem Life
shot#(i,9)=30
show object i+1
exit
endif
next i
endif
if shotrecently#>0 then shotrecently#=shotrecently#-1
rem Update the bullets
for i=0 to 9
rem If the bullet is 'alive' then move it by it's velocity
if shot#(i,0)=1
shot#(i,1)=shot#(i,1)+shot#(i,4)
shot#(i,2)=shot#(i,2)+shot#(i,5)
shot#(i,3)=shot#(i,3)+shot#(i,6)
position object i+1,shot#(i,1),shot#(i,2),shot#(i,3)
shot#(i,9)=shot#(i,9)-1
rem If it's just run out of 'life' then 'kill' it and make
rem it available for use again
if shot#(i,9)=0
hide object i+1
shot#(i,0)=0
endif
endif
next i
rem Mouse movements control angles
theta#=wrapvalue(theta#+mousemovex())
phi#=wrapvalue(phi#+mousemovey())
rem Decay the thrust so you don't go really fast
thrust#=thrust#*0.9
xaxisstrafe#=xaxisstrafe#*0.9
yaxisstrafe#=yaxisstrafe#*0.9
rem Accelerate the velocities (this took ages to work out)
xvel#=xvel#+(sin(theta#)*cos(phi#)*thrust#)
yvel#=yvel#-(sin(phi#)*thrust#)
zvel#=zvel#+(cos(theta#)*cos(phi#)*thrust#)
xvel#=xvel#+(sin(theta#+90)*xaxisstrafe#)
zvel#=zvel#+(cos(theta#+90)*xaxisstrafe#)
xvel#=xvel#+(sin(theta#)*cos(phi#+90)*yaxisstrafe#)
yvel#=yvel#-(sin(phi#+90)*yaxisstrafe#)
zvel#=zvel#+(cos(theta#)*cos(phi#+90)*yaxisstrafe#)
rem Some friction to stop you going too fast
xvel#=xvel#*0.99
yvel#=yvel#*0.99
zvel#=zvel#*0.99
rem Simple velocity
x#=x#+xvel#
y#=y#+yvel#
z#=z#+zvel#
rem Screen display
text 0,0,"X velocity:"
text 0,20,"Y velocity:"
text 0,40,"Z velocity:"
text 0,60,"Theta:"
text 0,80,"Phi:"
text 0,100,"Thrust:"
text 100,0,str$(xvel#)
text 100,20,str$(yvel#)
text 100,40,str$(zvel#)
text 100,60,str$(theta#)
text 100,80,str$(phi#)
text 100,100,str$(thrust#)
rem Rotate and position the camera
position camera x#,y#,z#
yrotate camera theta#
xrotate camera phi#
sync
loop