Guest User

Untitled

a guest
Jul 25th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Type Vector_2D
  2.     As Single X, Y
  3. End Type
  4.  
  5. Type Planet_t
  6.     As Planet_t Ptr nachPlanet
  7.     As Planet_t Ptr vorPlanet
  8.     As Vector_2D Pos, Vel, Scrn
  9.     As Single Mass
  10.     As Single Grav_Param
  11.     As Single Density
  12.     As Single Radius
  13.     As Integer Col
  14.     As UByte Life_State
  15.     As UInteger ID
  16. End Type
  17. '    gravity simulator by michael "h4tt3n" Nissen
  18. Dim As Vector_2D Dist, Scrn_Center
  19. Const Pi = 4*Atn(1), TwoPi = Pi*2, Gravity = 6.67e-11
  20. Dim As UByte Red, Grn, Blu
  21. Dim As Short a, b, FPS, FPS_Counter, Num_Planets, Num_Asteroids, num_moons
  22. Dim As Integer Screen_X, Screen_Y, Screen_Rate, Mouse_X, Mouse_Y, _
  23. Mouse_X_old, Mouse_Y_old, wheel, wheel_old, Mouse_Button, Mouse_Button_Old, _
  24. Screen_X_Mid, Screen_Y_Mid, Scroll_factor,lebende,tode
  25. Dim As Single Spawn_Angle, Spawn_Distance, Distance, Dist_Sqared, MinDist, _
  26. Vel_Mag, zoom_scale, zoom_scale_old, Inv_Zoom_Scale, Time_Scale, FPS_timer, _
  27. Scroll_Rate, Screen_Update
  28.  
  29. ''  screen settings
  30. 'ScreenInfo Screen_X, Screen_Y,,,,Screen_Rate
  31. 'screen_update = 1/screen_rate
  32. 'Screen_X_Mid = Screen_X\2
  33. 'Screen_Y_Mid = Screen_Y\2
  34. 'ScreenRes screen_x, screen_y, 16,,1 ', Screen_Rate
  35. 'Color RGB(32, 255, 32)
  36.  
  37.  
  38. ''  program settings
  39. Scroll_Factor = 400
  40. Zoom_Scale = 1/8
  41. Time_Scale = 10
  42. Num_Planets = 10
  43. Num_Asteroids = 1000'5000
  44. lebende =5000
  45. 'Dim As Planet_t Body(0 to Num_Planets+Num_Asteroids)
  46.  
  47. 'Option Explicit
  48. 'Randomize Timer
  49. 'CONST NIL = 0
  50.  
  51. Declare Sub MakePlanetStart(id As UInteger,mass As Single,gravpar As Single,dens As Single,radius As Single)
  52. Declare Sub MakePlanetEnde(id As UInteger,mass As Single,gravpar As Single,dens As Single,radius As Single)
  53. Declare Sub DeletePlanetStart( id As UInteger)
  54. Declare Sub DeletePlanetMitte( id As UInteger)
  55. Declare Sub DeletePlanetEnde( id As UInteger)
  56.  
  57. Dim Shared PlanetStart As Planet_t Ptr
  58. Dim Shared PlanetEnde As Planet_t Ptr
  59.  
  60.  
  61. Sub MakePlanetStart(id As UInteger,mass As Single,gravpar As Single,dens As Single,radius As Single)
  62.     If PlanetStart = 0 Then 'Falls die Liste leer ist: Anlegen!
  63.         PlanetStart = Allocate(SizeOf(Planet_t))
  64.         PlanetStart->vorPlanet = 0
  65.             PlanetStart->nachPlanet = 0                                                                                 '!!!
  66.         PlanetStart->Mass=mass
  67.         PlanetStart->Grav_Param=gravpar
  68.         PlanetStart->Density=dens
  69.         PlanetStart->Radius=radius
  70.             PlanetStart->ID=id
  71.         PlanetEnde=PlanetStart
  72.          
  73.     Else       '...falls nicht: Neues Element anlegen und
  74.                'Liste daran anhängen!
  75.         Dim Neu As Planet_t Ptr
  76.         Neu = Allocate(SizeOf(Planet_t))    'Speicher
  77.                                           'alloziieren
  78.         Neu->Mass=mass
  79.         Neu->Grav_Param=gravpar
  80.         Neu->Density=dens
  81.         Neu->Radius=radius
  82.             Neu->ID=id
  83.         Neu->vorPlanet = 0
  84.         Neu->nachPlanet = PlanetStart   'Ehem. Listenanfang als
  85.                                         '"Nächstes" definieren
  86.         PlanetStart->vorPlanet = Neu                                                                                        '!!!
  87.         PlanetStart = Neu                           'Listenanfang auf das neue Element
  88.                                                 'setzen
  89.     End If
  90. End Sub
  91.  
  92.  
  93. Sub MakePlanetEnde (id As UInteger,mass As Single,gravpar As Single,dens As Single,radius As Single)
  94.     If PlanetEnde = 0 Then 'Falls die Liste leer ist: Anlegen!
  95.         PlanetEnde = Allocate(SizeOf(Planet_t))
  96.             PlanetEnde->vorPlanet= 0                                                                                            '!!!
  97.         PlanetEnde->nachPlanet = 0
  98.         PlanetEnde->Mass=mass
  99.         PlanetEnde->Grav_Param=gravpar
  100.         PlanetEnde->Density=dens
  101.         PlanetEnde->Radius=radius
  102.           PlanetEnde->ID=id
  103.           PlanetStart=PlanetEnde
  104.     Else              '...falls nicht: Neues Element anlegen
  105.                       'und anhängen!
  106.         Dim Element As Planet_t Ptr
  107.         Dim Neu As Planet_t Ptr
  108.         Neu = Allocate(SizeOf(Planet_t))    'Speicher
  109.                                           'alloziieren
  110.         Neu->Mass=mass
  111.         Neu->Grav_Param=gravpar
  112.         Neu->Density=dens
  113.         Neu->Radius=radius
  114.         Neu->nachPlanet = 0
  115.         Neu->vorPlanet = PlanetEnde
  116.         PlanetEnde->nachPlanet = Neu                                                                                    '!!!
  117.           Neu->ID=id
  118.           PlanetEnde=Neu
  119.     End If
  120. End Sub
  121.  
  122.  
  123. Sub DeletePlanetStart (id As UInteger)
  124.     If PlanetStart = 0 Then
  125.         Print "Fehler: Die Liste ist leer!"
  126.         Exit Sub
  127.     End If
  128.     Dim Element As Planet_t Ptr
  129.  
  130.     Element = PlanetStart
  131.     While Element <> 0
  132.        
  133.            If Element->ID = id Then
  134.                     If Element = PlanetStart And Element = PlanetEnde Then
  135.                         PlanetStart = 0
  136.                         PlanetEnde = 0
  137.                     ElseIf Element = PlanetStart Then
  138.                         PlanetStart = Element->nachPlanet
  139.                     PlanetStart->vorPlanet = 0
  140.                 ElseIf Element = PlanetEnde Then
  141.                     PlanetEnde = Element->vorPlanet
  142.                     PlanetEnde->nachPlanet = 0
  143.                 Else
  144.                     Element->vorPlanet->nachPlanet = Element->nachPlanet
  145.                     Element->nachPlanet->vorPlanet = Element->vorPlanet
  146.                 EndIf
  147.                 DeAllocate Element
  148.                 Exit Sub
  149.             End If
  150.        
  151.         Element = Element->nachPlanet
  152.      
  153.     Wend
  154. End Sub
  155.  
  156.  
  157.  
  158. Sub DeletePlanetEnde (id As UInteger)
  159.     If PlanetEnde = 0 Then
  160.         Print "Fehler: Die Liste ist leer!"
  161.         Exit Sub
  162.     End If
  163.     Dim Element As Planet_t Ptr
  164.  
  165.     Element = PlanetEnde
  166.     While Element <> 0
  167.        
  168.            If Element->ID = id Then
  169.                     If Element = PlanetStart And Element = PlanetEnde Then
  170.                         PlanetStart = 0
  171.                         PlanetEnde = 0
  172.                     ElseIf Element = PlanetStart Then
  173.                     PlanetStart = Element->nachPlanet
  174.                     PlanetStart->vorPlanet = 0
  175.                 ElseIf Element = PlanetEnde Then
  176.                     PlanetEnde = Element->vorPlanet
  177.                     PlanetEnde->nachPlanet = 0
  178.                 Else
  179.                     Element->vorPlanet->nachPlanet = Element->nachPlanet
  180.                     Element->nachPlanet->vorPlanet = Element->vorPlanet
  181.                 EndIf
  182.                 DeAllocate Element
  183.                 Exit Sub
  184.             End If
  185.        
  186.         Element = Element->vorPlanet       
  187.     Wend
  188.    
  189. End Sub
  190.  
  191.  
  192. Sub ListeAusgeben()
  193.     If PlanetStart = 0 Then
  194.         Print "Fehler: Die Liste ist leer!"
  195.         Exit Sub
  196.     End If
  197.     Dim Element As Planet_t Ptr
  198.     Element = PlanetStart                        'Zeiger auf
  199.                                            'den Anfang setzen.
  200.     While Element <> 0
  201.         Print Element->ID
  202.         Element = Element->nachPlanet
  203.     Wend
  204. End Sub
  205.  
  206.  
  207.  
  208. For i As Integer=0 To 10
  209.     MakePlanetStart(i,0,0,0,0)
  210. Next
  211.  
  212. For i As Integer=10 To 20
  213.     MakePlanetEnde(i,0,0,0,0)
  214. Next
  215.  
  216. DeletePlanetEnde(2)
  217. DeletePlanetStart(7)
  218.  
  219. ListeAusgeben()
  220. Sleep
Add Comment
Please, Sign In to add comment