-
Notifications
You must be signed in to change notification settings - Fork 0
/
n-polygon.py
66 lines (50 loc) · 1.83 KB
/
n-polygon.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
from turtle import Turtle, Screen
from itertools import cycle
class App:
colors = ['blue', 'yellow']
def __init__(self, master):
self.master = master
self.colors = iter(cycle(App.colors))
self.turtle = Turtle()
self.turtle.hideturtle()
self.turtle.speed(2)
self.turtle.pensize(4)
self.master.onclick(self.run_lap)
self.go(-60, 0)
self.turtle.color('white')
self.turtle.write('Click to Start', font='arial 20')
def run_lap(self, *args):
self.turtle.clear()
sides = self.master.numinput('N Polygon', 'Sides: ', minval=3, maxval=15)
if sides is None:
self.exit()
return
sides = int(sides)
total_angle = 180 * (sides - 2)
angle = total_angle / sides
angle = 180 - angle # reverse direction
length = 150 - (sides * 2)
self.go(50, -180 + ((10 - sides) * 25)) # start point
for side in range(1, sides+1):
if (sides % 2) and (side == sides): # if it is the last side and the number of sides is an odd number
self.turtle.color('gray')
else:
self.turtle.color(next(self.colors))
self.turtle.left(angle)
self.turtle.forward(length)
def go(self, x, y):
self.turtle.penup()
self.turtle.goto(x=x, y=y)
self.turtle.pendown()
def exit(self):
self.go(-70, 0)
self.turtle.color('white')
self.turtle.write('Click to Quit', font='arial 20')
self.master.exitonclick()
if __name__ == "__main__":
root = Screen()
root.bgcolor('black')
root.title('N Polygon')
root.setup(width=700, height=700, startx=350, starty=70)
app = App(root)
root.mainloop()