上篇我们完成了准备工作:画好了赛道,五只小海龟也已经各就各位。
但它们还不会动。
今天我们要做三件事:
倒计时:3、2、1、跑!让比赛有仪式感
开始比赛:每只海龟随机前进,看谁先到终点
宣布结果:获胜的海龟戴上冠军奖杯
比赛开始前,来一个3秒倒计时,增加仪式感。
倒计时相应代码如下:

需要说明:
1、为什么要新建writer画笔对象?
如果直接用 turtle.write() 写倒计时,turtle.clear() 会清除所有海龟画的内容,包括起跑线、终点线、终点标志。
所以我们新建一个独立的writer画笔,专门负责写字。这样 writer.clear() 只清除倒计时文字,不影响其他内容。
2、turtle.write()的用法
对齐方式:align="left/center/right"
样式:font=("字体", 字号, "bold/normal/italic")
3、range(3, 0, -1) 表示什么?
在上篇文章中,我们已经创建了海龟列表turtles,里面存放着所有的小海龟,我们可以用for循环遍历海龟列表里的所有小海龟。
上面的代码实现的功能是,让每个海龟走了一次(随机步数)
对,只走了一次,仅此而已。
我们需要的是让小海龟们不停地往前走。
我们目前只学过for循环,是不是可以这样写?
思路是:将内层整个for循环作为循环体,重复下去。
问题来了,i循环中到底要循环多少次呢?
不确定!因为海龟们走的步数都是随机的。
谁都不知道要循环多少次。
那就暂时写上一个比较大的数字吧,比如5000次
如果当某一个海龟走到终点,就可以确定获胜者了,结束比赛
关键说明:
1、这是一个双重循环,外层循环的变量是i,内层循环的变量是t
外层循环(i)控制“轮数”,
内层循环(t)控制“每轮中所有海龟各走一次”。
每一轮,五只海龟各走一次。
5000轮,就是5000次“五只海龟各走一次”。
2、如何提前结束比赛?
在内层循环中,每只海龟走完之后,立即判断它的 y 坐标是否超过终点线(250)。
如果到达终点,记录获胜者,然后跳出所有循环。
break语句是中断循环,但break只跳出当前循环。
此时的break语句是在内层循环,break之后,跳出了内层循环,但还没有跳出外层循环,也就意味着海龟们还要往前走。
解决方案:
关键说明:
1、比赛前,先将winner 赋值为None
None 是 Python 里的一个特殊值,表示 “什么都没有”,不是 0(0是个数字),不是空字符串 "",就是纯粹的“无”
这里可以理解为冠军开始为空(待定)
2、当某只海龟到达终点,winner = t(冠军产生,不再是 None)
3、下一次外层循环开始,检测到 winner is not None,执行 break(这个break是外层循环里的),会直接跳出外层循环,结束整个比赛
这一段代码比较简单,直接让冠军回到原点,并且显示文字