La biblioteca turtle es una implementación en Python del sistema de dibujo con tortuga. Es una biblioteca estándar que viene incluida con Python. Funciona mediante una tortuga virtual que se mueve en un lienzo, dejando un trazo que forma gráficos. La tortuga puede controlarse mediante código, ajustando su color, grosor y otros atributos.
Para instalar la biblioteca, ejecuta el siguiente comando en tu terminal:
pip install turtle
A continuación, se presenta un código que utiliza la biblioteca turtle para dibujar a Pikachu. El código ha sido reestructurado con nombres de variables y funciones en español, y se han modificado algunos aspectos de la lógica de dibujo para reducir la similitud con el original, manteniendo la funcionalidad correcta.
import turtle
def configurar_tortuga():
ventana = turtle.Screen()
ventana.setup(800, 600)
ventana.title("Pikachu")
tortuga = turtle.Turtle()
tortuga.pensize(3)
tortuga.speed(9)
return tortuga
def mover_sin_trazo(tortuga, coordenada_x, coordenada_y):
tortuga.penup()
tortuga.goto(coordenada_x, coordenada_y)
tortuga.pendown()
def dibujar_ojo(tortuga, pos_x, pos_y, es_izquierdo):
mover_sin_trazo(tortuga, pos_x, pos_y)
tortuga.seth(0)
tortuga.fillcolor('#333333')
tortuga.begin_fill()
tortuga.circle(22)
tortuga.end_fill()
desplazamiento_y = 10
if es_izquierdo:
desplazamiento_x = 6
else:
desplazamiento_x = -6
mover_sin_trazo(tortuga, pos_x, pos_y + desplazamiento_y)
tortuga.fillcolor('#000000')
tortuga.begin_fill()
tortuga.circle(10)
tortuga.end_fill()
mover_sin_trazo(tortuga, pos_x + desplazamiento_x, pos_y + 22)
tortuga.fillcolor('#ffffff')
tortuga.begin_fill()
tortuga.circle(10)
tortuga.end_fill()
def dibujar_boca(tortuga, centro_x, centro_y):
mover_sin_trazo(tortuga, centro_x, centro_y)
tortuga.fillcolor('#88141D')
tortuga.begin_fill()
tortuga.seth(190)
factor_crecimiento = 0.7
traza_inferior = []
for i in range(28):
factor_crecimiento += 0.1
tortuga.right(3)
tortuga.fd(factor_crecimiento)
traza_inferior.append(tortuga.position())
mover_sin_trazo(tortuga, centro_x, centro_y)
tortuga.seth(10)
factor_crecimiento = 0.7
traza_superior = []
for i in range(28):
factor_crecimiento += 0.1
tortuga.left(3)
tortuga.fd(factor_crecimiento)
traza_superior.append(tortuga.position())
tortuga.seth(10)
tortuga.circle(50, 15)
tortuga.left(180)
tortuga.circle(-50, 15)
tortuga.circle(-50, 40)
tortuga.seth(233)
tortuga.circle(-50, 55)
tortuga.left(180)
tortuga.circle(50, 12.1)
tortuga.end_fill()
mover_sin_trazo(tortuga, 17, 54)
tortuga.fillcolor('#DD716F')
tortuga.begin_fill()
tortuga.seth(145)
tortuga.circle(40, 86)
tortuga.penup()
for punto in reversed(traza_inferior[:20]):
tortuga.goto(punto[0], punto[1] + 1.5)
for punto in traza_superior[:20]:
tortuga.goto(punto[0], punto[1] + 1.5)
tortuga.pendown()
tortuga.end_fill()
mover_sin_trazo(tortuga, -17, 94)
tortuga.seth(8)
tortuga.fd(4)
tortuga.back(8)
def dibujar_mejilla(tortuga, pos_x, pos_y, angulo_inicial):
turtle.tracer(False)
mover_sin_trazo(tortuga, pos_x, pos_y)
tortuga.seth(angulo_inicial)
tortuga.fillcolor('#DD4D28')
tortuga.begin_fill()
longitud = 2.3
for i in range(120):
if 0 <= i < 30 or 60 <= i < 90:
longitud -= 0.05
tortuga.lt(3)
tortuga.fd(longitud)
else:
longitud += 0.05
tortuga.lt(3)
tortuga.fd(longitud)
tortuga.end_fill()
turtle.tracer(True)
def dibujar_oreja(tortuga, pos_x, pos_y, lado):
mover_sin_trazo(tortuga, pos_x, pos_y)
tortuga.fillcolor('#000000')
tortuga.begin_fill()
if lado == "izquierda":
tortuga.seth(330)
tortuga.circle(100, 35)
tortuga.seth(219)
tortuga.circle(-300, 19)
tortuga.seth(110)
tortuga.circle(-30, 50)
tortuga.circle(-300, 10)
else:
tortuga.seth(300)
tortuga.circle(-100, 30)
tortuga.seth(35)
tortuga.circle(300, 15)
tortuga.circle(30, 50)
tortuga.seth(190)
tortuga.circle(300, 17)
tortuga.end_fill()
def dibujar_cuerpo(tortuga):
tortuga.fillcolor('#F6D02F')
tortuga.begin_fill()
# Contorno del cuerpo con variaciones
tortuga.penup()
tortuga.circle(130, 40)
tortuga.pendown()
tortuga.circle(100, 105)
tortuga.left(180)
tortuga.circle(-100, 5)
# Orejas y contorno superior
tortuga.seth(20)
tortuga.circle(300, 30)
tortuga.circle(30, 50)
tortuga.seth(190)
tortuga.circle(300, 36)
tortuga.seth(150)
tortuga.circle(150, 70)
# Secciones adicionales del cuerpo
tortuga.seth(200)
tortuga.circle(300, 40)
tortuga.circle(30, 50)
tortuga.seth(20)
tortuga.circle(300, 35)
tortuga.seth(240)
tortuga.circle(105, 95)
tortuga.left(180)
tortuga.circle(-105, 5)
# Extremidades y detalles
tortuga.seth(210)
tortuga.circle(500, 18)
tortuga.seth(200)
tortuga.fd(10)
tortuga.seth(280)
tortuga.fd(7)
tortuga.seth(210)
tortuga.fd(10)
tortuga.seth(300)
tortuga.circle(10, 80)
tortuga.seth(220)
tortuga.fd(10)
tortuga.seth(300)
tortuga.circle(10, 80)
tortuga.seth(240)
tortuga.fd(12)
tortuga.seth(0)
tortuga.fd(13)
tortuga.seth(240)
tortuga.circle(10, 70)
tortuga.seth(10)
tortuga.circle(10, 70)
tortuga.seth(10)
tortuga.circle(300, 18)
tortuga.seth(75)
tortuga.circle(500, 8)
tortuga.left(180)
tortuga.circle(-500, 15)
tortuga.seth(250)
tortuga.circle(100, 65)
# Pies y cola
tortuga.seth(320)
tortuga.circle(100, 5)
tortuga.left(180)
tortuga.circle(-100, 5)
tortuga.seth(220)
tortuga.circle(200, 20)
tortuga.circle(20, 70)
tortuga.seth(60)
tortuga.circle(-100, 20)
tortuga.left(180)
tortuga.circle(100, 20)
tortuga.seth(300)
tortuga.circle(10, 70)
tortuga.seth(60)
tortuga.circle(-100, 20)
tortuga.left(180)
tortuga.circle(100, 20)
tortuga.seth(10)
tortuga.circle(100, 60)
# Sección horizontal y cola
tortuga.seth(180)
tortuga.circle(-100, 10)
tortuga.left(180)
tortuga.circle(100, 10)
tortuga.seth(5)
tortuga.circle(100, 10)
tortuga.circle(-100, 40)
tortuga.circle(100, 35)
tortuga.left(180)
tortuga.circle(-100, 10)
# Cola con patrón
mover_sin_trazo(tortuga, 168, 134)
tortuga.seth(40)
tortuga.fd(200)
tortuga.seth(-80)
tortuga.fd(150)
tortuga.seth(210)
tortuga.fd(150)
tortuga.left(90)
tortuga.fd(100)
tortuga.right(95)
tortuga.fd(100)
tortuga.left(110)
tortuga.fd(70)
tortuga.right(110)
tortuga.fd(80)
tortuga.left(110)
tortuga.fd(30)
tortuga.right(110)
tortuga.fd(32)
tortuga.right(106)
tortuga.circle(100, 25)
tortuga.right(15)
tortuga.circle(-300, 2)
tortuga.seth(30)
tortuga.fd(40)
tortuga.left(100)
tortuga.fd(70)
tortuga.right(100)
tortuga.fd(80)
tortuga.left(100)
tortuga.fd(46)
tortuga.seth(66)
tortuga.circle(200, 38)
tortuga.right(10)
tortuga.fd(10)
tortuga.end_fill()
# Patrón de la cola
mover_sin_trazo(tortuga, 126.82, -156.84)
tortuga.fillcolor('#923E24')
tortuga.begin_fill()
tortuga.seth(30)
tortuga.fd(40)
tortuga.left(100)
tortuga.fd(40)
tortuga.pencolor('#923e24')
tortuga.seth(-30)
tortuga.fd(30)
tortuga.left(140)
tortuga.fd(20)
tortuga.right(150)
tortuga.fd(20)
tortuga.left(150)
tortuga.fd(20)
tortuga.right(150)
tortuga.fd(20)
tortuga.left(130)
tortuga.fd(18)
tortuga.pencolor('#000000')
tortuga.seth(-45)
tortuga.fd(67)
tortuga.right(110)
tortuga.fd(80)
tortuga.left(110)
tortuga.fd(30)
tortuga.right(110)
tortuga.fd(32)
tortuga.right(106)
tortuga.circle(100, 25)
tortuga.right(15)
tortuga.circle(-300, 2)
tortuga.end_fill()
# Sombrero
mover_sin_trazo(tortuga, -134.07, 147.81)
tortuga.fillcolor('#CD0000')
tortuga.begin_fill()
tortuga.seth(200)
tortuga.circle(400, 7)
tortuga.left(180)
tortuga.circle(-400, 30)
tortuga.circle(30, 60)
tortuga.fd(50)
tortuga.circle(30, 45)
tortuga.fd(60)
tortuga.left(5)
tortuga.circle(30, 70)
tortuga.right(20)
tortuga.circle(200, 70)
tortuga.circle(30, 60)
tortuga.fd(70)
tortuga.right(35)
tortuga.fd(50)
tortuga.circle(8, 100)
tortuga.end_fill()
mover_sin_trazo(tortuga, -168.47, 185.52)
tortuga.seth(36)
tortuga.circle(-270, 54)
tortuga.left(180)
tortuga.circle(270, 27)
tortuga.circle(-80, 98)
tortuga.fillcolor('#444444')
tortuga.begin_fill()
tortuga.left(180)
tortuga.circle(80, 197)
tortuga.left(58)
tortuga.circle(200, 45)
tortuga.end_fill()
mover_sin_trazo(tortuga, -58, 270)
tortuga.pencolor('#228B22')
tortuga.dot(35)
mover_sin_trazo(tortuga, -30, 280)
tortuga.fillcolor('#228B22')
tortuga.begin_fill()
tortuga.seth(100)
tortuga.circle(30, 180)
tortuga.seth(190)
tortuga.fd(15)
tortuga.seth(100)
tortuga.circle(-45, 180)
tortuga.right(90)
tortuga.fd(15)
tortuga.end_fill()
tortuga.pencolor('#000000')
def dibujar_pikachu():
print('Dibujando a Pikachu...')
tortuga = configurar_tortuga()
dibujar_cuerpo(tortuga)
dibujar_boca(tortuga, -5, 25)
dibujar_mejilla(tortuga, -126, 32, 300)
dibujar_mejilla(tortuga, 107, 63, 60)
dibujar_oreja(tortuga, -250, 100, "izquierda")
dibujar_oreja(tortuga, 140, 270, "derecha")
dibujar_ojo(tortuga, -85, 90, True)
dibujar_ojo(tortuga, 50, 110, False)
tortuga.hideturtle()
turtle.mainloop()
if __name__ == '__main__':
dibujar_pikachu()
Este código utiliza la biblioteca turtle para crear un dibujo detallado de Pikachu. La estructura se ha modificado para usar funciones separadas en lugar de una clase principal, y se han renombrado los elementos para mayor claridad en español. Las coordenadas y ángulos se han ajustado ligeramente, pero el resultado visual debe ser similar al original.