![Scratch 编程竞赛指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/247/33094247/b_33094247.jpg)
1.2 蝴蝶数花朵
教学目标:熟悉程序开发的流程。
知道什么是编程以后,下面介绍程序开发的流程。通常,很多学习者习惯在拿到开发需求后直接开始编程,边开发,边发现问题,边修改,甚至经常推倒重来。平时时间很充裕,体会不明显,但在竞赛时分秒必争,显然这种蛮干的方式是错误的!那么正确的程序开发流程应该是什么样呢?
1.分析开发需求。
2.设计算法思路。
3.开始编写程序。
4.调试程序解决bug。
仔细想一想,这与在考试时解一道数学题的流程是一样的。做题的四步骤:读题,思路,解题,检查。
千里之行始于足下,养成良好的编程习惯是学习编程的第一步!
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P17_358.jpg?sign=1739551321-HagQyaWloiV04FlXiYe2ejZHkhH0vGgt-0-8cc85188d10a4910eaca799547007d46)
开发需求001:
选择背景库中Flowers作为背景,添加一个蝴蝶角色Butterfly2。通过编程,让蝴蝶依次飞落到背景的4朵花上,并在落下的同时报出这是第几朵花,如图1.2.1所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P18_451.jpg?sign=1739551321-SpHZEcAKApnwK3d6wGRSzO9SJDbuncse-0-e852f214d9e62e450599b03d89900530)
图1.2.1
分析:
按照顺序结构,让蝴蝶角色依次移到四朵花的位置,并且报数。
具体步骤:
1.准备素材。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-T18_11291.jpg?sign=1739551321-OO3CGZeXI1838afCQHqKTgAi5RUJMvsS-0-d38831a8c3934d716f0b58b05c4e6274)
2.当绿旗被点击,移到第一朵花,并且说1。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P18_452.jpg?sign=1739551321-7iGqBtGo4Dn5Eu02RAsqHVvitevDlkFm-0-8eabed823b02923904285ca2e1c17672)
注意:“移到……”这个积木,可以先把角色拖拽到舞台目标位置,然后在功能区的代码中把“移到……”积木直接拖到编程区域中。
积木中能修改的部分叫做参数。其实这些积木都是Scratch开发团队封装好的,学习者只需学会使用就可以了,不必深究积木内部封装的具体功能。关于自制积木,1.6节(不带参数)及2.1节(带参数)中有详细介绍。
3.依次移到其余的花朵上。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P18_453.jpg?sign=1739551321-hPN2JtDDmsgDnzVgH5XRE4rXiCq5KBKh-0-128923e7ca4ad2e50a519b2d8ac532c7)
开发需求002:
在调试程序001的过程中,很容易就发现蝴蝶从一朵花飞到另一朵花的过程很生硬,是直接变过去的,不符合蝴蝶飞行的实际情况。有没有方法让蝴蝶缓慢地飞过去,并且蝴蝶在飞行过程中,能否让其连续拍打翅膀?
分析:
在竞赛中,出题者会重点考察参赛选手对题意的理解。例如,题目中有“缓慢地移动”“缓慢地飞过去”“要看到移动的过程”等字眼,这就表明绝对不能让角色瞬间移到目标位置,即必须看到移动的过程,这时就可以使用“在1秒内滑行到……”积木。
具体步骤:
1.蝴蝶初始状态,程序见下图(左)。
2.依次缓慢地飞到其余的花朵上。程序见下图(右)。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P19_462.jpg?sign=1739551321-zt9ppOTBmVQtLquf76zRdulTMO1g76nJ-0-a39b3fdeac8d159227a650c35cfb5508)
3.蝴蝶不停地拍打翅膀。
在Scratch中,角色库中的大部分角色都包含多个造型,本题中蝴蝶角色有两个造型,如图1.2.2所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P19_463.jpg?sign=1739551321-PzWBQjS3aXg5Wv9Gy0Zw4mVJNTcgdziC-0-7f5b8cf44f6608fcab4f8ce9f5b41287)
图1.2.2
要想使蝴蝶在程序运行的整个过程中不停地拍打翅膀,都要不停地切换下一个造型。程序见右下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P19_464.jpg?sign=1739551321-Ec2mTRv9AvEzkJhEcQPRFLc5mqINGwDK-0-a482955334db22e3683a95ef0106d09f)
那么问题来了,这个循环应该放在哪呢?
尝试一:放在程序的最下面。程序见下图(左)。
结论:
错误!运行程序后,程序按照顺序执行,先依次缓慢移到四朵花上,然后进入循环一直切换造型。不符合题意。
尝试二:放在程序的最上面。程序见下图(右)。
结论:
错误!我们会发现重复执行积木的下面没有凸起,积木无法拼接在一起。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P20_470.jpg?sign=1739551321-fC2EM5mV0LAUESeJn5gIamrfMIjeJXZX-0-255cbb263bdbed0a445f401e50edff0b)
尝试三:放在循环的里面。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P20_472.jpg?sign=1739551321-gjtPIbL7hp7pPJMl0ZgoImicBHMoNFzt-0-bf8e4936cb029037fcdb85efd87e6a6c)
结论:
错误!运行程序后,进入循环。在循环体中,程序也是按照顺序执行。先切换了造型,然后依次访问四朵花,进入下一次循环,再切换造型,访问四朵花……很明显,也是不符合题意的。
尝试四:再来一个“当绿旗被点击”积木。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P21_481.jpg?sign=1739551321-tQReaVoWH8ciM0IbNtpgWpRRgmUVW3I6-0-7c0ef103b09d583e7b7a9d386d0a0722)
结论:
正确!点击绿旗后,两个脚本同时运行,互不影响。左边的脚本负责移动,右边的脚本负责切换造型。这种多线程的方法在Scratch中非常容易实现,也经常用到!
试一试:
创建1个Beetle角色、4个Ballerina角色。Beetle放在舞台中心(0,0),4个Ballerina放在舞台的四个角落,如图1.2.3所示。当绿旗被点击,4个Ballerina随机产生一个造型。Beetle先面向第1个角色缓慢移动,走到角色所在位置时说出他的造型名称,然后迅速回到舞台中心,准备向第2个角色移动……如此反复,将4个角色都走完。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P21_482.jpg?sign=1739551321-8ku5TVmJcEHmzyqVaND0oUDANOkMAWp7-0-60f77c9a8b41f7ee230c91a11b8a9b25)
图1.2.3