Esempio n. 1
0
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
Esempio n. 2
0
 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)
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)
Esempio n. 5
0
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()