太鼓达人
这篇文章会大量使用“数组”的操作,搭配“变数”、“逻辑判断”、“点亮”、“[计次循环”、“逻辑判断”等积木,在 micro:bit 实作一个类似太鼓达人的节奏小游戏。
游戏方式
太鼓达人是一款用按钮和 LED 灯互动的节奏小游戏 ( 如果能搭配蜂鸣器的音效更好 ),游戏开始后,会有鼓点 ( 光点 ) 按照一定的节奏,从上而下移动,当鼓点移动到指定位置时,按下 A 或 B 按钮进行“打鼓”的动作,如果有打到则得分。
如果使用 micro:bit 实作,游戏操作步骤如下:
- 同时按下 AB 按钮,开始游戏 ( 或重新游戏 )。
- 按下 A 按钮,在指定位置打击左侧鼓点。
- 按下 B 按钮,在指定位置打击右侧鼓点。
- 鼓点被打鼓后就会消失,得分加一。
- 如果有三次没有打鼓成功,游戏结束,显示得分。
积木程序原理
首先设计“一串鼓点”的移动,因为有鼓点不会只有一点,所以使用数组来呈现:
- 当启动时,新增一个名为 a 的数组,数组长度以“4 的倍数”为单位,本篇文章的范例,建立一个长度为 8 的数组,1 表示亮灯,0 表示熄灯 ( 通常节拍都会是 4 的倍数,例如 4 拍、8 拍 )。
- 新增另一个名为 a_length 的变数,纪录 a 数组的长度。
新增一个重复无限次积木,制作灯号从上往下移动的动画效果:
- 放入“计次循环”,次数为 0 ~ a 数组的长度 ( a_length )。
- 放入逻辑判断,判断如果 a 的项目值为 1,就点亮 y 为 4-index 的灯 ( 如此一来才能反转数组,从上到下的移动 )。
- 如果 a 的项目值不等于 1,就熄灭 y 为 4-index 的灯。
- 计次循环结束后,将 a 的第一个项目,移动到最后一个项目。
- 暂停 500 毫秒。
不用担心 y 如果大于 4 或小于 0,点亮或不点亮的积木,会自动忽略超过范围的数值。
完成后启动 micro:bit,就会看见灯光不断往下移动。
因为游戏开始时,鼓点会从最上方出现,所以要修改程序:
- 当启动时:
- 使用“重复 5 次”循环,在数组 a 前面加入五个内容为 0 的元素 ( 如此一来,在最初的显示就完全不会亮灯 )
- 重复无限次:
- 增加逻辑判断,判断“新的 a 数组”( 加入五个项目的数组 ) 长度如果大于原本的 a 数组,在每次重复时,移除第一个项目。
- 当“新的 a 数组”( 逐步移除第一个项目的数组 ) 长度等于原本的 a 数组,就继续原本的动画程序。
完成后,启动 micro:bit 就能看到灯号不是从最下面出发,而是从最上方开始移动。
了解原理后,将启动时的数组,全部搬移到“当按下 A+B 按钮”积木里,作为游戏开始使用:
- 当启动时积木里,加入 run 等于 0 的变数,作为判断游戏是否开始的依据。
- 当按下 A+B 按钮,判断 run 等于 0:
- run 等于 0 表示游戏尚未开始,让 run 等于 1。
- 新增 end 等于 3 的变数,判断打鼓失误三次就让游戏结束。
- 新增 score 等于 0 的变数,作为计分使用。
- 新增 time 等于 500 的变数,方便控制鼓点的速度。
- 加入点亮 (0,3)、(2,3)、(4,3) 的灯,提示使用这在这个位置要打鼓。
- 当按下 A+B 按钮,判断 run 等于 1:
- 游戏开始后,A+B 按钮变成打鼓模式。
- 当鼓点进入 (1,3) 时,将灯号熄灭。
- 因为灯号数组在进入时,会做数组位置的变换 ( 第一个项目此时会在 y=4 的位置 ),如果打鼓成功,就将第一个项目的内容改为 2 ( 如此一来,循环暂停结束后,该位置就不会亮灯 )。
将打鼓模式的积木,复制一份到“当按下 A 按钮”的积木里。
接着修改 a 数组的重复无限次积木:
- 加入逻辑判断,判断 run 等于 1 的时候才开始
- 计次循环的判断里,新增逻辑判断:
- 如果第一个项目等于 1,且移动到最下面,表示打鼓失败,end 减少 1。
- 如果第一个项目等于 2,且移动到最下面,表示打鼓成功,分数增加 1,将第一个项目改回 1。
- 如果第一个项目等于 0 ( 不等于 1 也不等于 2 ),就执行原本的程序。
新增一个重复无限次积木,判断 end 等于 0 的时候,显示分数,并将 run 设定为 0 ( 表示游戏结束 )。
最后,如法泡制,新增另外一个 b 数组以及按下 B 按钮的程序 ( 基本上都和 a 相同 ),就能做到同时有两个鼓点出现的效果。完成后,启动 micor:bit,就可以开始进行太鼓达人的游戏。
范例解答
范例解答:太鼓达人
实作“太鼓达人”的小技巧
对于“数组”的应用不熟悉,该如何开始呢?
可以先参考以下三篇文章,帮助自己厘清数组操作 LED 的观念:数组点灯 ( 显示图形 )、数组点灯 ( 动画 )、移动速度不同的灯。
为什么 A+B 按钮也要判断“run 是否等于 1”?
因为太鼓达人在游戏过程中,常常会出现 A+B 按钮一起按下的状况,为了不让“启动”和“游戏”搞混,所以要多增加“run 是否等于 1”的判断。
微信扫码关注
抖音扫码关注