Skip to content

Instantly share code, notes, and snippets.

@jsbueno
Created October 13, 2017 02:22
Show Gist options
  • Save jsbueno/2dcd690dc52ada45ee6cd926f4cd0200 to your computer and use it in GitHub Desktop.
Save jsbueno/2dcd690dc52ada45ee6cd926f4cd0200 to your computer and use it in GitHub Desktop.
Example of bauncing random balls with Pygame.
import random
import pygame
WIDTH, HEIGHT = 800, 600
class Ball(pygame.sprite.Sprite):
def __init__(self, diameter, color=None):
super().__init__()
self.diameter = diameter
self.color = color
if color is None:
color = tuple(random.randrange(0, 256) for _ in range(3))
self.rect = pygame.Rect(random.randrange(0, WIDTH), random.randrange(0, HEIGHT), diameter, diameter)
self.image = pygame.surface.Surface((diameter, diameter), pygame.SRCALPHA)
pygame.draw.ellipse(self.image, color, (0, 0, diameter, diameter))
phong = int(2 * diameter / 3 - diameter / 7)
pygame.draw.ellipse(self.image, (255,255,255), (phong, phong, diameter// 5, diameter // 5))
self.vx = random.randrange(0, 15,3)
self.vy = random.randrange(0, 15, 3)
def update(self):
self.rect.left += self.vx
self.rect.top += self.vy
if self.rect.left + self.diameter > WIDTH or self.rect.left < 0:
self.rect.left -= self.vx * 2
self.vx = -self.vx
if self.rect.top + self.diameter > HEIGHT or self.rect.top < 0:
self.rect.top -= self.vy * 2
self.vy = -self.vy
def init():
global screen
screen = pygame.display.set_mode((WIDTH, HEIGHT))
def main():
balls = pygame.sprite.OrderedUpdates()
while True:
pygame.event.pump()
keys = pygame.key.get_pressed()
if keys[pygame.K_ESCAPE]:
break
if keys[pygame.K_SPACE]:
balls.add(Ball(random.randrange(12, 64, 12)))
balls.update()
screen.fill((0, 0, 0))
balls.draw(screen)
pygame.display.flip()
pygame.time.delay(30)
try:
init()
main()
finally:
pygame.quit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment