使用Python的turtle画小绵羊

今天学习使用turtle画图,本来想实现个3D效果,结果2D都画了半天,画圆被绕晕了

目标图片: 

 

实现代码:

# -*- coding:utf-8 -*-
# __author__ :kusy
# __content__:文件说明
# __date__:2018/8/21 13:08
import turtle
import time
import math as m


class Sheep(object):

    def __init__(self,xsize):
        self.t = turtle.Turtle()
        self.xsize = xsize
        t = self.t
        # 画笔设置
        t.screen.screensize(canvwidth=1000,canvheight=500,bg='white')
        t.pensize(2)
        t.speed(10)
        # t.hideturtle()
        #初始化画笔位置
        t.penup()
        t.setpos(self.xsize,0)
        t.pendown()

    # 设置画笔坐标
    def setxy(self,x,y):
        t = self.t
        t.penup()
        pos_x = t.position()[0]
        pos_y = t.position()[1]
        t.setpos(pos_x + x,pos_y + y)
        t.pendown()

    def create_sheep(self):
        t = self.t
        # 羊头
        self.setxy(-200,0)
        t.fillcolor('black')
        t.begin_fill()
        t.circle(100)
        t.end_fill()

        # 眼睛
        # 眼白
        print(t.position())
        self.setxy(-20,120)

        t.fillcolor('white')
        t.begin_fill()
        t.seth(45)
        t.circle(18,-280)
        t.seth(45)
        t.circle(-20,292)
        t.end_fill()
        # 眼珠
        self.setxy(3,12)
        t.fillcolor('black')
        t.begin_fill()
        t.seth(85)
        t.circle(10)
        t.seth(85)
        t.circle(-10)
        t.end_fill()
        # 眼心
        t.fillcolor('white')
        t.begin_fill()
        t.seth(85)
        t.circle(3)
        t.seth(85)
        t.circle(-3)
        t.end_fill()

        #
        self.setxy(0,-100)
        t.color('red')
        t.seth(300)
        t.forward(8)
        self.setxy(-1, 3)
        t.seth(0)
        t.circle(80,60)
        self.setxy(2, -2)
        t.seth(145)
        t.forward(8)
        t.color('black')

        # 耳朵
        self.setxy(-145,120)
        p1 = t.position()
        t.fillcolor('black')
        t.begin_fill()
        t.seth(0)
        t.circle(-120,20)
        p2 = t.position()
        t.setpos(p1)
        t.seth(60)
        t.circle(-30,120)
        t.goto(p2)
        t.end_fill()

        # 身体
        self.setxy(41,12)
        t.seth(45)
        t.circle(-150,100)
        t.pensize(5)
        t.seth(0)
        t.circle(-120,30)
        t.seth(60)
        t.circle(-15,320)
        t.seth(330)
        t.circle(-80,180)
        t.seth(210)
        t.circle(-80,90)

        #4条腿
        t.pensize(2)
        for leg in range(4):
            self.setxy(8+15*leg,0)
            t.seth(270)
            t.forward(80)
            t.seth(0)
            t.forward(8)
            t.seth(90)
            t.forward(80)

        #
        self.setxy(-200,-80)
        p3 = t.position()
        t.color('green')
        t.fillcolor('green')
        t.begin_fill()
        t.seth(120)
        t.forward(30)
        t.seth(330)
        t.forward(30)
        t.seth(60)
        t.forward(40)
        t.seth(260)
        t.forward(45)
        t.setpos(p3)
        t.end_fill()

if __name__ == '__main__':
    for x in (0,350):
        sheep = Sheep(x)
        sheep.create_sheep()
    time.sleep(5)

 

 实际效果(2只羊):

 

 

PS:circle函数使用记录

 turtle.circle(radius, extent=None, steps=None)
描述: 以给定半径画圆
参数:
radius(半径); 半径为正(负),表示圆心在画笔的左边(右边)画圆
extent(弧度) (optional);
steps (optional) (做半径为radius的圆的内切正多边形,多边形边数为steps)

radius > 0,逆时针画圆

radius < 0,顺时针画圆

extent > 0,取正方向的圆

extent < 0,取反方向的圆

 

参考资料

https://ibaotu.com/sucai/187303.html

https://www.cnblogs.com/nowgood/p/turtle.html#_nav_6

https://www.cnblogs.com/yu-liang/p/9166003.html

https://blog.csdn.net/qq_33733970/article/details/80373247

https://www.jb51.net/article/130181.htm

https://www.jb51.net/article/139349.htm

 

posted on 2018-08-21 18:21  一個未来  阅读(18016)  评论(0编辑  收藏  举报

导航