![Scratch 编程竞赛指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/247/33094247/b_33094247.jpg)
1.7 小星星
教学目标:掌握音乐模块,认识遍历。
遍历就是沿着某个路径,依次访问序列中的所有元素。
在本题中,只简单了解如何对列表进行遍历。关于遍历的用法,将在3.1节中进行详细的讲解。
开发需求001:
创建Star角色,运行程序后,让它在舞台上不停地变换位置闪烁,同时弹奏音乐“小星星”。音量用滑杆控制,滑块范围0~100。演奏乐器用滑杆控制,滑块范围1~21。可以用滑杆实时控制音量和乐器。
简谱:
1 1 5 5 6 6 5(一闪一闪亮晶晶)
4 4 3 3 2 2 1(满天都是小星星)
分析:
本题只有小星星一个角色,由于演奏音符、闪烁、滑杆控制要同步进行,所以必须使用多线程。
具体步骤:
1.准备素材。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-T53_11368.jpg?sign=1739381224-7CoTrnBm8XQdTxneKQurlNfkiuLhJKRL-0-c993cf20ad4cb7da820c10c07541b86f)
2.弹奏音乐“小星星”。
在Scratch 3.0中,使用音乐模块需要先添加扩展。见图1.7.1。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P53_1953.jpg?sign=1739381224-gaN7RuChAMHft7shQEvETQkEcnfsSspI-0-92e4b1d620e200a81f1eb311b6aba7d9)
图1.7.1
导入后找到“演奏音符”积木。点击第一个参数60,弹出钢琴键盘。见图1.7.2。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P53_1954.jpg?sign=1739381224-jsgpNKqrgdjpI9sGNcFH26855tBTI1hf-0-f68da62f2c3c280f4cdff6be6886f86b)
图1.7.2
C(60)就是中央C,发do音。点击向左箭头切换为低音,点击向右箭头切换为高音。从do往右,所有的白键依次是re、mi、fa、sol、la、xi。这些键音可足够演奏出“小星星”。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P54_1961.jpg?sign=1739381224-SnORf7WDRR8BND7jTDpL1QA7tAGuDkhk-0-a4a730b9640ff8e32bdb35d1ee5330a8)
3.用滑杆控制音量及乐器。
说到滑杆,首先会想到变量的滑杆模式。创建两个变量,分别命名为“音量”和“乐器”。在舞台上,右键点击变量,将其改为滑杆。见图1.7.3。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P54_1962.jpg?sign=1739381224-jKam4AKL9cmAyDIDBejjjBsPSAsyZ5OX-0-af74850e4fc85b070f3091f07c504dba)
图1.7.3
滑杆模式的默认范围是0~100,根据题意,此处需要修改乐器的范围。见图1.7.4。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P55_1970.jpg?sign=1739381224-8OShlCVBfCXi4mfmjXEt1ATbGCKfU8cR-0-e9154d9a73277645ea8c2e6efe4828fb)
图1.7.4
两个变量有了,如果不在程序中使用的话,那就没有任何意义。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P55_1972.jpg?sign=1739381224-leTuBx0TZ8iXZltkbGv5r9L8jnhJAjq3-0-7e899196e9338ca881b6abc7ee296c87)
4.实现Star角色变换位置闪烁。
(1)移到舞台上的随机位置,两个指令都可以实现。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P55_1973.jpg?sign=1739381224-kxcM3F3qQTgx9XwmguZCXaGfEoRsGoir-0-643ecf6064aca3e5be7504b81d5f16a5)
(2)移到一个位置就要闪烁几下。
闪烁就是先隐藏再显示,并且交替几次。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P55_1975.jpg?sign=1739381224-gdsgbf2n5q4BdXGEzVAJjjhyjI3pwSDZ-0-4be641ee6ff1036a428fd4f25c92e0c0)
该程序在运行时是否存在问题?
有问题。因为程序执行的特别快,根本看不到变化的过程。那么,怎么办呢?程序按下图(左)改动一下即可。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P56_1985.jpg?sign=1739381224-zSZXpvqkQ75t703l4E8afJ5XCgOEMiBZ-0-aadca4f770e94b685e22fd3c24872dbf)
(左图)
每次移到一个随机位置,闪烁了几下,还要移到下一个随机位置,继续闪烁。所以是对这一组指令的重复执行。程序见下图(中)。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P56_1984.jpg?sign=1739381224-XXmW4KOqay7eGnqFKao6JQDU9OSVPUVD-0-85627ca69eeeca9e97addfb796877902)
(中图)
完整程序(见下图):
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P56_1986.jpg?sign=1739381224-yjKLSn2YLXrY0mExbknNduHHeDCvHyLj-0-7690badb4c8f50897d67cb81bfd00c74)
开发需求002:
现有14个音符已经在列表中,通过访问列表的方式,演奏出“小星星”。见图1.7.5。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P56_1987.jpg?sign=1739381224-9QKghDpqkCSp7N1iW1vOrnwhrZ5u51BZ-0-4c6c55a347db480a01de4308e08a1e4f)
图1.7.5
分析:
要想将装在列表里的音符弹出来,就要试图访问列表中的所有数据,这就是列表的遍历。
具体步骤:
1.准备遍历。
创建变量i,i是index的首字母,表示列表中数据前面的编号(索引)。因从第一项开始访问,所以将i设定为1。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P57_1995.jpg?sign=1739381224-QfCOzPiiH64Oq3oZ30ZKHq8IpfSkfCMJ-0-995ba5bb5636b77b66d99d65a415cb2c)
2.创建遍历循环,列表有多少项,就需要访问多少次。
在遍历循环中,每次都会访问列表的第i项,每访问完一项,都会将变量i增加1,准备访问下一项。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P57_1996.jpg?sign=1739381224-wXePBhuWbiopRYDJvXKOepoGdn7iRzdC-0-b7f9f0bbf3b245a3bbf661330fd105d1)
3.访问所有数据的目的是要把它演奏出来。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P57_1997.jpg?sign=1739381224-bvRrnAUQyV5O1TOuk6GeowTZwZHmVeqd-0-f957a2edac4a433aceb25d3fea8c0afb)
4.解决第7个音符和第8个音符中间的休止符。使用分支结构“如果……那么……”进行判断。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P57_1998.jpg?sign=1739381224-s1J6GdQWTfzNQUnHRKxgeEBtXQ5B4qAD-0-7bf02384df1f8746a190a75d0cf6b32a)
完整程序:
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P58_2006.jpg?sign=1739381224-CQ1ZU2f34dTpT8hLEGQGO2hzf8NX2vlp-0-c6dddb621a403b108a1d5c1c95078854)
试一试:
在程序002的基础上,如果小星星角色只能在规定的区域内移到随机位置闪烁,有什么好办法呢?
1.只能出现在红色区域内的随机位置,如图1.7.6所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P58_2007.jpg?sign=1739381224-IYHngvGD50TTzRGkLm14QjKNOBYITel7-0-776e87202f057b91c2a9771730ff802c)
图1.7.6
2.只能出现在绿色区域内的随机位置,如图1.7.7所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P58_2008.jpg?sign=1739381224-GeHfQJay32CqsfhZLVyZr1gy4GKDOACc-0-230912077c3e5387d1ddd7d4f5c8cc9f)
图1.7.7
3.只能出现在蓝色区域内的随机位置,如图1.7.8所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P59_2018.jpg?sign=1739381224-Fcrk6e6UeWAqs1nrIQQOXgW5BCV5JBCv-0-8d2706050a5179167bc85390b96ac781)
图1.7.8