This is intended as a code that prints text in Gothic letters but with turtle. I know it is pointless, but it is a challenge my teacher put to the group.
import turtle
text = "!!!"
sizes = {
"!": (20, 80, 20)
}
movements = {
"!": (
False,
(90, 200 ** (1 / 2)),
True,
(0, 40),
(-135, 20),
(-45, 40),
(-135, 20),
False,
(-45, 50),
True,
(0, 20),
(-135, 20),
(-45, 20),
(-135, 20)
)
}
class Letter:
def __init__(self, _character):
self.letter = _character
self.size_x = sizes[_character][0]
self.size_y = sizes[_character][1]
self.spacing = sizes[_character][2]
self.movements = movements[_character]
def draw(self, _pen):
_pen.setheading(0)
_pen.fillcolor("black")
turtle.begin_fill()
for movement in self.movements:
if type(movement) == bool:
pen.pendown() if movement else pen.penup()
continue
pen.right(movement[0])
pen.forward(movement[1])
turtle.end_fill()
letters = []
for character in text:
letters.append(Letter(character))
def goto_absolute(coord_x, coord_y, _pen, screen_width, screen_height):
_pen.penup()
_pen.setheading(0)
_pen.goto((-(screen_width / 2) + coord_x), (screen_height / 2) - coord_y)
_pen.pendown()
pen = turtle.Turtle()
pen.speed(0)
screen = turtle.Screen()
width = screen.window_width()
height = screen.window_height()
drawn = 0
line = 0
for letter in letters:
goto_absolute(10 + ((letter.spacing + letter.size_x) * drawn), 10, pen, width, height)
letter.draw(pen)
drawn += 1
turtle.done()
When "printed", the letters should be filled with black, even this one because is actually two shapes. Any idea on why?
I have not tried anything but what I showed in the code.
You're mixing turtle
, pen
, and _pen
for operations. Use the _pen
passed into the function consistently:
def draw(self, _pen):
_pen.setheading(0)
_pen.fillcolor("black")
_pen.begin_fill()
for movement in self.movements:
if type(movement) == bool:
_pen.pendown() if movement else _pen.penup()
continue
_pen.right(movement[0])
_pen.forward(movement[1])
_pen.end_fill()