Exemple #1
0
 def __init__(self):
     sides = randint(5,9)
     vs = [vectors.to_cartesian((uniform(0.5,1.0), 2 * pi * i / sides))
             for i in range(0,sides)]
     super().__init__(vs)
     self.vx = uniform(-1,1)
     self.vy = uniform(-1,1)
     self.angular_velocity = uniform(-pi/2,pi/2)
def main(asteroids=default_asteroids):

    pygame.init()

    screen = pygame.display.set_mode([width, height])

    pygame.display.set_caption("Asteroids!")

    done = False
    clock = pygame.time.Clock()

    if trajectory_mode:
        screen.fill(WHITE)
        draw_grid(screen)

    since_last_trajectory_frame = trajectory_frame

    while not done:

        clock.tick()

        for event in pygame.event.get():  # User did something
            if event.type == pygame.QUIT:  # If user clicked close
                done = True  # Flag that we are done so we exit this loop

        # UPDATE THE GAME STATE

        milliseconds = clock.get_time()
        keys = pygame.key.get_pressed()

        if keys[pygame.K_LEFT]:
            ship.rotation_angle += milliseconds * (2 * pi / 1000)

        if keys[pygame.K_RIGHT]:
            ship.rotation_angle -= milliseconds * (2 * pi / 1000)

        for ast in asteroids:
            ast.move(milliseconds, (0, 0), gravity_sources=black_holes)

        for bh in black_holes:
            others = [other for other in black_holes if other != bh]
            bh.move(milliseconds, (0, 0), others)

        ship_thrust_vector = (0, 0)

        if keys[pygame.K_UP]:
            ship_thrust_vector = vectors.to_cartesian(
                (thrust, ship.rotation_angle))

        elif keys[pygame.K_DOWN]:
            ship_thrust_vector = vectors.to_cartesian(
                (-thrust, ship.rotation_angle))

        ship.move(milliseconds, ship_thrust_vector, black_holes)

        laser = ship.laser_segment()

        # DRAW THE SCENE

        if not trajectory_mode:
            screen.fill(WHITE)
            draw_grid(screen)

        if keys[pygame.K_SPACE]:
            draw_segment(screen, *laser)

        since_last_trajectory_frame += milliseconds
        if not trajectory_mode or since_last_trajectory_frame >= trajectory_frame:

            draw_poly(screen, ship)
            since_last_trajectory_frame = 0

            for bh in black_holes:
                draw_poly(screen, bh, fill=True)

            for asteroid in asteroids:
                if keys[pygame.K_SPACE] and asteroid.does_intersect(laser):
                    asteroids.remove(asteroid)
                else:
                    draw_poly(screen, asteroid, color=GREEN)

        pygame.display.flip()

    pygame.quit()
Exemple #3
0
def rotate2d(angle, vector):
    l, a = to_polar(vector)
    return to_cartesian((l, a+angle))
 def __init__(self, gravity):
     vs = [
         vectors.to_cartesian((0.5, 2 * pi * i / 20)) for i in range(0, 20)
     ]
     super().__init__(vs)
     self.gravity = gravity