小黄人代码(Python)

发布于:2023-01-17 ⋅ 阅读:(7154) ⋅ 点赞:(6)

这里构造了一个旋转椭圆函数可以使得图案更加生动。

代码如下:

from turtle import *
from random import *
from math import *
speed(0)
pensize(2)
hideturtle()
#高级椭圆参数方程(颜色),sita为逆时针旋转角度
def ty_c(x,y,sita,a,b,p,q,c):
    fillcolor(c)
    si=2*pi/100
    penup()
    goto(x+a*cos(sita),y+a*sin(sita))
    pendown()
    t=0
    for i in range(201):
        if i*si+sita<p:
            penup()
            goto(x+a*cos(i*si)*cos(sita)-b*sin(i*si)*sin(sita)\
                ,y+a*cos(i*si)*sin(sita)+b*sin(i*si)*cos(sita))
            pendown()
        elif p<=i*si+sita<=q :
            if t==0:
                begin_fill()
                t=1
            goto(x+a*cos(i*si)*cos(sita)-b*sin(i*si)*sin(sita)\
                ,y+a*cos(i*si)*sin(sita)+b*sin(i*si)*cos(sita))
    end_fill()
#高级椭圆方程
def ty(x,y,sita,a,b,p,q):
    si=2*pi/100
    penup()
    goto(x+a*cos(sita),y+a*sin(sita))
    pendown()
    for i in range(201):
        if i*si+sita<p:
            penup()
            goto(x+a*cos(i*si)*cos(sita)-b*sin(i*si)*sin(sita)\
                ,y+a*cos(i*si)*sin(sita)+b*sin(i*si)*cos(sita))
            pendown()
        elif p<=i*si+sita<=q:
            goto(x+a*cos(i*si)*cos(sita)-b*sin(i*si)*sin(sita)\
                ,y+a*cos(i*si)*sin(sita)+b*sin(i*si)*cos(sita))
#身体
fillcolor('#ffcc00')
begin_fill()
penup()
goto(200,0)
pendown()
left(90)
forward(230)
ty(0,230,0,200,140,0,pi)
left(180)
forward(230)
pensize(3)
left(90-atan(0.5)*180/pi)
forward(sqrt(30**2+60**2))
left(atan(0.5)*180/pi)
forward(280)
left(atan(0.5)*180/pi)
forward(sqrt(30**2+60**2))
right(atan(0.5)*180/pi)
right(90)
penup()
goto(-200,8)
pendown()
pensize(2)
forward(148)
ty(-90,-140,0,110,130,pi,3*pi/2)
left(90)
forward(180)
ty(90,-140,0,110,130,3*pi/2,2*pi)
left(90)
forward(148)
left(180)
end_fill()

fillcolor('#3366ff')
penup()
pensize(5)
ty_c(-90,-140,0,110,130,pi,3*pi/2,'#3366ff')
penup()
goto(90,-140)
pendown()
ty_c(90,-140,0,110,130,3*pi/2,2*pi,'#3366ff')

penup()
goto(-140,-25)
fillcolor('#3366ff')
begin_fill()
left(3)
pendown()
forward(110)
right(93)
forward(65)
left(180)
penup()
goto(-90,-270)
pendown()
forward(180)
penup()
goto(200,-150)
pendown()
right(180)
forward(65)
right(93)
forward(125)
left(93)
forward(280)
end_fill()
left(90)

penup()
goto(-200,-40)
pendown()
pensize(5)
fillcolor('#ffcc00')
begin_fill()
for i in range(10):
    if 3<=i<5:
        right(2)
        forward(12)
    elif i<3:
        right(1)
        forward(6)
    elif 5<=i<=6:
        left(1)
        forward(12)
    else:
        left(2)
        forward(4)
goto(-200,-140)
end_fill()

penup()
goto(200,-40)
pendown()
pensize(5)
fillcolor('#ffcc00')
begin_fill()
for i in range(10):
    if 3<=i<5:
        left(2)
        forward(12)
    elif i<3:
        left(1)
        forward(6)
    elif 5<=i<=6:
        right(1)
        forward(12)
    else:
        right(2)
        forward(4)
goto(200,-145)
end_fill()


#左背带
fillcolor('#0066cc')
penup()
goto(-200,6)
pendown()
pensize(5)
begin_fill()
for i in range(10):
    if 3<=i<5:
        right(1)
        forward(3)
    elif i<3:
        right(2)
        forward(1)
    elif 5<=i<=6:
        left(1)
        forward(3)
    else:
        left(2)
        forward(1)
goto(-200,-40)
pensize(3)
left(90-atan(0.5)*180/pi)
forward(100)
penup()
goto(-200,6)
end_fill()
begin_fill()
pendown()
forward(120)
right(90)
forward(42)
end_fill()
penup()
goto(-140,-50)
pendown()
fillcolor('#646464')
begin_fill()
ty(-125,-55,0,15,15,0,2.1*pi)
end_fill()
left(atan(0.5)*180/pi)
#右背带
fillcolor('#0066cc')
penup()
goto(200,6)
pendown()
pensize(5)
begin_fill()
for i in range(10):
    if 3<=i<5:
        left(1)
        forward(3)
    elif i<3:
        left(2)
        forward(1)
    elif 5<=i<=6:
        right(1)
        forward(3)
    else:
        right(2)
        forward(1)
goto(200,-40)
pensize(3)
right(90-atan(0.5)*180/pi)
forward(100)
penup()
goto(200,6)
end_fill()
begin_fill()
pendown()
forward(120)
left(90)
forward(42)
end_fill()
penup()
goto(140,-50)
pendown()
fillcolor('#646464')
begin_fill()
ty(125,-55,0,15,15,0,2.1*pi)
end_fill()
right(atan(0.5)*180/pi)
#肚兜
penup()
goto(0,-80)
pendown()
ty_c(-25,-80,0,35,100,pi+3*pi/100,3*pi/2,'#3399ff')
penup()
goto(25,-80)
pendown()
ty_c(25,-80,0,35,100,3*pi/2,2*pi,'#3399ff')
penup()
goto(-60,-85)
fillcolor('#3399ff')
begin_fill()
goto(-25,-180)
pendown()
left(90)
forward(50)
penup()
goto(60,-85)
pendown()
left(180)
forward(120)
end_fill()
left(90)

ty_c(0,-130,0,40,35,0,2*pi-pi/50,'#000000')
penup()
fillcolor('#3399ff')
begin_fill()
goto(0,-95)
pendown()
goto(-40,-130)
goto(0,-165)
goto(40,-130)
goto(0,-95)
end_fill()
ty_c(0,-130,0,15,10,0,2*pi-pi/50,'#000000')
penup()
fillcolor('#3399ff')
pencolor('#3399ff')
begin_fill()
goto(0,-130)
pendown()
goto(40,-130)
goto(40,-128)
goto(0,-130)
end_fill()
pencolor('#000000')
#镜框左
penup()
goto(-200,180)
right(180)
pendown()
pensize(8)
fillcolor('#808080')
begin_fill()
for i in range(10):
    if 3<=i<5:
        left(1)
        forward(5)
    elif i<3:
        left(2)
        forward(3)
    elif 5<=i<=6:
        right(1)
        forward(5)
    else:
        right(2)
        forward(3)
goto(-200,220)
goto(-180,225)
goto(-180,185)
goto(-200,180)
penup()
goto(-200,200)
pendown()
goto(-180,205)
end_fill()
penup()
goto(-180,205)
pendown()
pencolor('#808080')
pensize(10)
goto(-180,230)
goto(-180,180)
#镜框右
pencolor('#000000')
penup()
goto(200,180)
pendown()
pensize(8)
fillcolor('#808080')
begin_fill()
for i in range(10):
    if 3<=i<5:
        right(1)
        forward(5)
    elif i<3:
        right(2)
        forward(3)
    elif 5<=i<=6:
        left(1)
        forward(5)
    else:
        left(2)
        forward(3)
goto(200,220)
goto(180,225)
goto(180,185)
goto(200,180)
penup()
goto(200,200)
pendown()
goto(180,205)
end_fill()
penup()
goto(180,205)
pendown()
pencolor('#808080')
pensize(10)
goto(180,230)
goto(180,180)
#眼镜
pencolor('#000000')
pensize(3)
penup()
fillcolor('#c0c0c0')
pensize(5)
goto(90,210)
pendown()
begin_fill()
ty(90,210,0,91,91,0,2*pi+pi/25)
end_fill()
penup()
goto(-90,210)
pendown()
begin_fill()
ty(-90,210,0,91,91,0,2*pi+pi/25)
end_fill()
pensize(3)
penup()
goto(-90,210)
pendown()
ty_c(-90,210,0,70,70,0,2*pi,'#ffcc00')

penup()
goto(90,210)
pendown()
ty_c(90,210,0,70,70,0,2*pi,'#ffcc00')

penup()
goto(-90,210)
pendown()
ty_c(-90,207,0,70,62,0,2*pi,'#ffffff')

penup()
goto(90,210)
pendown()
ty_c(90,209,0,70,62,0,2*pi,'#ffffff')
#左眼睛
pensize(2)
a1=randint(-80,-70)
b1=randint(190,200)
c11=randint(1,5)
d=randint(8,12)
if c11==1:
    c12='#ff6600'
elif c11==2:
    c12='#33cccc'
elif c11==3:
    c12='#ffff99'
elif c11==4:
    c12='#99cc00'
else :
    c12='#ff99cc'
penup()
goto(a1,b1)
pendown()
ty_c(a1,b1,0,22,22,0,2*pi,c12)
penup()
goto(a1,b1)
pendown()
ty_c(a1,b1,0,10,10,0,2*pi,'#000000')
penup()
goto(a1-d,b1+d)
pendown()
ty_c(a1-d,b1+d,0,5,5,0,2*pi,'#ffffff')

#右眼睛
a2=randint(70,80)
b2=randint(190,200)
c21=randint(1,5)
if c21==1:
    c22='#ff6600'
elif c21==2:
    c22='#33cccc'
elif c21==3:
    c22='#ffff99'
elif c21==4:
    c22='#99cc00'
else :
    c22='#ff99cc'
penup()
goto(a2,b2)
pendown()
ty_c(a2,b2,0,22,22,0,2*pi,c22)
penup()
goto(a2,b2)
pendown()
ty_c(a2,b2,0,10,10,0,2*pi,'#000000')
penup()
goto(a2-d,b2+d)
pendown()
ty_c(a2-d,b2+d,0,5,5,0,2*pi,'#ffffff')

#嘴巴
e=randint(0,1)
if e==0:
    pensize(4)
    ty(0,120,0,130,80,3*pi/2-pi/5,3*pi/2+pi/5)
else:
    pensize(5)
    fillcolor('#ff8080')
    penup()
    goto(50,90)
    begin_fill()
    pendown()
    seth(180)
    circle(-150,3)
    circle(-400,5)
    circle(-800,5)
    circle(-200,5)
    seth(-90)
    circle(150,3)
    circle(360,2)
    circle(400,3)
    circle(250,4)
    circle(70,80)
    circle(100,5)
    circle(150,3)
    circle(50,20)
    circle(30,45)
    forward(25)
    circle(180,13)
    goto(50,90)
    end_fill()

    penup()
    goto(40,20)
    pensize(3)
    pendown()
    fillcolor('#993300')
    begin_fill()
    seth(120)
    circle(140,50)
    seth(-90)
    circle(70,80)
    circle(100,5)
    circle(150,3)
    goto(40,20)
    end_fill()

#左手
seth(-90)
pensize(2)
penup()
goto(-200,-70)
fillcolor('#ffcc00')
begin_fill()
pendown()
right(60)
forward(120)
right(90)
forward(30)
goto(-200,-40)
end_fill()

seth(-90)
penup()
goto(-200,-70)
pendown()
fillcolor('#808080')
right(60)
forward(117)
begin_fill()
left(90)
forward(8)
right(30)
circle(-200,2)
circle(-1,70)
forward(40)
circle(-250,1)
circle(-25,180)
forward(20)
left(20)
forward(10)
circle(10)
right(10)
forward(15)
right(90)
forward(40)
end_fill()

#右手
seth(-90)
pensize(2)
penup()
goto(200,-70)
fillcolor('#ffcc00')
begin_fill()
pendown()
left(60)
forward(120)
left(90)
forward(30)
goto(200,-40)
end_fill()

seth(-90)
penup()
goto(200,-70)
pendown()
fillcolor('#808080')
left(60)
forward(117)
begin_fill()
right(90)
forward(8)
left(30)
circle(200,2)
circle(1,70)
forward(40)
circle(250,1)
circle(25,180)
forward(20)
right(20)
forward(10)
circle(-10)
left(10)
forward(15)
left(90)
forward(40)
end_fill()
seth(-90)

#左腿
penup()
goto(-90,-270)
pendown()
fillcolor('#3366ff')
begin_fill()
left(4)
forward(40)
seth(0)
forward(60)
goto(-28,-270)
end_fill()

seth(-90)
penup()
goto(-30,-270)
pendown()
fillcolor('#333333')
begin_fill()
left(4)
forward(40)
right(120)
circle(80,10)
circle(50,15)
forward(50)
circle(24,190)
circle(40,5)
circle(-39,6)
forward(35)
circle(-150,10)
goto(-30,-310)
end_fill()

#右腿
seth(-90)
penup()
goto(90,-270)
pendown()
fillcolor('#3366ff')
begin_fill()
right(3)
forward(40)
seth(180)
forward(60)
goto(28,-270)
end_fill()

seth(-90)
penup()
goto(30,-270)
pendown()
fillcolor('#333333')
begin_fill()
right(3)
forward(40)
left(120)
circle(-80,10)
circle(-50,15)
forward(50)
circle(-24,190)
circle(-40,5)
circle(39,6)
forward(35)
circle(150,10)
goto(30,-310)
end_fill()
seth(90)

#头发
pensize(2)
right(90)
penup()
goto(2,370)
pendown()
for i in range(10):
    if 3<=i<5:
        left(1)
        forward(15)
    elif i<3:
        left(4)
        forward(19)
    elif 5<=i<=6:
        right(15)
        forward(15)
    else:
        right(6)
        forward(20)
seth(0)

penup()
goto(8,370)
pendown()
for i in range(10):
    if 3<=i<5:
        left(2)
        forward(8)
    elif i<3:
        left(3)
        forward(10)
    elif 5<=i<=6:
        right(15)
        forward(12)
    else:
        right(6)
        forward(16)
seth(0)

penup()
goto(14,370)
pendown()
for i in range(10):
    if 3<=i<5:
        left(1)
        forward(10)
    elif i<3:
        left(5)
        forward(12)
    elif 5<=i<=6:
        right(15)
        forward(18)
    else:
        right(6)
        forward(20)
seth(0)

penup()
goto(20,370)
pendown()
for i in range(10):
    if 3<=i<5:
        left(1)
        forward(11)
    elif i<3:
        left(3)
        forward(3)
    elif 5<=i<=6:
        right(15)
        forward(15)
    else:
        right(6)
        forward(14)
seth(0)

penup()
goto(23,370)
pendown()
for i in range(10):
    if 3<=i<5:
        left(1)
        forward(15)
    elif i<3:
        left(3)
        forward(13)
    elif 5<=i<=6:
        right(15)
        forward(18)
    else:
        right(8)
        forward(16)
seth(0)



seth(180)
penup()
goto(-2,370)
pendown()
for i in range(10):
    if 3<=i<5:
        right(1)
        forward(15)
    elif i<3:
        right(4)
        forward(15)
    elif 5<=i<=6:
        left(15)
        forward(15)
    else:
        left(6)
        forward(20)
seth(180)

penup()
goto(-8,370)
pendown()
for i in range(10):
    if 3<=i<5:
        right(2)
        forward(8)
    elif i<3:
        right(3)
        forward(10)
    elif 5<=i<=6:
        left(15)
        forward(12)
    else:
        left(6)
        forward(14)
seth(180)

penup()
goto(-14,370)
pendown()
for i in range(10):
    if 3<=i<5:
        right(1)
        forward(10)
    elif i<3:
        right(5)
        forward(8)
    elif 5<=i<=6:
        left(15)
        forward(18)
    else:
        left(6)
        forward(20)
seth(180)

penup()
goto(-20,370)
pendown()
for i in range(10):
    if 3<=i<5:
        right(1)
        forward(13)
    elif i<3:
        right(3)
        forward(5)
    elif 5<=i<=6:
        left(15)
        forward(6)
    else:
        left(6)
        forward(16)
seth(180)

penup()
goto(-23,370)
pendown()
for i in range(10):
    if 3<=i<5:
        right(1)
        forward(13)
    elif i<3:
        right(3)
        forward(15)
    elif 5<=i<=6:
        left(15)
        forward(8)
    else:
        left(8)
        forward(16)
seth(180)
done()

效果如下:

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到