I added codes for the face of the ghosts! Also the

coloring!!

I was able to explore Turtle commands and use them smoothly.
I didn't really run into any issues. Coloring was much easier
than I imagined it would be. I am excited to see how these will look
animated. One thing I wish was having more time (and clarity of mind)
to code the face of these ghosts as a replice of the GhostFace. I really
wanted to do that but currently I have way too much on my plate to
complicate this any further! So this could be an improvement or a future
project idea!
This commit is contained in:
caglazir
2025-10-04 17:56:57 -04:00
parent 0bb1d73129
commit 27d744a4f1

View File

@@ -9,10 +9,17 @@ from turtle import *
import bezier
import numpy as np
TurtleScreen=turtle.Screen
turtle.bgcolor("#B04021")
turtle.pensize(4)
def ghostie(length,x,y):
turtle.pencolor("#3C025E")
turtle.fillcolor("#B8B8B8")
penup()
turtle.goto(-150,250)
turtle.goto(x,y)
pendown()
#Starts drawing the left side of the outline
turtle.begin_fill()
left(180)
circle(2*length, 90)
forward(3*length)
@@ -21,22 +28,22 @@ def ghostie(length,x,y):
circle(5*length,30)
circle(-0.2*length,180)
print(pos())
#How can I determine these points directly with respect to my starting point?
#Starts drawing the middle frill
xpos, ypos = turtle.pos()
points=np.array([
[-189.48, -160, -260, -120, -189.48],
[78, 30, -10, -70, -140]
[xpos, (xpos+30), (xpos-70), (xpos+70), xpos],
[ypos, (ypos-48), (ypos-88), (ypos-148), (ypos-218)]
])
curve = bezier.Curve(points, 4)
s_vals = np.linspace(0,1,100)
bezierpoints= curve.evaluate_multi(s_vals)
for n in range(1, bezierpoints.shape[1]):
turtle.goto(bezierpoints[0][n], bezierpoints[1][n])
left(180)
points2=np.array([
[-189.48, -100, -180, -150, -140],
[-140, -100, 20, 50, 78]
[xpos, (xpos+90), (xpos+10), (xpos+40), (xpos+50)],
[(ypos-218), (ypos-178), (ypos-58), (ypos-28), ypos]
])
curve2 = bezier.Curve(points2, 4)
s_vals = np.linspace(0,1,100)
@@ -44,15 +51,57 @@ def ghostie(length,x,y):
for n in range(1, bezierpoints2.shape[1]):
turtle.goto(bezierpoints2[0][n], bezierpoints2[1][n])
#Starts drawing the right side of the outline
circle(-0.2*length,180)
left(10)
circle(5*length,30)
left(170)
left(171)
circle(-6*length,30)
forward(3*length)
circle(2*length, 90)
turtle.end_fill()
ghostie(30)
#Starts drawing the face
def ghostieface(length,x,y):
turtle.fillcolor("#161616")
penup()
turtle.goto(x-20, y-50)
pendown()
turtle.begin_fill()
turtle.shape("circle")
turtle.stamp()
turtle.end_fill()
penup()
turtle.goto(x+20, y-50)
pendown()
turtle.begin_fill()
turtle.shape("circle")
turtle.stamp()
turtle.end_fill()
penup()
turtle.goto(x-5, y-90)
pendown()
left(95)
turtle.begin_fill()
turtle.shape("circle")
turtle.shapesize(stretch_len=2)
turtle.stamp()
turtle.shape("classic")
turtle.shapesize(1,1)
turtle.end_fill()
ghostieface(length,x,y)
ghostie(30, -150, 250)
penup()
turtle.goto(0,0)
turtle.home()
pendown()
ghostie (30, 150, 250)
hideturtle()
turtle.done()