def _prepareGame(): ''' Sets up the environment of the game ''' global all_stars, all_planets, gamePanel, updateGUI #Initialize graphics max_loop = 0 while(len(all_stars)< NUMBER_OF_STARS): new_star_pos = Point3() if (len(all_stars)==0): new_star_pos = Point3(0,0,0) else: new_star_pos= Point3((random.random()-0.5)*UNIVERSE_SCALE, (random.random()-0.5)*UNIVERSE_SCALE, 0) # Given that the star is separated enough from its neighboring stars # we can add it to the solar system if _isSeparated(all_stars, new_star_pos, DEEP_SPACE_DISTANCE): star = Star(position = new_star_pos, radius = MAX_DEAD_STAR_RADIUS) #Add observer to star model star.attachObserver(updateGUI) all_stars.append(star) # Add planets to star prev_p = None radius = MAX_SOLAR_SYSTEM_RADIUS/MAX_NUMBER_OF_PLANETS while(star.getNumberOfPlanets() < MAX_NUMBER_OF_PLANETS): i = star.getNumberOfPlanets() angle = math.pi*2*random.random() radius += MIN_DISTANCE_BETWEEN_PLANETS + 3*random.random() planet = Planet(radius, angle, MAX_DEAD_PLANET_RADIUS, star) planet.parent_star = star planet.prev_planet = prev_p prev_p = planet planet.max_orbital_velocity = math.pow(MAX_PLANET_VELOCITY - (float(i)/MAX_NUMBER_OF_PLANETS) * (MAX_PLANET_VELOCITY - MIN_PLANET_VELOCITY), 2) planet.spin_velocity = 70 star.addPlanet(planet) all_planets.append(planet) for i, planet in enumerate(star.planets()): if i==0: continue planet.prev_planet.next_planet = planet #Safety check so that we don't loop forever without knowing why max_loop = max_loop + 1 if max_loop > 10*NUMBER_OF_STARS: raise Exception("Cannot add all stars based on the current parameters.")