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


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.haohaodada.cn/zai-xian-ru-men-ke-cheng/scratch-sensor-board-primer/lesson-5.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
