在前面的海龟库学习中,我们知道了:
turtle.fd() 向前走
turtle.bk() 向后走
turtle.right() 右转
turtle.left() 左转
如果让小海龟在画布上任意直走,然后转弯,再直走,再转弯……循环下去,会发生什么?
脑补一下,会出现什么情况?
如果直走的步数和转弯的角度都是固定的,比如每次都是往前走50步,每次都右转90度,那就画出一个正方形,我们已经会了。
但如果步数和角度都是随机的呢?
运行后,你会发现小海龟像喝醉了一样,在画布上走出了一条蜿蜒曲折的线。每走一步,方向都在变,步长也在变。
最后形成了一幅抽象写意画。

这就是五彩斑斓写意画的雏形。
补充说明:因为每次都需要循环1000次,要等着程序全部运行完看效果非常浪费时间,所以可以加上这两行语句。
解释:
tracer 的默认参数是 True,也就是每执行一条绘图指令,就立刻在屏幕上显示出来。这样我们能看见每一步的绘制过程
tracer(False) 相当于告诉海龟:“你先别急着画,等全部画完了再一起显示。”这样就能瞬间看到完整效果,不用盯着看1000步慢慢画。
用了 tracer(False) 之后,最后一定要加一句 turtle.update(),否则画面不会显示。
前面是让海龟走直线,显得非常生硬,那么如何让海龟走出更加柔和的曲线呢?
先来看下面这个程序
每一步只走2个像素,只转1度,360步之后正好走完一圈。你能看出它是由360条直线组成的吗?看不出来。因为线段太短了,拼接在一起就变成了圆。
曲线是怎么画出来的?本质上就是用无数条极短的直线拼出来的。
当你把每条线段画得足够短、每次转角足够小时,看起来就是一条光滑的曲线。
- 每次走的步数变小了,从[1,50]的随机数变成[1,3]的随机数
- 循环次数变得多得多了(因为每次只走1~3步,需要循环更多次)
- 当angle的范围在(0,180],表示海龟向右转angle°
- 当angle的范围在[-180,0),表示海龟向左转angle°
细心的你,会发现还有需要解决的问题
怎么没有铺满屏幕,感觉没有循环50万次吧
怎么全是黑色,不是说好的五彩斑斓呢?
下面,我们逐一来解决
细心的你可能会发现:程序运行了很久,但画面并没有铺满整个屏幕 ——好像都集中在一个区域,四周空荡荡的。
原因很简单: 海龟有时走出屏幕之外了。它可能在屏幕外面走了很久,然后转着转着又回来了。在屏幕外面的内容是看不见的,所以那些区域永远是空的。
怎么解决呢?
可以设置一个安全区(显示范围),当海龟即将超出这个范围时,让它立马回到原点,再接着画。
这就需要用到if 语句来判断海龟是否在安全区了。
将下面的程序代码
改成👇
主要有三个变化:
增加了设置窗口大小的语句,如①所示,这就是显示范围
增加了设置边界语句,如②所示,定义安全区的边界,比窗口略小,留出余量
增加判断海龟是否超出安全区的语句,如③所示,超出则回到原点
获取海龟当前的位置坐标
画笔的抬起和落下
turtle.up() # 抬笔
turtle.down() # 落笔
程序运行后,如下图所示,是不是显示的内容变多了?
设置背景为黑色(效果更出彩),设置颜色列表,随机抽一个颜色进入循环,每当海龟要返回原点前,都要再随机捞颜色画画。可能喜欢动脑筋的小伙伴觉得程序不对,为什么不能这样写呢?我帮你们试过了,运行后很长时间都出不来效果。因为这个运算量很大,和电脑的运行速度也有关系。如果愿意挑战的伙伴可以自己试试。从固定步长到随机漫步,从直线到曲线,从单色到五彩斑斓 可以关注本公众号,在后台回复关键词:写意画,即可获取下载链接。