-
-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathdraw-shapes.py
139 lines (106 loc) · 3.62 KB
/
draw-shapes.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import os
import random
import sys
import pygame
from pygame.locals import *
class Shape(object):
def __init__(self, color):
self.color = color
def draw(self, surface):
raise NotImplementedError('Not implemented')
@staticmethod
def get_rand_color(min_value=0, max_value=255):
r = random.randint(min_value, max_value)
g = random.randint(min_value, max_value)
b = random.randint(min_value, max_value)
a = random.randint(min_value, max_value)
return r, g, b, a
@staticmethod
def get_rand_position(width, height):
x = random.randint(0, width)
y = random.randint(0, height)
return x, y
class Line(Shape):
def __init__(self, color, start, stop, width):
super().__init__(color)
self.start = start
self.stop = stop
self.width = width
def draw(self, surface):
pygame.draw.line(surface, self.color, self.start, self.stop, self.width)
@staticmethod
def get_rand_width(min_value=1, max_value=5):
return random.randint(min_value, max_value)
@staticmethod
def rand(width, height):
color = Shape.get_rand_color()
start = Shape.get_rand_position(width, height)
stop = Shape.get_rand_position(width, height)
width = Line.get_rand_width()
return Line(color, start, stop, width)
class Circle(Shape):
def __init__(self, color, position, radius):
super().__init__(color)
self.position = position
self.radius = radius
def draw(self, surface):
pygame.draw.circle(surface, self.color, self.position, self.radius)
@staticmethod
def get_rand_radius(min_value=10, max_value=30):
r = random.randint(min_value, max_value)
return r
@staticmethod
def rand(width, height):
color = Shape.get_rand_color()
position = Shape.get_rand_position(width, height)
radius = Circle.get_rand_radius()
return Circle(color, position, radius)
class Rectangle(Shape):
def __init__(self, color, position, dimension):
super().__init__(color)
self.position = position
self.dimension = dimension
def draw(self, surface):
pygame.draw.rect(surface, self.color, (self.position, self.dimension))
@staticmethod
def get_rand_dimension(min_value=10, max_value=50):
width = random.randint(min_value, max_value)
height = random.randint(min_value, max_value)
return width, height
@staticmethod
def rand(width, height):
color = Shape.get_rand_color()
position = Shape.get_rand_position(width, height)
dimension = Rectangle.get_rand_dimension()
return Rectangle(color, position, dimension)
def start():
pygame.init()
FPS = 30
width = 400
height = 400
DISPLAYSURF = pygame.display.set_mode((width, height))
pygame.display.set_caption('Shapes')
fps_clock = pygame.time.Clock()
iters = 0
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if iters % 100 == 0:
DISPLAYSURF.fill((0, 0, 0, 0))
iters = 0
probability = random.random()
if probability < 0.33:
shape = Circle.rand(width, height)
elif probability < 0.66:
shape = Line.rand(width, height)
else:
shape = Rectangle.rand(width, height)
shape.draw(DISPLAYSURF)
pygame.display.update()
fps_clock.tick(FPS)
iters += 1
if __name__ == '__main__':
os.environ['SDL_VIDEO_CENTERED'] = '1'
start()