### 简介
这个项目中我们将制作一个游戏,在游戏中我们需要跟随屏幕上下滚动的音符来演奏一首歌。
我们将会制作什么:
点击绿旗开始游戏。使用 z、x、c 和 v 键来在音符到达屏幕底部时演奏正确的音符。每个正确的音符都会得到10分。

### 资源获取

想要获取项目文件,可扫码关注“小石头编程”公众号,回复“**二进制**”获取下载地址。
### 能学到的知识
在这个项目中,我们可以学到以下知识:
- 如何使用列表存储音符序列和时间
- 如何使用带输入的自定义模块(也就是方法)
### 项目制作
首先我们在Scratch中新建一个项目, 然后添加一个角色,命名为"1",下面是角色"1"用到的图片资源:


角色"1"有2个造型,分别是on和off,off为⚪,on为实心圆。
在背景中,添加3个背景:



上面3张图分别为 normal, correct,incorrect,表示正常,正确和不正确3个状态。
#### 1、按键操作
我们点击名为"1"的角色,并添加代码,如果按下 v 键,就更改角色的造型(costume)。

按下 v 键测试代码,精灵应该会亮起。

然后我们再添加3个角色,分别命名为2,4,8,和背景中c,x,z键对应,使用类似的代码来实现按键操作。

#### 2、二进制数字
我们将使用不同的按键组合来演奏不同的音符。每个按键要么是开启(按下)状态,要么是关闭(未按下)状态。这意味着我们可以把每种按键组合看作是一个二进制数字。
从右到左,每个按键的数值都是前一个的2倍:1、2、4和8。通过加上所有被按下的按键对应的数值,我们就可以得出音符的值。

有 2^4 = 16 种按键组合。这意味着你可以演奏15个不同的音符,因为 0 代表没有音符被播放。
创建一个名为"note"的新变量,并将它拖放到四个音符角色的旁边。

"note"变量将存储应该播放的音符的值。
在舞台上添加代码,根据按下的按键组合来计算 note 的值。
例如,当 c 和 v 键被按下时,note 的值应该是 3。
在舞台上,添加修改note变量的代码。
- 当点击旗帜时,变量note应该被设置为0。
- 如果按下v键,音符应该改变1。
- 如果按下c键,音符应该改变2。
- 如果按下x键,音符应该改变4。
- 如果按下z键,音符应该改变8。
- 所有这些代码都应该永远重复。

#### 3、播放音符
当我们按键时,应该播放音乐。
在任何四个键中的任何一个被按下时,广播一个'note change'消息。

在舞台上添加代码,当一个键组合被按下时播放一个音符。
音符应该从中音C开始,这是第60个音符。

测试代码,检查按下V键是,是否会播放音乐。
添加代码使所有的键精灵在一个键被按住的情况下只播放一次音符。

#### 4、滚动音符
我们需要让音符在舞台上向下滚动,这样玩家就知道哪些键需要按以及什么时候需要按。
创建两个列表,分别命名为"notes"和"times"。
将以下数字添加到你的音符和时间列表中。注意:确保按照正确的顺序添加这些确切的数字。

以下就是你的游戏中存储歌曲的方式:
- 音符列表存储歌曲的音符(从1到15),按顺序排列
- 时间列表存储歌曲中应该播放音符的时间点

那么对于这两个新的列表:
- 第1个音符(中音C)应该在5秒时播放
- 第1个音符应该在5.5秒时再次播放
- 第3个音符应该在6秒时播放
- 等等...
点击'note'精灵,然后点击显示。

然后点击造型:

我们应该看到'note'精灵有15种不同的造型,每个造型对应从1到15的不同音符。
添加代码,为存储在notes中的每个音符创建一个'note'精灵克隆体。每个克隆体应该在存储在times中的正确时间创建。每个克隆体应该在它的音符需要播放的两秒前创建。这给克隆体两秒时间向下移动屏幕。我们将在稍后添加移动克隆体的代码!

代码如下:

现在测试代码时,似乎什么也没发生,因为'note'精灵被隐藏了。如果您显示(或不隐藏)该精灵,那么您应该看到克隆体被创建在彼此之上。
添加代码,使每个'note'克隆从舞台顶部滑动到底部,然后被删除。

#### 5、存储音符
目前,在播放完笔记后,它们会从列表中被删除,导致列表变成空的。

现在我们将添加代码来在项目中存储歌曲,这样就不需要每次手动添加列表了。
创建一个名为"load'happy birthday'"的自定义块,它会清空两个列表(音符和时间)中的所有内容,然后重新添加正确的数字到这两个列表中。

然后在启动时加载这个方法

#### 6、添加分数
通过给玩家正确演奏音符的得分来改善我们的游戏。
在我们的舞台顶部创建一个名为"score"的新变量。

在玩家在正确时间演奏正确音符时,增加分数。记得在游戏开始时将分数设置为0。
当正确的音符被演奏时,广播一个名为"correct"的消息,让演奏错误时,广播要给名为"incorrect"的消息。

添加代码到舞台,当玩家演奏正确音符时,短暂改变背景,当演奏失败时,修改为失败的背景。


现在项目已经完成了,大家可以尝试去修改来实现自己的二进制英雄游戏吧。