Code:
Public Class Form1
Dim amt, a, b, c, d, time, wait As Integer
Dim acctemp, dt As Double
Dim p(0 To 4, 0 To 1, 0 To 1), v(0 To 4, 0 To 1), m(0 To 4), rad(0 To 4) As Double
Dim Crash As Boolean
Dim gr As Graphics = CreateGraphics()
Const G = 6.67 * 10 ^ -11
Dim Draw As Boolean
Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
If Me.Draw Then
CreatePlanets(100, 100, 200, 200, 300, 300, 0, 0, 0, 0, -0.2, 0.2, 0.3, -0.2, 0, 0, 0, 0, 0, 0, 100000000000, 100000000000, 1000000000, 0, 0, 10, 20, 30, 0, 0)
Me.Draw = False
End If
End Sub
Private Sub CreatePlanets(ByVal p00, ByVal p01, ByVal p10, ByVal p11, ByVal p20, ByVal p21, ByVal p30, ByVal p31, ByVal p40, ByVal p41, ByVal v00, ByVal v01, ByVal v10, ByVal v11, ByVal v20, ByVal v21, ByVal v30, ByVal v31, ByVal v40, ByVal v41, ByVal m0, ByVal m1, ByVal m2, ByVal m3, ByVal m4, ByVal r0, ByVal r1, ByVal r2, ByVal r3, ByVal r4)
amt = 3
dt = 3
Crash = False
p(0, 0, 0) = p00
p(0, 1, 0) = p01
p(1, 0, 0) = p10
p(1, 1, 0) = p11
p(2, 0, 0) = p20
p(2, 1, 0) = p21
p(3, 0, 0) = p30
p(3, 1, 0) = p31
p(4, 0, 0) = p40
p(4, 1, 0) = p41
v(0, 0) = v00
v(0, 1) = v01
v(1, 0) = v10
v(1, 1) = v11
v(2, 0) = v20
v(2, 1) = v21
v(3, 0) = v30
v(3, 1) = v31
v(4, 0) = v40
v(4, 1) = v41
m(0) = m0
m(1) = m1
m(2) = m2
m(3) = m3
m(4) = m4
rad(0) = r0
rad(1) = r1
rad(2) = r2
rad(3) = r3
rad(4) = r4
For time = 0 To 1000
For a = 0 To amt - 1
For b = 0 To 1
For c = 0 To amt - 2
acctemp = acctemp + G * (m((a + c + 1) Mod amt) * (p((a + c + 1) Mod amt, b, 0) - p(a, b, 0))) / ((p(a, 0, 0) - p((a + c + 1) Mod amt, 0, 0)) ^ 2 + (p(a, 1, 0) - p((a + c + 1) Mod amt, 1, 0)) ^ 2) ^ 1.5
If (((p(a, 0, 0) - p((a + c + 1) Mod amt, 0, 0)) ^ 2 + (p(a, 1, 0) - p((a + c + 1) Mod amt, 1, 0)) ^ 2) ^ 0.5 < (rad(a) + rad((a + c + 1) Mod amt))) Then
Crash = True
End If
gr.FillEllipse(Brushes.Black, CInt(p(a, 0, 0)), CInt(p(a, 1, 0)), CInt(rad(a)) * 2, CInt(rad(a) * 2))
gr.FillEllipse(Brushes.Black, CInt(p((a + c + 1) Mod amt, 0, 0)), CInt(p((a + c + 1) Mod amt, 1, 0)), CInt(rad((a + c + 1) Mod amt)) * 2, CInt(rad((a + c + 1) Mod amt)) * 2)
If Crash = True Then
p(a, 0, 1) = (p(a, 0, 1) * m(a) + p((a + c + 1) Mod amt, 0, 1) * m((a + c + 1) Mod amt)) / (m(a) + m((a + c + 1) Mod amt))
p(a, 1, 1) = (p(a, 1, 1) * m(a) + p((a + c + 1) Mod amt, 1, 1) * m((a + c + 1) Mod amt)) / (m(a) + m((a + c + 1) Mod amt))
v(a, 0) = (v(a, 0) * m(a) + v((a + c + 1) Mod amt, 0) * m((a + c + 1) Mod amt)) / (m(a) + m((a + c + 1) Mod amt))
v(a, 1) = (v(a, 1) * m(a) + v((a + c + 1) Mod amt, 1) * m((a + c + 1) Mod amt)) / (m(a) + m((a + c + 1) Mod amt))
m(a) = m(a) + m((a + c + 1) Mod amt)
m((a + c + 1) Mod amt) = 0
rad(a) = (rad(a) ^ 3 + rad((a + c + 1) Mod amt) ^ 3) ^ (1 / 3)
rad((a + c + 1) Mod amt) = 0
End If
Crash = False
Next
p(a, b, 1) = p(a, b, 0) + v(a, b) * dt + 0.5 * acctemp * dt ^ 2
v(a, b) = v(a, b) + acctemp * dt
acctemp = 0
Next
Next
For d = 0 To amt - 1
p(d, 0, 0) = p(d, 0, 1)
p(d, 1, 0) = p(d, 1, 1)
For wait = 0 To 100
gr.FillEllipse(Brushes.Red, CInt(p(d, 0, 0)), CInt(p(d, 1, 0)), CInt(rad(d)) * 2, CInt(rad(d)) * 2)
Next
Next
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Draw = True
Me.Refresh()
End Sub
End Class