> For the complete documentation index, see [llms.txt](https://docs.haohaodada.cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.haohaodada.cn/zai-xian-ru-men-ke-cheng/scratch-sensor-board-primer/lesson-5.md).

# 第5课 在Scratch中使用蜂鸣器——守卫松饼

小猫由于工作努力，主人奖励了它一个松饼。它舍不得吃，准备作为第二天的早餐。可是，松饼的香味引来了馋嘴的老鼠。我们可以用Scratch设计一个程序，通过传感器板上的蜂鸣器发出警报，帮助小猫守卫松饼。

![](/files/-LX1pa9qCFO_ddTIL1rf)

## 模块与指令

要完成本课的创意构思，需要了解以下的新知识、使用以下的新指令：

### “设置蜂鸣器频率”指令：

![](/files/-LX1pa9uE7gWXEGndMze)

通过设置参数可以改变蜂鸣器发出声音的频率。该指令默认参数值为“2500”，取值范围为（20，20000）。

人耳可以听到的声音频率范围，一般是在20赫兹到20000赫兹之间。20赫兹以下的“次声波”与高于20000赫兹的“超声波”，我们人耳是听不到的。根据人耳可听见的声音频率范围，设置不同的参数值，可以改变蜂鸣器的频率。

### “设置蜂鸣器音量”指令：

![](/files/-LX1pa9w4T50s5VoM91Q)

通过参数设置可以改变蜂鸣器发出声音的音量大小。该指令默认参数值为“10”，取值范围为（0，100）。

#### 试一试

请根据以下的程序图编写脚本，然后分别依据表格中的数据设置频率参数值，再运行程序后试听，最后选择合适的声音效果打“P”。

![](/files/-LX1pa9ygXaBchmFM7rH)

![](/files/-LX1paA-8ynn0WyRFiVW)

[单击此处](http://www.haohaodada.com/video/b10501)或者扫描下方二维码可以观看相关的视频。

![](/files/-LX1paA1Y2_B9HjqyRQS)

## 作品制作

要完成这个任务，我们可以先设置舞台，选取角色，设置老鼠的运动路线；然后判断老鼠与松饼之间的距离，距离越近，警报声越高、越急；再设置小猫能够跟随鼠标指针守卫松饼，老鼠也能够侦测与小猫之间的距离，当小于一定值时，它会逃回到初始位置。

### 第一步：设置舞台背景与角色

1.单击“舞台列表区”中的

![](/files/-LX1paA3WYjCgQQgVBS3)

按钮，在打开的“背景库”对话框中找到并双击“room3”缩略图，将“room3” 背景图片添加到舞台上。

2.单击“角色列表区”中的

![](/files/-LX1paA5GaOgTQWbQTDv)

按钮，在打开的“角色库”对话框中找到并双击“Cat2”缩略图，将“Cat2” 角色添加到舞台上。

3.按以上方法，继续从角色库中将“Mouse1”、“Muffin” 添加到舞台上；调整这三个角色的大小，将它们摆放到舞台合适的位置。

4.将角色列表区无用的角色删除；将舞台上无关的传感器数值隐藏起来。

![](/files/-LX1paA7bxvEADIdL-YC)

### 第二步：编写老鼠角色脚本

[单击此处](http://www.haohaodada.com/video/b10502)或者扫描下方二维码可以观看相关的视频。

![](/files/-LX1paA9GPRoEXGjJFFz)

老鼠角色脚本共有两段代码，可以在“角色列表区”中选中“Mouse1”角色，分别按以下步骤编写这两段代码：

第一段代码使老鼠能够面向松饼（Muffin）方向移动。首先指定“Mouse1”的起始坐标，其中X值为（-210，210）之间的随机数，y值为（-180）；然后重复移动，每次都是面向松饼（Muffin）方向，移动10步、等待0.2秒。

![](/files/-LX1paABUHTgH5JwVrks)

第二段代码用于侦测老鼠与小猫之间的距离。使用重复执行指令进行侦测判断，如果与小猫（Cat2）之间的距离小于150，那么老鼠（Mouse1）返回起始的随机位置。

![](/files/-LX1paADxY5PK5L7DsPi)

#### 想一想

1. 在以上代码中，Mouse1起始坐标的x值是一个随机数，你认为这样的指令有什么好处？你想让它每次从哪个位置随机出现？
2. 如果想让Mouse1的运动更加流畅，可以怎样修改参数？

[单击此处](http://www.haohaodada.com/video/b10503)或者扫描下方二维码可以观看相关的视频。

![](/files/-LX1paAFJd6tIZI_jG2x)

### 第三步：编写小猫角色脚本

[单击此处](http://www.haohaodada.com/video/b10504)或者扫描下方二维码可以观看相关的视频。

![](/files/-LX1paAHPblwMmzf2n0x)

小猫角色脚本比较简单，只要让小猫面向老鼠方向，同时跟随鼠标指针移动就行。具体可以按以下步骤编写代码：

首先在“角色列表区”中选中“Cat2”角色，然后在开始旗下面使用重复执行指令，让小猫不断地面向老鼠（Mouse1），同时移动到当前鼠标指针所在的位置。

![](/files/-LX1paAJ-2fu-cLsWsMW)

#### 试一试

如果不使用

![](/files/-LX1paALB2eTf_sqZWK1)

而是使用

![](/files/-LX1paAN6_7y0djvWzdf)

效果会如何？你喜欢哪种方式，为什么？

[单击此处](http://www.haohaodada.com/video/b10505)或者扫描下方二维码可以观看相关的视频。

![](/files/-LX1paAPecpgRy_li9hd)

### 第四步：编写松饼角色脚本

[单击此处](http://www.haohaodada.com/video/b10506)或者扫描下方二维码可以观看相关的视频。

![](/files/-LX1paARgSwVb5q0Pca9)

松饼（Muffin）的脚本有两段，可以在“角色列表区”中选中“Muffin”角色，分别按以下步骤编写这两段代码：

第一段脚本主要是侦测老鼠（Mouse1）与松饼（Muffin）之间的距离，并根据侦测所获得的数据做出判断：当与老鼠之间的距离小于100时，发出频率是1000、以0.5秒为间隔的报警声；当与老鼠之间的距离大于100时，发出频率是2000、以0.25秒为间隔的报警声；

![](/files/-LX1paATMVNH7dUl8Pxb)

第二段脚本用于判断老鼠有没有碰到松饼。首先显示松饼（Muffin）的第1个造型（muffin-a）；然后判断，如果碰到老鼠（Mouse1），则关闭蜂鸣器、将造型切换为第2个造型（muffin-b）、播放声音“pop”，等声音播放完毕停止程序运行。

![](/files/-LX1paAVg5-nQmouJt3u)

#### 练一练

在以上介绍的基础上进一步完善程序。比如增加舞台场景、添加其它角色，还可以再加上计分、计时、奖励系统等，使游戏变得更加好玩。

#### 拓展思考

我们听到的音乐，每个音符都是有固定频率的，比如C调音符相对应的频率如下图所示：

![](/files/-LX1paAXHtuvO5ox7rzr)

请你使用Scratch编写一段自动演奏《两只老虎》的音乐程序，或者编写一个能够用键盘弹奏的钢琴程序。与以前编写的类似程序不同的是，现在演奏音乐的，是传感器板上的蜂鸣器。
