|  | # Import the pygame library and initialise the game engine
import pygame
import numpy as np
from verlet import Ball, Spring
pygame.init()
# Initialize Pygame
SIZE = (800, 800)
WHITE = (255, 255, 255)
screen = pygame.display.set_mode(SIZE)
pygame.display.set_caption("Patrick")
running = True
clock = pygame.time.Clock()
data = []
def physics():
    for ball in balls:
        ball.update()
    for spring in springs:
        spring.update()
def draw():
    for ball in balls:
        ball.render(screen)
    for spring in springs:
        spring.render(screen)
def boost():
    vector = springs[0].b.pos - springs[0].a.pos
    length = springs[0].compute_length()
    vector /= length
    norm = np.array([vector[1], -vector[0]])
    balls[1].velocity += norm * .5
def modulate():
    x = pygame.mouse.get_pos()[0] 
    fraction = x / SIZE[0]
    springs[-1].k = fraction*3 + 0.05
    springs[-2].k = fraction*3 + 0.05
    pygame.draw.rect(screen, (30, 30, 30), (0, 0, x, SIZE[1]))
if __name__ == '__main__':
    balls = [Ball(0., 0., fixed=True),
             Ball(0., 100.),
             Ball(20., 120.),
             Ball(-20., 120.),
             Ball(0., 80.),
             Ball(40., 100.),
             Ball(-40., 100.)]
    springs = [
        Spring(balls[0], balls[1], length=100, k=3),
        Spring(balls[1], balls[2], k=5),
        Spring(balls[1], balls[3], k=5),
        Spring(balls[2], balls[3], k=5),
        Spring(balls[1], balls[4], k=5),
        Spring(balls[2], balls[4], k=5),
        Spring(balls[3], balls[4], k=5),
        Spring(balls[3], balls[5], k=.1, color=(255, 0, 0)),
        Spring(balls[2], balls[6], k=.1, color=(255, 0, 0))
    ]
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
        screen.fill((0, 0, 0))
        physics()
        physics()
        boost()
        modulate()
        draw()
        pygame.display.flip()
        clock.tick(60)
    pygame.quit()
 |