本文基于64位windows系统(鼠标右键点击桌面“此电脑”图标——属性可查看电脑系统版本)、python3.x(pycharm自动安装的版本, 3.0以上)。文中代码内容所使用的工具是pycharm-community-2020.1,实践中如有碰到问题,可留言提问。
前阵子有看到zh上有大神画了这个哆啦A梦的大头贴,自己也来试了一下,很简单,但长篇整段的代码对刚刚学会海龟绘图语法的初学者来说还是有一定难度,所以来做一个拆解版详细步骤讲解实现。
言归正传,先上效果图。
调整画笔粗细到8
隐藏画笔
画一个半径为120的圆
填充成蓝色(颜色值由取色吸管吸色测量得出)
import turtle as t
t.pensize(8)
t.hideturtle()
# 猫脸外圈蓝色
t.fillcolor('#00A1E8')
t.begin_fill()
t.circle(120)
t.end_fill()
调整画笔粗细到3
画一个半径为100的圆
填充成白色(颜色值由取色吸管吸色测量得出)
# 猫脸内圈白色
t.pensize(3)
t.fillcolor('white')
t.begin_fill()
t.circle(100)
t.end_fill()
抬起画笔
移动至坐标(0,134)准备画鼻子
调整画笔粗细到4
落下画笔
画一个半径为18的圆
填充成红色(颜色值由取色吸管吸色测量得出)
# 鼻子
t.penup()
t.home()
t.goto(0, 134)
t.pendown()
t.pensize(4)
t.fillcolor("#EA0014")
t.begin_fill()
t.circle(18)
t.end_fill()
抬起画笔
移动至坐标(7,155)准备画鼻尖的白色圆点
调整画笔粗细到2
落下画笔
画一个半径为4的圆
画笔白色,填充白色(颜色值由取色吸管吸色测量得出)
# 鼻尖
t.penup()
t.goto(7, 155)
t.pensize(2)
t.color('white', 'white')
t.pendown()
t.begin_fill()
t.circle(4)
t.end_fill()
抬起画笔
移动至坐标(-30,160)准备画左眼
调整画笔粗细到4
落下画笔
画笔黑色,填充白色(颜色值由取色吸管吸色测量得出)
定义绘制步长变量a,设置初始值为0.4
循环控制总角度120:
当角度等于0-30度或角度等于60-90度时:
每循环一次步长a增加0.08
每循环一次画笔左转3度
每循环一次向前绘制步长变量a
否则:
每循环一次步长a减少0.08
每循环一次画笔左转3度
每循环一次向前绘制步长变量a
# 左眼
t.penup()
t.goto(-30, 160)
t.pensize(4)
t.pendown()
t.color('black', 'white')
t.begin_fill()
a = 0.4
for i in range(120):
if 0 <= i < 30 or 60 <= i < 90:
a = a + 0.08
t.left(3) # 向左转3度
t.forward(a) # 向前走a的步长
else:
a = a - 0.08
t.left(3)
t.forward(a)
t.end_fill()
抬起画笔
移动至坐标(30,160)准备画右眼
调整画笔粗细到4
落下画笔
画笔黑色,填充白色(颜色值由取色吸管吸色测量得出)
循环控制总角度120:
当角度等于0-30度或角度等于60-90度时:
每循环一次步长a增加0.08
每循环一次画笔左转3度
每循环一次向前绘制步长变量a
否则:
每循环一次步长a减少0.08
每循环一次画笔左转3度
每循环一次向前绘制步长变量a
# 右眼
t.penup()
t.goto(30, 160)
t.pensize(4)
t.pendown()
t.color('black', 'white')
t.begin_fill()
for i in range(120):
if 0 <= i < 30 or 60 <= i < 90:
a = a + 0.08
t.left(3) # 向左转3度
t.forward(a) # 向前走a的步长
else:
a = a - 0.08
t.left(3)
t.forward(a)
t.end_fill()
抬起画笔
移动至坐标(-38,190)准备画左眼内部
调整画笔粗细到8
落下画笔
右转-30度,绘制步长15的线条
右转70度,绘制步长15的线条
# 左眼内部
t.penup()
t.goto(-38, 190)
t.pensize(8)
t.pendown()
t.right(-30)
t.forward(15)
t.right(70)
t.forward(15)
抬起画笔
移动至坐标(15,185)准备画右眼内部黑色眼球
调整画笔粗细到4
落下画笔
画笔黑色,填充黑色(颜色值由取色吸管吸色测量得出)
画一个半径为13的圆
# 右眼内部
t.penup()
t.goto(15, 185)
t.pensize(4)
t.pendown()
t.color('black', 'black')
t.begin_fill()
t.circle(13)
t.end_fill()
抬起画笔
移动至坐标(13,190)准备画右眼黑色眼球内部的白色圆点
调整画笔粗细到2
落下画笔
画笔白色,填充白色(颜色值由取色吸管吸色测量得出)
画一个半径为5的圆
# 右眼内部白色圆点
t.penup()
t.goto(13, 190)
t.pensize(2)
t.pendown()
t.color('white', 'white')
t.begin_fill()
t.circle(5)
t.end_fill()
抬起画笔
移动至坐标(0,134)并恢复初始状态,准备画鼻子下面的黑色竖线
调整画笔粗细到4
落下画笔
画笔黑色(颜色值由取色吸管吸色测量得出)
右转90度
绘制步长40的线条
# 鼻子下面的黑色竖线
t.penup()
t.home()
t.goto(0, 134)
t.pensize(4)
t.pencolor('black')
t.pendown()
t.right(90)
t.forward(40)
抬起画笔
移动至坐标(0,124)并恢复初始状态,准备画右边从上往下数的第1根胡子
调整画笔粗细到3
落下画笔
画笔黑色(颜色值由取色吸管吸色测量得出)
左转10度
绘制步长80的线条
————————————————————————————————
抬起画笔
移动至坐标(0,114)并恢复初始状态,准备画右边从上往下数的第2根胡子
调整画笔粗细到3
落下画笔
画笔黑色(颜色值由取色吸管吸色测量得出)
左转6度
绘制步长80的线条
————————————————————————————————
抬起画笔
移动至坐标(0,104)并恢复初始状态,准备画右边从上往下数的第3根胡子
调整画笔粗细到3
落下画笔
画笔黑色(颜色值由取色吸管吸色测量得出)
左转0度
绘制步长80的线条
# 右边的胡子(第1根)
t.penup()
t.home()
t.goto(0, 124)
t.pensize(3)
t.pencolor('black')
t.pendown()
t.left(10)
t.forward(80)
# 右边的胡子(第2根)
t.penup()
t.home()
t.goto(0, 114)
t.pensize(3)
t.pencolor('black')
t.pendown()
t.left(6)
t.forward(80)
# 右边的胡子(第3根)
t.penup()
t.home()
t.goto(0, 104)
t.pensize(3)
t.pencolor('black')
t.pendown()
t.left(0)
t.forward(80)
抬起画笔
移动至坐标(0,124)并恢复初始状态,准备画左边从上往下数的第1根胡子
调整画笔粗细到3
落下画笔
画笔黑色(颜色值由取色吸管吸色测量得出)
左转170度
绘制步长80的线条
————————————————————————————————
抬起画笔
移动至坐标(0,114)并恢复初始状态,准备画左边从上往下数的第2根胡子
调整画笔粗细到3
落下画笔
画笔黑色(颜色值由取色吸管吸色测量得出)
左转174度
绘制步长80的线条
————————————————————————————————
抬起画笔
移动至坐标(0,104)并恢复初始状态,准备画左边从上往下数的第3根胡子
调整画笔粗细到3
落下画笔
画笔黑色(颜色值由取色吸管吸色测量得出)
左转180度
绘制步长80的线条
# 左边的胡子(第1根)
t.penup()
t.home()
t.goto(0, 124)
t.pensize(3)
t.pencolor('black')
t.pendown()
t.left(170)
t.forward(80)
# 左边的胡子(第2根)
t.penup()
t.home()
t.goto(0, 114)
t.pensize(3)
t.pencolor('black')
t.pendown()
t.left(174)
t.forward(80)
# 左边的胡子(第3根)
t.penup()
t.home()
t.goto(0, 104)
t.pensize(3)
t.pencolor('black')
t.pendown()
t.left(180)
t.forward(80)
抬起画笔
移动至坐标(-70,70),准备画下边沿圆弧
调整画笔粗细到6
落下画笔
画笔黑色,填充红色(颜色值由取色吸管吸色测量得出)
恢复画笔初始方向并右转60度
绘制半径80,角度40的圆弧
绘制半径80,角度80的圆弧
————————————————————————————————
抬起画笔
恢复初始
移动至坐标(-80,70),准备画上边沿横线
落下画笔
绘制步长160的线条
# 嘴巴(下边沿圆弧和颜色填充)
t.penup()
t.goto(-70, 70)
t.pendown()
t.color('black', 'red')
t.pensize(6)
t.setheading(-60)
t.begin_fill()
t.circle(80, 40)
t.circle(80, 80)
t.end_fill()
# 嘴巴(上边沿的横线)
t.penup()
t.home()
t.goto(-80, 70)
t.pendown()
t.forward(160)
抬起画笔
恢复初始
移动至坐标(-50,50),准备画舌头
调整画笔粗细到1
落下画笔
画笔黑色,填充土黄色(颜色值由取色吸管吸色测量得出)
恢复画笔初始方向并左转40度
绘制半径-40,角度40的圆弧
绘制半径-40,角度40的圆弧
恢复画笔初始方向并左转40度
绘制半径-40,角度40的圆弧
绘制半径-40,角度40的圆弧
恢复画笔初始方向并左转220度
绘制半径-80,角度40的圆弧
绘制半径-80,角度40的圆弧
# 舌头
t.penup()
t.home()
t.goto(-50, 50)
t.pendown()
t.pensize(1)
t.fillcolor("#eb6e1a")
t.setheading(40)
t.begin_fill()
t.circle(-40, 40)
t.circle(-40, 40)
t.setheading(40)
t.circle(-40, 40)
t.circle(-40, 40)
t.setheading(220)
t.circle(-80, 40)
t.circle(-80, 40)
t.end_fill()
抬起画笔
移动至坐标(-70,12),准备画红色围巾
调整画笔粗细到14
落下画笔
画笔红色(颜色值由取色吸管吸色测量得出)
恢复画笔初始方向并右转20度
绘制半径200,角度30的圆弧
绘制半径200,角度10的圆弧
# 领带
t.penup()
t.goto(-70, 12)
t.pensize(14)
t.pencolor('red')
t.pendown()
t.setheading(-20)
t.circle(200, 30)
t.circle(200, 10)
抬起画笔
移动至坐标(0,-46),准备画铃铛
调整画笔粗细到3
落下画笔
画笔黑色,填充黄色(颜色值由取色吸管吸色测量得出)
绘制一个半径25的圆
————————————————————————————————
抬起画笔
移动至坐标(-5,-40),准备画铃铛细节部分
调整画笔粗细到2
画笔黑色,填充黄绿色(颜色值由取色吸管吸色测量得出)
绘制一个半径5的圆
调整画笔粗细到3
右转115度
绘制步长7的线条
# 铃铛
t.penup()
t.goto(0, -46)
t.pendown()
t.pensize(3)
t.color("black", '#f8d102')
t.begin_fill()
t.circle(25)
t.end_fill()
# 铃铛细节
t.penup()
t.goto(-5, -40)
t.pendown()
t.pensize(2)
t.color("black", '#79675d')
t.begin_fill()
t.circle(5)
t.end_fill()
t.pensize(3)
t.right(115)
t.forward(7)
t.done()