class LSDrawer: def __init__(self, draw_rules: Dict[str, str], _turtle: Turtle = None, start_pos = (-100, -100), speed = 10) -> None: self.t = Turtle() if not _turtle else _turtle self.draw_rules = draw_rules self.t.speed(speed) self.t.up() self.t.setposition(start_pos) self.t.down() self.t.resizemode('auto') self.t._tracer(0) def draw(self, lsystem: str) -> None: self.stack = [] for c in lsystem: if c in self.draw_rules: try: eval(f'self.t.{self.draw_rules[c]}') except: print(f'Cant to do {self.draw_rules[c]}') elif c == '[': pos = self.t.pos() ang = self.t.heading() self.stack.append((pos, ang)) elif c == ']': pos, ang = self.stack.pop() self.t.up() self.t.setpos(pos) self.t.setheading(ang) self.t.down() else: pass self.t._update() @staticmethod def create_L_system(ls: str, n: int, ls_rules: Dict[str, str]) -> str: for i in range(n): rez = '' for c in ls: if c not in ls_rules: rez += c else: rez += ls_rules[c] ls = rez return rez
def generate_terrance(self): for position in START_POSITION: t = Turtle() t.left(90) t.shape("turtle") t.color("black") t.penup() t._tracer(0) t.goto(position) t._tracer(1) self.turtles.append(t)
def create_pongs(self): for position in STARTING_POSITIONS: pong = Turtle() pong.shape("square") pong.color("black") pong.penup() pong.shapesize(4, 1) pong._tracer(0) pong.goto(position) pong._tracer(1) self.pongs.append(pong)
def generate_cars(self): for num in range(1, 20): car = Turtle() car._tracer(0) randomcolor = random.choice(COLORS) car.color(randomcolor) car.shape("square") car.shapesize(1, 2) car.penup() car.goto(400, random.choice(range(-300, 300)) + 10) car._tracer(1) self.cars.append(car)
def showTurtleChart(names, baseBar, greenBar, redBar, y): turtle = Turtle() turtle.speed(TURTLE_SPEED) turtle._tracer(False) wn = Screen() wn.bgcolor("#232130") wn.setup(1200,600) maxheight = max(y+redBar) border = max(ceil(maxheight/10), 10) numbars = len(y) width = border*5 wn.setworldcoordinates(0-border,0-3*border,(border+width)*numbars+2*border,maxheight+2*border) barStartPositions = [] turtle.penup() turtle.setheading(0) turtle.forward(border) turtle.pendown() turtle.hideturtle() turtle.color(TURTLE_PEN_COLOR) barStartPositions += [turtle.pos()] for _ in range(1, len(y)): turtle.forward(border+width) barStartPositions += [turtle.pos()] turtle.forward(width) for i in range(len(y)): if greenBar[i] == 0: if not redBar[i] == 0: drawBar(turtle, barStartPositions[i], redBar[i]+baseBar[i], RED_BAR_COLOR, width) elif redBar[i] == 0: if not greenBar[i] == 0: drawBar(turtle, barStartPositions[i], greenBar[i]+baseBar[i], GREEN_BAR_COLOR, width) if not baseBar[i] == 0: drawBar(turtle, barStartPositions[i], baseBar[i], BASE_BAR_COLOR, width) for i in range(len(names)): turtle.penup() turtle.goto((i+1)*border+width*(i+1/2),-1*border) turtle.pendown() turtle.write(names[i][-15:-10],align='center',font=('Arial',10,'normal')) turtle.penup() turtle.goto((i+1)*border+width*(i+1/2),-1.5*border) turtle.pendown() turtle.write(names[i][-10:],align='center',font=('Arial',10,'normal')) turtle.penup() turtle.pensize(2) turtle.pencolor('#938db9') turtle._tracer(True) turtle.goto(border+width/2,y[0]) turtle.pendown() for i in range(1,len(y)): turtle.goto((i+1)*border+width*(i+1/2),y[i]) turtle.pencolor('white') turtle.pendown() turtle._tracer(False) for i in range(len(y)): turtle.goto((i+1)*border+width*(i+1/2),y[i]) turtle.write(str(y[i]),align='center',font=('Arial',11,'bold')) wn.exitonclick()