Skip to content

「图形化编程」Micro:bit Flappy Bird 小游戏(二)

2move

传说世界上有一种鸟没有脚,生下来就不停的飞,飞累了就睡在风里。一辈子只能着陆一次,那就是死亡的时候,对没错,我说的就是 Flappy Bird(笑)
flappybird

通过上一节的教程,我们已经了解了 Flappy Bird 小游戏的基本原理,并且实现了小鸟的移动部分,这节教程我们来看看障碍物(超级玛丽的管子)是如何生成的。

还是先来看下效果:

可以看到高低起伏的障碍物从右往左移动
2move

管子的生成有以下几个特点:

  1. 管子生成的速率要固定
  2. 由于 micro:bit 板子一列最多有 5 个 led,这里我们设定管子占其中 3 格,连续的两格作为通道让小鸟通过
  3. 管子占的 3 格有以下 4 种可能obstacle

    分别对应的障碍物坐标组合是(障碍物生成在最右边)
    1) (4,2)(4,3)(4,4)
    2) (4,0)(4,3)(4,4)
    3) (4,0)(4,1)(4,4)
    4) (4,0)(4,1)(4,2)

  4. 管子的位置需要随机生成

  5. 管子与管子之间要有空隙,即隔一列生成一个管子

下面我们来实现这个生成管子的逻辑

  1. 先打开上节课已经实现的项目,如果你没有实现上一节的内容,也没关系,可以看看下面这张图,或者参考这个链接来查看上一节的内容
    15611270033071
  2. 创建一个 函数,位于 高级 > 函数分类下,命名为 shengchengguanzi,关于函数的知识,可以参考 前导知识-函数
  3. 创建一个 变量,位于 变量 分类下,命名为 suijishu
  4. 设置变量 suijishu 为 选取随机数 1 到 4(随机数模块位于 数学 分类下),因为 管子中障碍物的位置一共有 4 种可能,所以我们从 1 到 4 范围内随机生成一个数字,每个数字代表了一个可能的障碍物位置组合
  5. 创建一个 变量,命名为 linshizhangai
  6. 如果 suijishu 等于 1,那么 将 linshizhangai 设置为 数组 创建精灵 x:4 y:2, 创建精灵 x:4 y:3, 创建精灵 x:4 y:4
  7. 然后复制 3 次 第 6 步创建的 如果 模块,拖到 第 6 步创建的 如果 模块下方,分别改为
    1) linshizhangai 等于 2,创建精灵 x: 4 y:0, x:4 y:3, x:4 y:4,
    2) linshizhangai 等于 3,创建精灵 x: 4 y:0, x:4 y:1, x:4 y:4,
    3) linshizhangai 等于 4,创建精灵 x: 4 y:0, x:4 y:1, x:4 y:2

  8. 创建一个 变量,命名为 suoyouzhangai
  9. 将值 linshizhangai 添加到 数组 suoyouzhangai 结尾(该模块位于 数组 分类下), 这里出现了一个新的概念,数组的数组,如果还是拿数组比作抽屉柜的话,那数组的数组就可以看作是一个超级大的抽屉柜,这个超级大的抽屉柜的每个抽屉里不是放的小球了,而是放着一个小的抽屉柜,小的抽屉柜里放着小球,这样是不是就理解啦,把所有障碍放进一个数组里,方便我们后面往左移动所有的障碍
    shengchengguanzi

下面我们来移动障碍物,移动障碍物的过程其实是减小 每个障碍物的 x 轴坐标

  1. 创建一个新的 函数,命名为 yidongzhangai,由于是数组的数组,我们需要从最外层数组里先取出里面的小数组,然后在从小数组里取出每个精灵,依次减少每个精灵的 x 轴坐标就可以啦
  2. 创建一个 变量,命名为 guanzi
  3. 拖一个 循环 分类下的 将数组 x 中的元素逐个取出,以 y 引用每次取出的值,改为 将数组 suoyouzguanz 中的元素逐个取出,以 guanzi 引用每次取出的值,这样 guanzi 这个变量就代表了一个管子,它里面包含了 3 个精灵
  4. 创建一个 变量,命名为 zhangai
  5. 再拖一个 循环 分类下的 将数组 x 中的元素逐个取出,以 y 引用每次取出的值 到 第 3 步创建的模块下,改为 将数组 guanzi 中的元素逐个取出,以 zhangai 引用每次取出的值,这样 zhangai 就代表了每个 管子里的 3 个障碍
  6. 拖一个 游戏 分类下的 更改 x 幅度为 0 模块,改为 zhangai 更改 x 幅度为 -1,即每次 减小 精灵的 x 轴坐标为 1
    15611325066449

最后在 无限循环模块里分别调用 shengchengguanzi 和 yidongzhangai,把 yidongzhangai 放在 暂停 模块后面
diaoyong

完整程序图
15611328994386

今天就到这里吧,下个教程来对 yidongzhangai 做一些修改,加上对 小鸟碰撞的检测和分数的计算,并且加上生成障碍的间隔,使障碍与障碍直接有一列间隔,尽请期待啦。

4.3 24 votes
Article Rating
Tags:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x