一、课程介绍

本节课将通过修改画笔的外形,创作一些有趣的作品。

A008 《变形记》编程 源码_《变形记》编程 源码


二、知识重难点解析

A008 《变形记》编程 源码_《变形记》编程 源码_02画笔外形

shape()

画笔调用 shape() 方法,可以设置画笔“外形”,默认是 classic ,其他形状如下:

A008 《变形记》编程 源码_一语_03

如:

import turtle
p = turtle.Pen()

p.shape('circle')    # 画笔设置成“圆”外形

turtle.done()

A008 《变形记》编程 源码_《变形记》编程 源码_04

A008 《变形记》编程 源码_一语_05添加外形

addshape()

要将画笔设置成自己想要的外形,需要提供一张gif格式的图片,用 turtle 调用 addshape() 方法,将这张gif图片添加到 turtle 外形表中,画笔才能调用 shape() 方法将其外形设置成这张图片的模样。

import turtle turtle.addshape('fish.gif')    # 将“fish”添加到外形表
p = turtle.Pen() p.shape('fis.gif')    # 将画笔外形设成“fish”*
turtle.done()

A008 《变形记》编程 源码_添加画笔外形_06显示&隐藏画笔


showturtle() 或 st():

显示画笔,使画笔变成可见状态。

showturtle() 方法可简写为 st()。

hideturtle() 或 ht():

隐藏画笔,使画笔不可见。

hideturtle() 方法可简写为 ht()。


三、单词卡

shape [ʃeɪp]   外形

show [ʃoʊ]   显示

fish [fɪʃ]   鱼

heart [hɑːrt]   心


四、小试牛刀

4.1 源码操作

编写代码实现小女孩奔月的效果。

A008 《变形记》编程 源码_《变形记》编程 源码_07

### 代码 ###

import turtle
p = turtle.Pen()
p.penup()

p.forward(250)
p.left(90)
p.forward(210)
p.dot(200, 'gold')

p.left(135)
p.forward(600)

turtle.addshape('facebook4.png')
p.shape('facebook4.png')

for i in range(600):
    p.forward(-1)

turtle.done()

4.2 源码操作

实现一个火柴人发射火球的效果。

A008 《变形记》编程 源码_一语_08

import turtle
p = turtle.Pen()

p.penup()
p.forward(-300)
p.pendown()
p.dot(100)
p.right(90)
p.forward(200)
p.right(45)
p.forward(100)
p.forward(-100)
p.left(90)
p.forward(100)
p.forward(-100)
p.right(45)
p.forward(-100)
p.left(90)
p.forward(100)
p.left(90)
p.forward(25)
p.forward(-50)

p.forward(25)
p.right(90)
p.penup()
p.forward(30)
turtle.addshape('fireball.gif')
p.shape('fireball.gif')
for i in range(500):
    p.forward(1)

turtle.done()

4.3 源码操作

实现一个火柴人不断发射火球和冰球的效果。

A008 《变形记》编程 源码_添加画笔外形_09

A008 《变形记》编程 源码_添加画笔外形_10

提示:

  • 绘制时注意火球和冰球的发射间隔;
  • 火球:fireball.gif;
  • 冰球:iceball.gif。
### 代码~ ###

import turtle
p = turtle.Pen()

p.penup()
p.forward(-300)
p.pendown()
p.dot(100)
p.right(90)
p.forward(200)
p.right(45)
p.forward(100)
p.forward(-100)
p.left(90)
p.forward(100)
p.forward(-100)
p.right(45)
p.forward(-100)
p.left(90)
p.forward(100)
p.left(90)
p.forward(25)
p.forward(-50)

p.forward(25)
p.right(90)
p.penup()
p.forward(30)

for i in range(50):
    turtle.addshape('fireball.gif')
    p.shape('fireball.gif')
    p.forward(500)
    p.ht()
    p.forward(-500)
    turtle.addshape('iceball.gif')
    p.shape('iceball.gif')
    p.st()
    p.forward(500)
    p.ht()
    p.forward(-500)
    p.st()

turtle.done()


五、扩展练习

A008 《变形记》编程 源码_一语_11

### 代码 ###

import turtle
p=turtle.Pen()
turtle.bgpic("阿短和编程猫.gif")
turtle.addshape("heart.gif")

p.shape("heart.gif")
p.penup()

for i in range(10):
    p.forward(200)
    p.ht()
    p.forward(-200)
    p.st()

turtle.done()


六、自由发挥

画一只到处走的小乌龟吧~

A008 《变形记》编程 源码_添加画笔外形_12

import turtle
p=turtle.Pen()

p.shape('turtle')
p.penup()
p.forward(300)
p.right(180)
p.forward(200)
p.right(90)
p.forward(50)

turtle.done()