Code archives/3D Graphics - Misc/Kanonensimulation
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Eine einfache Kanonensimulation, würde mich über Ergänzungen freuen! a simple canonsimulation, feel free to modify the code! | |||||
AppTitle "Kanonensimulation VER 3.4"
;Tasten W,A,D,S und SPACE für die lenkung der Kanone
;Tasten 1,2 für die Windrichtung
;Tasten 4,5 für die Winstärke
;Maus zum Bewegen der Kamera
Graphics3D 1024,768
SetBuffer BackBuffer()
Global KamAP = CreatePivot()
Global KamRP = CreatePivot(KamAP)
EntityRadius KamAP,1.6
Global Kamera = CreateCamera(KamRP)
PositionEntity Kamera,0,7,0
PositionEntity KamAP,10,0,-5
Licht=CreateLight()
RotateEntity Licht,90,0,0
pivot=CreatePivot()
z_cam=CreateCamera( pivot )
CameraViewport z_cam,700,0,200,130
PositionEntity z_cam,0,5,0
RotateEntity z_cam,30,90,0
Global Poscamx#=0
Wind=CreateCone()
PositionEntity wind,0,10,0
ScaleEntity wind,2,8,2
RotateEntity wind,90,0,0
EntityColor wind, 50,50,200
EntityAlpha wind,.5
;Kanone=LoadMesh("data/kanone.3ds")
Kanone=CreateCube()
PositionEntity kanone,0,0,0
RotateEntity kanone ,0,0,0
ScaleEntity kanone,.9,.2,.2
Kugel=CreateSphere()
EntityColor kugel,150,100,100
PositionEntity kugel,0,0,0
ScaleEntity kugel,.1,.1,.1
RotateEntity kugel,0,0,0
EntityBlend kugel,.5
grid_tex=CreateTexture( 16,16,8 )
ScaleTexture grid_tex,5,5
SetBuffer TextureBuffer( grid_tex )
Color 0,0,64:Rect 0,0,16,16
Color 0,0,128:Rect 0,0,16,16,False
grid_plane=CreatePlane()
EntityTexture grid_plane,grid_tex
EntityBlend grid_plane,1
EntityAlpha grid_plane,.65
EntityFX grid_plane,1
PositionEntity grid_plane,0,-3,0
mirror=CreateMirror()
PositionEntity mirror,0,-3,0 terra_detail=1000
Global posx# = 0
Global posy# = 0
Global posz# = 0
Global opx# = 0
Global opy# = 0
Global opz# = 0
windri = 10
windst# = 1
kanwink = 45
s# = 0
While Not KeyDown( 1 )
If KeyDown(2) Then windri = windri + 1
If KeyDown(3) Then windri = windri - 1
If windri < 0 Then windri = 360
If windri > 360 Then windri = 0
If KeyDown(5) Then windst# = windst# - .1
If KeyDown(6) Then windst# = windst# + .1
If windst# < .1 Then windst# = 0
If windst# > 12 Then windst# = 12
RotateEntity wind,90,0,windri+90
If KeyDown(17) Then kanwink = kanwink + 1
If KeyDown(31) Then kanwink = kanwink - 1
If kanwink < 2 Then kanwink = 2
If kanwink > 80 Then kanwink = 80
If KeyDown(30) Then kanrich = kanrich + 1
If KeyDown(32) Then kanrich = kanrich - 1
If kanrich < -80 Then kanrich = -80
If kanrich > 80 Then kanrich = 80
If KeyDown(57) Then
Repeat
s#=s#+.02 ; Berechnungsinterval
Ges#=2 ; Geschoßgewicht
ladung#=2 ; Pulvermenge
f#=ladung#*130 ; Kraft in Newton bei der Zündung
g#=Ges# * (9.81*(s#^2)) ; Gravitation
Fkx#=(Cos(kanwink)*f#)/100
Fky#=(Sin(kanwink)*f#-g#)/100
fkz#=(Cos(kanwink)*f#)/100
opx# = posx# : opy# = posy# : opz# = posz#
posx# = posx# + Cos(kanrich)*FKx# - ((Cos(windri)/10)*windst#/5)
posy# = posy# + FKy#
posz# = posz# + Sin(kanrich)*FKz# - ((Sin(windri)/10)*windst#/5)
PositionEntity kugel,posx#,posy#,posz#
PositionEntity z_cam,posx#,posy#,posz#
spur (opx#,opy#,opz#)
UpdateScene()
RenderWorld
Flip
Color 200,50,50
Locate 60,10 : Write "Winkel:" : Print kanwink: Locate 200,10 : Write "Richtung:" : Print kanrich
Locate 60,20 : Write "windrichtung:" : Print windri: Locate 200,20 :Write "Windstärke" : Print windst#
Locate 60,30 : Write "x:" : Print posx#:
Locate 60,40 :Write "y:": Print posy#:
Locate 60,50 :Write "z:": Print posz#
If posy# < -1.1 Then explosion
Until posy# < -1.2 Or KeyHit(1)
Mesh = 0
posx# = 0
posy# = 0
posz# = 0
f# = 2
s# = 0
EndIf
RotateEntity kanone,0,kanrich,kanwink
PositionEntity kugel,posx#,posy#,posz#
UpdateScene()
RenderWorld
Flip
Color 200,50,50
Locate 60,10 : Write "Winkel:" : Print kanwink: Locate 200,10 : Write "Richtung:" : Print kanrich
Locate 60,20 : Write "windrichtung:" : Print windri: Locate 200,20 :Write "Windstärke" : Print windst#
Locate 60,30 : Write "x:" : Print posx#:
Locate 60,40 :Write "y:": Print posy#:
Locate 60,50 :Write "z:": Print posz#
Wend
End
Function UpdateScene() ;Dieser Part stammt von Rob Hutchinson
mXs# = MouseXSpeed()
mYs# = MouseYSpeed()
TurnEntity KamAP,0,-(mXs#/3),0,True
TurnEntity Kamera,(mYs#/3),0,0
If KeyDown(203) Then MoveEntity KamAP,-.2,0,0
If KeyDown(205) Then MoveEntity KamAP,.2,0,0
If KeyDown(200) Then MoveEntity KamAP,0,0,.5
If KeyDown(208) Then MoveEntity KamAP,0,0,-.5
If KeyDown(16) Then MoveEntity KamAP,0,1,0
If KeyDown(44) Then MoveEntity KamAP,0,-1,0
If MouseDown(1) Then MoveEntity KamAP,0,0,2
If MouseDown(2) Then MoveEntity KamAP,0,0,-2
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
End Function
Function explosion()
ex=CreateSphere()
PositionEntity ex,posx#,posy#,posz#
radius=100:al#=1
EntityFX ex,.5
For t =1 To radius-1 Step 5
ScaleEntity ex,t,t,t
EntityColor ex,150+t,100,100
al#=al#-.05
EntityAlpha ex,al#
RenderWorld
Flip
Next
Delay 10
For z= 100 To 0
EntityColor ex,150-z,z,z
RenderWorld
Flip
Next
FreeEntity ex
mark=CreateSphere()
PositionEntity mark,posx#,0,posz#
EntityColor Mark,10,200,10
EntityAlpha mark,.8
End Function
Function spur(x1#,y1#,z1#)
box=CreateCube()
PositionEntity box,x1#,y1#,z1#
ScaleEntity box,.05,.05,.05
EntityColor box,10,210,10
End Function |
Comments
| ||
| that's really great, I badly needed such a ballistic thing for my battleships... Thanxalot MErren!!! |
Code Archives Forum