102 lines
2.6 KiB
Python
102 lines
2.6 KiB
Python
|
from turtle import Turtle, mainloop
|
||
|
|
||
|
|
||
|
class Etch:
|
||
|
def __init__(self):
|
||
|
self.__t = Turtle()
|
||
|
self.__screen = self.__t.screen
|
||
|
self.__color_list = ['#35b070', 'black', 'white', 'red', 'orange', 'yellow', 'green', 'blue', 'purple', 'pink']
|
||
|
self.__color_index = 0
|
||
|
self.__t.color(self.__color_list[self.__color_index])
|
||
|
self.__t.pensize(1)
|
||
|
self.__t.speed(0)
|
||
|
self.__distance = 10
|
||
|
self.__turn = 10
|
||
|
|
||
|
# Add callbacks
|
||
|
self.__screen.onkey(self.__fwd, 'w')
|
||
|
self.__screen.onkey(self.__back, 's')
|
||
|
self.__screen.onkey(self.__left, 'a')
|
||
|
self.__screen.onkey(self.__right, 'd')
|
||
|
self.__screen.onkey(self.__increase_distance, 'e')
|
||
|
self.__screen.onkey(self.__decrease_distance, 'q')
|
||
|
self.__screen.onkey(self.__increase_turn, 'r')
|
||
|
self.__screen.onkey(self.__decrease_turn, 'f')
|
||
|
self.__screen.onkey(self.__toggle_pen, 'z')
|
||
|
self.__screen.onkey(self.__color, 'c')
|
||
|
self.__screen.onkey(self.__clear, 'x')
|
||
|
self.__screen.onkey(self.__quit, 'Escape')
|
||
|
self.__screen.listen()
|
||
|
|
||
|
|
||
|
def main(self):
|
||
|
mainloop()
|
||
|
|
||
|
# Callback methods
|
||
|
def __increase_distance(self):
|
||
|
if self.__distance == 100:
|
||
|
pass
|
||
|
elif self.__distance < 5:
|
||
|
self.__distance += 1
|
||
|
else:
|
||
|
self.__distance += 5
|
||
|
|
||
|
def __decrease_distance(self):
|
||
|
if self.__distance == 1:
|
||
|
pass
|
||
|
elif self.__distance <= 5:
|
||
|
self.__distance -= 1
|
||
|
else:
|
||
|
self.__distance -= 5
|
||
|
|
||
|
def __increase_turn(self):
|
||
|
if self.__turn == 180:
|
||
|
pass
|
||
|
elif self.__turn < 5:
|
||
|
self.__turn += 1
|
||
|
else:
|
||
|
self.__turn += 5
|
||
|
|
||
|
def __decrease_turn(self):
|
||
|
if self.__turn == 1:
|
||
|
pass
|
||
|
elif self.__turn <= 5:
|
||
|
self.__turn -= 1
|
||
|
else:
|
||
|
self.__turn -= 5
|
||
|
|
||
|
def __fwd(self):
|
||
|
self.__t.forward(self.__distance)
|
||
|
|
||
|
def __back(self):
|
||
|
self.__t.backward(self.__distance)
|
||
|
|
||
|
def __left(self):
|
||
|
self.__t.left(self.__turn)
|
||
|
|
||
|
def __right(self):
|
||
|
self.__t.right(self.__turn)
|
||
|
|
||
|
def __toggle_pen(self):
|
||
|
if self.__t.isdown():
|
||
|
self.__t.penup()
|
||
|
else:
|
||
|
self.__t.pendown()
|
||
|
|
||
|
def __clear(self):
|
||
|
self.__t.clear()
|
||
|
|
||
|
def __color(self):
|
||
|
if self.__color_index == 9:
|
||
|
self.__color_index = -1
|
||
|
self.__color_index += 1
|
||
|
self.__t.color(self.__color_list[self.__color_index])
|
||
|
|
||
|
def __quit(self):
|
||
|
exit(0)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
draw = Etch()
|
||
|
draw.main()
|