猴子接香蕉
这篇文章会介绍如何使用“创建角色”、“角色是否碰到其他角色”、“当按钮按下”、“变数”、“重复判断”、“计次循环”等积木,实作一个猴子接香蕉的 LED 灯小游戏。
相关文章参考:创建角色、角色是否碰到其他角色、当按钮按下、变数、重复判断。
游戏方式
猴子接香蕉是一个简单的小游戏,游戏开始后,会有“香蕉”不断从上方掉落,用户需要操纵“猴子”在下方左右移动接香蕉,如果香蕉到地面上就输了。使用 micro:bit 的游戏操作步骤如下:
- AB 按钮同时按下,开始游戏。
- 游戏开始后,下方出现“猴子”角色 LED,上方出现“香蕉”角色 LED 掉落 ( 亮度较暗 )。
- 按下 A 按钮,猴子角色往左移动。
- 按下 B 按钮,猴子角色往右移动。
- 猴子碰到香蕉,就得分。
- 香蕉掉落地面,游戏结束,出现最后总得分。
积木程序原理
首先设定按钮控制猴子移动的程序:
- 当启动时,建立两个变数
- monkey:座标 (2,4) 的猴子角色。
- run:判断游戏是否开始的变数,默认值 0。
- 当按钮 A 按下时,monkey 的 x 改变 -1 ( 往左移动 )。
- 当按钮 B 按下时,monkey 的 x 改变 1 ( 往右移动 )。
完成后,启动 micro:Bit,按下 A 按钮或 B 按钮,控制下方猴子灯号移动。
接着设计游戏开始程序:
- 放入当按钮 A+B 按下时的积木。
- 得分设定为 0。
- 将变数 run 设定为 1 ( 表示游戏开始 )。
- 新增变数 time 为 500 ( 香蕉掉落速度,单位为毫秒 )。
香蕉掉落程序:
- 放入重复无限次积木。
- 每次重复时,判断 run 是否等于 1,等于 1 才让香蕉开始掉落 ( 开始游戏 )。
- 建立 banana 游戏角色,x 位置为 0~4 的随机数,y 为 0。
- 将 banana 角色亮度设定为 50 ( 比猴子暗 )。
- 放入计次循环,次数设定为 4 次,每次重复执行:
- 让香蕉的位置等于 index 的数值 ( 香蕉往下移动 )。
- 暂停 time 豪秒。
- 计次循环结束后:
- 删除 banana 角色。
- 将 time 减少 20 ( 这样每次香蕉出现都会掉落得更快 )。
完成后,启动 micro:Bit,同时按下 AB 按钮,就会出现香蕉不断的从上而下掉落。
接着设计“猴子吃到香蕉”的程序:
- 新增另外一个重复无限次积木。
- 判断如果 run 等于 1,表示游戏开始。
- 再次判断如果 monkey 角色碰到 banana 角色:
- 让得分增加 1。
- 删除 banana 的角色。
完成后,启动 micro:Bit,如果 monkey 碰到 banana 就会得分,并且出现得分动画效果。
修改香蕉掉落的程序,加入没有吃到香蕉时,就表示游戏结束的程序:
- 将计次循环的次数从 4 改成 5 ( 因为在落地 4 的瞬间,吃到香蕉还是算吃到,但如果超过 4 就表示没吃到 )。
- 放入第一个逻辑判断,判断香蕉如果已经被删除 ( 被吃掉了 ),就跳出循环。
- 放入第二个逻辑判断,判断如果 index 等于 5 ( 表示香蕉超过地面,没吃到香蕉 ):
- 删除香蕉角色。
- 将变数 run 设为 0 ( 表示游戏结束 )
- 暂停游戏。
- 显示游戏得分。
最后,在按下 A+B 按钮的积木里,新增“清空画面”以及“游戏继续”的积木。
完成后,启动 micro:Bit,按下 AB 按钮,就可以开始进行猴子接香蕉的游戏。
范例解答
范例解答:猴子接香蕉
实作“猴子接香蕉”的小技巧
为什么要使用两个“重复无限次”呢?
因为如果把“香蕉掉落”和“接香蕉”的程序放在一起,会被香蕉掉落的“延迟时间”影响,造成程序较为复杂且不容易管理,所以将程序分开,观念上也比较容易理解。
为什么要使用“游戏继续”和“游戏暂停”呢?
因为 MakeCode 游戏积木里的“游戏结束”功能,会让整块 micro:bit 功能停止运作,必须重新启动才能继续游戏,且创立角色后,角色会影响 LED 所有的显示画面,使用了游戏暂停就能避免这种情况发生。
微信扫码关注
抖音扫码关注