# universe.py

Below is the syntax highlighted version of universe.py from §3.4 Case Study: N-Body Simulation.

```#-----------------------------------------------------------------------
# universe.py
#-----------------------------------------------------------------------

import sys
import stdarray
import stddraw
from body import Body
from instream import InStream
from vector import Vector

#-----------------------------------------------------------------------

class Universe:

# Construct a new Universe object by reading a description
# from the file whose name is filename.

def __init__(self, filename):
instream = InStream(filename)
self._bodies = stdarray.create1D(n)
for i in range(n):
r = Vector([rx, ry])
v = Vector([vx, vy])
self._bodies[i] = Body(r, v, mass)

# Simulate the passing of dt seconds in self.

def increaseTime(self, dt):

# Initialize the forces to zero.
n = len(self._bodies)
f = stdarray.create1D(n, Vector([0, 0]))

# Compute the forces.
for i in range(n):
for j in range(n):
if i != j:
bodyi = self._bodies[i]
bodyj = self._bodies[j]
f[i] = f[i] + bodyi.forceFrom(bodyj)

# Move the bodies.
for i in range(n):
self._bodies[i].move(f[i], dt)

# Draw self to standard draw.
def draw(self):
for body in self._bodies:
body.draw()

#-----------------------------------------------------------------------

# Accept a string filename and a float dt as command-line arguments.
# Simulate the motion in the universe defined by the contents of
# the file with the given filename, increasing time at the rate
# specified by dt.

def main():
filename = sys.argv[1]
dt = float(sys.argv[2])
universe = Universe(filename)
while True:
universe.increaseTime(dt)
stddraw.clear()
universe.draw()
stddraw.show(10)

if __name__ == '__main__':
main()

#-----------------------------------------------------------------------

# python universe.py 2bodyTiny.txt 20000

# python universe.py 2body.txt 20000

# python universe.py 3body.txt 20000

# python universe.py 4body.txt 20000

```