Day26 ( 游戏设计 ) 猴子接香蕉

猴子接香蕉

教学原文参考:猴子接香蕉

这篇文章会介绍如何使用「创建角色」、「角色是否碰到其他角色」、「当按钮按下」、「变数」、「重复判断」、「计次回圈」等积木,实作一个猴子接香蕉的 LED 灯小游戏。

相关文章参考:创建角色角色是否碰到其他角色当按钮按下变数重复判断

游戏方式

猴子接香蕉是一个简单的小游戏,游戏开始後,会有「香蕉」不断从上方掉落,使用者需要操纵「猴子」在下方左右移动接香蕉,如果香蕉到地面上就输了。使用 micro:bit 的游戏操作步骤如下:

  • AB 按钮同时按下,开始游戏。
  • 游戏开始後,下方出现「猴子」角色 LED,上方出现「香蕉」角色 LED 掉落 ( 亮度较暗 )。
  • 按下 A 按钮,猴子角色往左移动。
  • 按下 B 按钮,猴子角色往右移动。
  • 猴子碰到香蕉,就得分。
  • 香蕉掉落地面,游戏结束,出现最後总得分。

micro:bit - 猴子接香蕉

积木程序原理

首先设定按钮控制猴子移动的程序:

  • 当启动时,建立两个变数
    • monkey:座标 (2,4) 的猴子角色。
    • run:判断游戏是否开始的变数,预设值 0
  • 当按钮 A 按下时,monkey 的 x 改变 -1 ( 往左移动 )。
  • 当按钮 B 按下时,monkey 的 x 改变 1 ( 往右移动 )。

micro:bit - 猴子接香蕉

完成後,启动 micro:Bit,按下 A 按钮或 B 按钮,控制下方猴子灯号移动。

micro:bit - 猴子接香蕉

接着设计游戏开始程序:

  • 放入当按钮 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 - 猴子接香蕉

完成後,启动 micro:Bit,同时按下 AB 按钮,就会出现香蕉不断的从上而下掉落。

micro:bit - 猴子接香蕉

接着设计「猴子吃到香蕉」的程序:

  • 新增另外一个重复无限次积木
  • 判断如果 run 等於 1,表示游戏开始。
  • 再次判断如果 monkey 角色碰到 banana 角色
    • 让得分增加 1。
    • 删除 banana 的角色。

micro:bit - 猴子接香蕉

完成後,启动 micro:Bit,如果 monkey 碰到 banana 就会得分,并且出现得分动画效果。

micro:bit - 猴子接香蕉

修改香蕉掉落的程序,加入没有吃到香蕉时,就表示游戏结束的程序:

  • 计次回圈的次数从 4 改成 5 ( 因为在落地 4 的瞬间,吃到香蕉还是算吃到,但如果超过 4 就表示没吃到 )。
  • 放入第一个逻辑判断,判断香蕉如果已经被删除 ( 被吃掉了 ),就跳出回圈
  • 放入第二个逻辑判断,判断如果 index 等於 5 ( 表示香蕉超过地面,没吃到香蕉 ):
    • 删除香蕉角色。
    • 将变数 run 设为 0 ( 表示游戏结束 )
    • 暂停游戏。
    • 显示游戏得分。

micro:bit - 猴子接香蕉

最後,在按下 A+B 按钮的积木里,新增「清空画面」以及「游戏继续」的积木。

micro:bit - 猴子接香蕉

完成後,启动 micro:Bit,按下 AB 按钮,就可以开始进行猴子接香蕉的游戏。

micro:bit - 猴子接香蕉

范例解答

范例解答:猴子接香蕉

实作「猴子接香蕉」的小技巧

  • 为什麽要使用两个「重复无限次」呢?

    因为如果把「香蕉掉落」和「接香蕉」的程序放在一起,会被香蕉掉落的「延迟时间」影响,造成程序较为复杂且不容易管理,所以将程序分开,观念上也比较容易理解。

  • 为什麽要使用「游戏继续」和「游戏暂停」呢?

    因为 MakeCode 游戏积木里的「游戏结束」功能,会让整块 micro:bit 功能停止运作,必须重新启动才能继续游戏,且创立角色後,角色会影响 LED 所有的显示画面,使用了游戏暂停就能避免这种情况发生。

关於我

大家好,我是 OXXO,是个即将迈入中年的斜杠青年,如果对我有点兴趣(笑,可以与我联系,一起来做点有玩又有创意的东西吧!


<<:  sed - 3 Delete command

>>:  DAY 14 『 Realm 新增、修改、删除 』Part2

Day08 - Numbers

在 Objective-C 中,为了保存基本的资料类型,像是 int, float, bool,内建...

wordpress更新出现Briefly unavailable for scheduled maintenance. Check back in a minute.

今天在更新wordpress插件时出现了Briefly unavailable for schedu...

[前端暴龙机,Vue2.x 进化 Vue3 ] Day26. Vue3 Composition API 使用(二)

前一篇说到 该怎麽写 data 的资料,找回双向绑定机制 !!! 这边先小小的补充一下 XD 在 O...

[DAY 4] _ 用Keil5直接编写暂存器操控MCU的GPIO口_(建Keil5环境)

我今天来讲下如何看手册操作暂存器好了,就以简单的GPIO口hi low就好,我手边刚有STM32F4...

Day5 Let's ODOO: Model(2) Fields

延续前日介绍,今天我们来讲Model内的fields延续昨日范例 # -*- coding: utf...