Вот код:

Главный цикл:
Repeat
If KeyDown(203) ;поворот <-
pa#=pa#+1
End If
If KeyDown(205) ;поворот ->
pa#=pa#-1
End If
If KeyDown(200) ;вперед
xa1#=xa#
za1#=za#
xa#=xa#+g#*Cos(pa#+90)
za#=za#+g#*Sin(pa#+90)
If (xa#<-31)Or(xa#>31)Or(za#<-31)Or(za#>31)
xa#=xa1#
za#=za1#
EndIf
End If
If KeyDown(208) ;назад
xa1#=xa#
za1#=za#
xa#=xa#-g#*Cos(pa#+90)
za#=za#-g#*Sin(pa#+90)
If (xa#<-31)Or(xa#>31)Or(za#<-31)Or(za#>31)
xa#=xa1#
za#=za1#
EndIf
End If
If KeyDown(18) ;стрейф ->
xa1#=xa#
za1#=za#
xa#=xa#+g#*Cos(pa#)
za#=za#+g#*Sin(pa#)
If (xa#<-31)Or(xa#>31)Or(za#<-31)Or(za#>31)
xa#=xa1#
za#=za1#
EndIf
End If
If KeyDown(17) ;стрейф <-
xa1#=xa#
za1#=za#
xa#=xa#-g#*Cos(pa#)
za#=za#-g#*Sin(pa#)
If (xa#<-31)Or(xa#>31)Or(za#<-31)Or(za#>31)
xa#=xa1#
za#=za1#
EndIf
End If
If KeyHit(1) ;выход
Exit
End If
If n>=1
polet_igrok()
;Animate q,1,n/2,0,0
EndIf
If KeyHit(57) ;выстрел
If n=0 Then vistrel_igrok(xa#,za#,pa#)
End If
RotateEntity q,0,pa#+180,0
PositionEntity q,xa#,0,za#
RotateEntity c,90,pa#,0
PositionEntity c,xa#, 10,za# ; вид сверху
UpdateWorld
RenderWorld
Flip
Forever
Процедуры:
Type vi
Field x#,y#,p#
End Type
Global n=0
Global st1=CreateSphere(5)
HideEntity st1
EntityColor st1,255,255,255
ScaleEntity st1,0.15,0.15,0.15
Function vistrel_igrok(vix#,viy#,vip#)
st.vi=New vi
st\x#=vix#
st\y#=viy#
st\p#=vip#
PositionEntity st1,st\x#,1,st\y#
ShowEntity st1
n=1
End Function
Function polet_igrok()
For st.vi=Each vi
If n=20
Delete st
HideEntity st1
n=0
Else
n=n+1
st\x#=st\x#+5*g#*Cos(st\p#+90)
st\y#=st\y#+5*g#*Sin(st\p#+90)
PositionEntity st1,st\x#,1,st\y#
EndIf
Next
End Function
не понимаю, почему при нажатии вперед+пов_влево(+стрейф_любой) или назад+...+... - выстрела не происходит (if -> false(?!)) ... если кто знает, объясните пожалуйста... вперед+вправо(+ любой_стрейф) - работают прекрасно...