Drive Cars Down A Hill Script < DIRECT • REPORT >
pygame.display.flip() clock.tick(60)
# Hill (static line segments) hill_points = [(50, 500), (150, 450), (250, 380), (350, 340), (450, 330), (550, 350), (650, 400), (750, 480)]
def drive_force(self): # Apply force along car's forward direction angle = self.body.angle force_magnitude = 20000 force = (force_magnitude * pygame.math.Vector2(1, 0).rotate_rad(angle).x, force_magnitude * pygame.math.Vector2(1, 0).rotate_rad(angle).y) self.body.apply_force_at_local_point(force, (0, 0)) drive cars down a hill script
# Car class class Car: def __init__(self, x, y): self.body = pymunk.Body(10, pymunk.moment_for_box(10, (30, 20))) self.body.position = x, y self.shape = pymunk.Poly.create_box(self.body, (30, 20)) self.shape.friction = 0.7 self.shape.elasticity = 0.4 space.add(self.body, self.shape) self.color = (random.randint(50, 255), random.randint(50, 255), random.randint(50, 255))
for i in range(len(hill_points)-1): segment = pymunk.Segment(space.static_body, hill_points[i], hill_points[i+1], 2) segment.friction = 0.8 segment.elasticity = 0.5 space.add(segment) pygame
# Create cars cars = [Car(80, 480), Car(120, 460), Car(160, 435)]
def draw(self, screen): # Rotate car shape points = self.shape.get_vertices() rotated = [p.rotated(self.body.angle) + self.body.position for p in points] pygame.draw.polygon(screen, self.color, [tuple(p) for p in rotated]) force_magnitude * pygame.math.Vector2(1
import pymunk import pymunk.pygame_util import pygame import sys import random