Python turtle模块实战:绘制机器猫的主体

我们在上一节教程中已经绘制了机器猫的头部,本节教程我们绘制机器猫的主干。

body()函数

下面我们定义 body() 函数,它用来绘制机器猫的身体。该函数先绘制一个蓝色的矩形表示身体,然后再绘制一个白色的圆,表示机器猫的大肚子。接下来,绘制一个红色的长方形,表示红丝带,用于分隔开脑袋和身体。最后,绘制一个半圆,表示机器猫的腿。

body() 函数的代码如下所示。
def body():   
    #蓝色的身体
    color("blue","blue")
    penup()
    goto(-50,-40)
    drawRect(100,80,True)
    #白色的大肚子
    color("white","white")
    penup()
    goto(0,-30)
    drawRound(40,True)
    #红色丝带
    color("red","red")
    penup()
    goto(-60,-35)
    drawRect(120,10,True)
    #白色的腿
    color("white","white")
    penup()
    goto(15,-127)
    pendown()
    setheading(90)
    begin_fill()   
    circle(14,180)
    end_fill()

先调用 color() 函数,将画笔和填充的颜色都设置为蓝色。然后调用 penup() 函数,让画笔抬起,先不要在画布上留下笔迹。调用 goto() 函数将画笔移动到指定位置。然后调用自定义函数 drawRect(),绘制一个长为 100 像素、宽为 80 像素,用蓝色填充的矩形,表示机器猫的身体。

然后调用 color() 函数,将画笔和填充的颜色都设置为白色。然后调用 penup() 函数,让画笔抬起,先不要在画布上留下笔迹。调用 goto() 函数将画笔移动到指定位置。然后调用自定义函数 drawRound(),绘制一个半径为 40 像素、用白色填充的圆形,表示机器猫的大肚子。

接下来,再次调用 color() 函数,将画笔和填充的颜色都设置为红色。然后调用 penup() 函数,让画笔抬起,先不要在画布上留下笔迹。调用 goto() 函数将画笔移动到指定位置。然后调用自定义函数 drawRect(),绘制一个长为 120 像素、宽为 10 像素,用红色填充的扁扁的矩形,用来分隔开机器人的身体和脑袋。这是机器人的红丝带,也是挂铃铛的地方。

然后调用 color() 函数,将画笔和填充的颜色都设置为白色。然后调用 penup() 函数,让画笔抬起,先不要在画布上留下笔迹。调用 goto() 函数将画笔移动到指定位置。调用 pendown() 函数落下画笔。调用 setheading(90),设置小海龟启动时运动的方向,也就是让小海龟旋转90度。调用 begin_fill() 函数,开始填充。调用 circle(14,180),绘制一个半径为 14 像素的半圆形。然后调用 end_fill() 函数,停止填充。这样就绘制完了机器猫的两条腿。

调用这个函数,看一下绘制效果,如图 1 所示。

body()函数
图 1

feet() 函数

接下来,我们定义 feet() 函数,用来绘制机器猫的脚。

feet() 函数的代码如下所示。
def feet():
    #左脚
    color("black","white")
    penup()
    goto(-30,-110)
    drawRound(20,True) 
    #右脚
    color("black","white")
    penup()
    goto(30,-110)
    drawRound(20,True)

调用 color() 函数,将画笔颜色设置为黑色,将填充颜色设置为白色。然后调用 penup() 函数,让画笔抬起,先不要在画布上留下笔迹。调用 goto() 函数将画笔移动到x坐标为 −30、y 坐标为  −110 的位置。然后调用自定义函数 drawRound(),绘制一个半径为 20 像素、用白色填充的圆形,表示机器猫的左脚。

然后重复类似的动作,绘制机器猫的右脚。代码基本上是相同的,只是移动的坐标有所不同,这里就不再赘述。调用 feet() 函数,看一下绘制效果,如图 2 所示。

feet() 函数
图 2

arms() 函数

接下来,我们定义 arms() 函数,用来绘制机器猫的胳膊。这里用两个四边形表示机器猫的两条胳膊。arms() 函数的代码如下所示。
def arms():            
    #左胳膊
    color("blue","blue")
    penup()
    begin_fill()
    goto(-51,-50)    
    pendown()
    goto(-51,-75)
    left(70)
    goto(-76,-85)
    left(70)
    goto(-86,-70)
    left(70)
    goto(-51,-50)
    end_fill()
    #右胳膊
    color("blue","blue")
    penup()
    begin_fill()
    goto(49,-50)    
    pendown()
    goto(49,-75)
    left(70)
    goto(74,-85)
    left(70)
    goto(84,-70)
    left(70)
    goto(49,-50)
    end_fill()

调用 color() 函数,将画笔颜色和填充颜色都设置为蓝色。然后调用 penup() 函数,让画笔抬起,先不要在画布上留下笔迹。调用 begin_fill() 函数表示开始填充。调用 goto() 函数将画笔移动到指定位置。

然后调用 pendown() 函数落下画笔。调用 goto() 函数,绘制一条直线。然后调用函数 left(70),表示向左旋转 70 度。调用 goto() 函数,绘制第二条直线。然后调用函数 left(70),表示向左旋转 70 度 。调用 goto() 函数,绘制第三条直线。然后调用函数 left(70),表示再次向左旋转 70 度。调用 goto() 函数,绘制第四条直线。

调用 end_fill() 函数,完成颜色的填充。这样我们就完成了一个用蓝色填充的四边形,用它来表示机器猫的左胳膊。

然后重复类似的动作,绘制右胳膊。代码基本相同,只是移动的坐标位置有所不同,这里不再赘述。调用一下 arms() 函数,看一下绘制效果,如图 3 所示。

arms() 函数
图 3

hands() 函数

接下来,我们定义了 hands() 函数,来绘制机器猫的手。这里用两个白色填充的圆来表示机器猫的手。hands() 函数的代码和 feet() 函数比较类似,这里不再做过多的解释,直接列出了代码。
def hands():          
    #左手
    color("black","white")
    penup()
    goto(-90,-71)
    drawRound(15,True)
    #右手
    color("black","white")
    penup()
    goto(90,-71)
    drawRound(15,True)
调用 hands() 函数,看一下绘制效果,如图 4 所示。

hands() 函数
图 4

bell() 函数

接下来,我们定义了一个 bell() 函数,来绘制铃铛。可以看到,铃铛是在一个黄色圆上,由中间的两条黑线和下方的一个小黑圈组成的。所以,我们先绘制一个用黄色填充的圆;然后绘制一个没有填充的矩形,表示铃铛中间分开上下部分的横条。在矩形下面,再绘制一个黑色填充的圆。

bell() 函数代码比较简单,这里也不再过多地解释,直接列出代码。
def bell(): 
    #黄色实心圆表示铜铃
    color("yellow","yellow")
    penup()
    goto(0,-41)
    drawRound(8,True)
    #黑色矩形表示花纹
    color("black","black")
    penup()
    goto(-10,-47)    
    drawRect(20,4,False)
    #黑色实心圆表示撞击的金属丸
    color("black","black")
    penup()
    goto(0,-53)
    drawRound(2,True)
调用这个函数,看一下其绘制效果,如图 5 所示。

bell()函数
图 5

package() 函数

最后,我们还要给机器猫绘制一个口袋,因此,这里定义一个 package() 函数来绘制口袋。这里用一个半圆来表示机器猫的口袋。package() 函数的代码比较简单,这里不再解释,直接列出了代码。
def package():    
    #半圆    
    color("black","black")
    penup()
    goto(-25,-70)
    pendown()
    setheading(-90)
    circle(25,180)
    goto(-25,-70) 
    hideturtle()
调用这个函数,看一下绘制效果,如图 6 所示。

package()函数
图 6
 
到这里,我们的机器猫就绘制完成了。可以和本章前面给出的机器猫的卡通形象对比一下,看看是不是挺像的呢?