A022 《我要远航》编程 源码

时间:2024-01-20 19:23:38

一、课程介绍

本节课将以 while 无限循环为基础,结合动画原理、turtle 动画三件套,实现一个转动的船舵。

A022 《我要远航》编程 源码_while与for

二、重难点解析

A022 《我要远航》编程 源码_实现动画_02while 与 for

while True 与 for 循环可以嵌套使用,

一般会用到的是在无限循环中嵌套 for 循环。

无限次数的循环
    有限次数的循环

而在 for 循环中也可以嵌套 while True,但是这样的做法一般没有什么意义。

有限次数的循环
    无限次数的循环

A022 《我要远航》编程 源码_while与for_03动画三件套

· tracer(0)

turtle.tracer(0) 可以取消窗口上的绘画踪迹,也就是会把窗口上的绘画过程都省略,直接形成隐藏的图形。

注意是用 turtle. 使用。

· update()

turtle.update() 可以更新窗口,把隐藏的图形都展示出来。

注意是用 turtle. 使用。

· clear()

使用画笔的 clear 方法可以清除这支画笔画出来的图形。

p.clear()  # 清除画笔 p 画出的图形

A022 《我要远航》编程 源码_实现动画_04实现动画

实现动画,要先确定好动画过程中不断切换的图形,确保不断画出的图形有不同的细节。

· 在代码一开始使用 turtle.tracer(0) 取消绘画踪迹,让后面要画的图形能够一瞬间画出来,并隐藏着。

正式进入循环画图的阶段:

1、画第一个图形,

使用 turtle.update() 更新窗口,显示出这个瞬间画出的隐藏图形,

清空第一个图形;

2、画第二个图形,

使用 turtle.update() 更新窗口,显示出这个瞬间画出的隐藏图形,

清空第二个图形;

3、画第三个图形,

使用 turtle.update() 更新窗口,显示出这个瞬间画出的隐藏图形,

清空第三个图形;

一直不断重复这个过程,即可看到最终的动画效果。

三、单词卡

ship [ʃɪp] 船

backward [ˈbækwərd] 后退

tracer [ˈtreɪsər] 示踪剂

update [ˌʌpˈdeɪt] 更新

clear [klɪr] 清除

四、小试牛刀

4.1 源码操作

编写代码,实现一个转动的齿轮。

A022 《我要远航》编程 源码_实现动画_05

提示:

1、齿轮的主体由三个圆叠加形成,分别是最大的 300、 lightgray 圆,中间的 100、silver 圆,最小的 80、white 圆;

2、实现边缘一圈的凹陷:不断前进、画 50 的白色小圆、后退、偏转角度,类似画太阳的光线,只是在前进后要画一个白色小圆形成凹陷。

import turtle
p = turtle.Pen()
turtle.tracer(0)
p.ht()
p.penup()

while True:
    p.dot(300, 'lightgray')
    p.dot(100, 'silver')
    p.dot(80, 'white')
    
    n = 10
    for i in range(n):
        p.forward(150)
        p.dot(50, 'white')
        p.forward(-150)
        p.left(360/n)

    turtle.update()
    p.clear()
    p.left(1)
    
turtle.done()

4.2 源码操作

编写代码,实现一个上下弹跳、不断向前走的小球。

A022 《我要远航》编程 源码_动画三件套_06

提示:

1、小球的颜色是 lightgray;

2、向上或向下的距离都是 200,每次都移动 1。

import turtle
p = turtle.Pen()
turtle.tracer(0)
p.ht()
p.penup()
p.forward(-400)
p.left(80)

while True:
    for i in range(200):
        p.forward(1)
        p.dot(50, 'lightgray')
        turtle.update()
        p.clear()
    p.right(135)
    for i in range(200):
        p.forward(1)
        p.dot(50, 'lightgray')
        turtle.update()
        p.clear()
    p.left(135)
    
turtle.done()

五、大开脑洞

金箍棒横扫世界!!

A022 《我要远航》编程 源码_实现动画_07

1、金箍棒的长度是400,gold金色线段分别是100,red红色线段是200。

2、画下一次的金箍棒时后退回到开始的起点,然后偏转一定角度(不限制)。

import turtle
p = turtle.Pen()
turtle.tracer(0)
while True:
    p.right(18)
    p.pensize(8)
    p.pencolor('gold')
    p.forward(100)
    p.pencolor('red')
    p.forward(200)
    p.pencolor('gold')
    p.forward(100)
    turtle.update()
    p.penup()
    p.backward(400)
    p.pendown()
    p.clear()
    p.ht()
turtle.done()