图形化编程做超难游戏教程(图形化编程Micro:bit躲避砖块小游戏-基础部分)
本篇是 Micro:bit 躲避砖块小游戏系列教程的第 4 篇,前 3 篇分别是
「图形化编程」Micro:bit 模拟传球小程序
「图形化编程」Micro:bit 重力控制水平仪
「图形化编程」前导知识-从超级玛丽看游戏制作基本要素
这篇教程我们将一步步的完成 躲避砖块小游戏 的基础部分,能够通过重力控制小亮点躲避天上掉下来的砖块,一旦碰到砖块,游戏结束,按照惯例,我们先来看看效果
知识点
- 精灵
- 无限循环
- led 点阵 及 坐标
- x 方向上的加速度
- 随机数模块
- 碰撞检测模块
- 游戏结束模块
知识点解析
关于 精灵、无限循环 和 led 点阵及坐标的知识,详见
「图形化编程」Micro:bit 模拟传球小程序
关于 各个方向上的加速度获取及计算,详见
「图形化编程」Micro:bit 重力控制水平仪
随机数模块
随机数模块是我们将要使用的新模块,用于随机生成一个数字,随机数模块位于 数学 分类
随机数模块可用于生成一个 0 到 x 的随机数,生成随机数的过程,我们可以想象为一个扔色子的过程,假如我们需要生成一个范围从 0 到 2 的随机数,我们可以想象我们有一个 3 面的色子,3 个面上分别标有 0 1 2,生成随机数就相当于扔了一次色子,然后看哪个面朝上,最后我们得到的就是那个生成的随机数
碰撞检测模块
碰撞检测模块是另一个新模块,用于检测两个精灵是否发生碰撞,如果碰到了,返回 true,如果没碰到返回 false,它是这个躲避砖块小游戏判断胜负的关键,一旦玩家控制的小亮点碰到了障碍,游戏结束。碰撞检测模块位于 游戏 分类下
游戏结束模块
顾名思义,在游戏结束时使用的模块,效果是闪三下屏幕,然后滚动播放 “GAME OVER” 字符,也位于 游戏 分类
实现原理
实现逻辑大体分为两部分,玩家控制的小亮点部分和随机生成的障碍物部分,为了实现简便,我们这里设定
- 小亮点只能在屏幕底部左右移动
- 障碍物长度固定为 3
- 障碍物下降速度不变
- 小亮点碰到障碍物游戏结束
- 由于屏幕大小限制,同一时间内只会出现一个障碍物,待一个障碍物下降到底部时,再生成另一个障碍物
下面分别讲讲两部分的逻辑
小亮点部分
小亮点的部分相对简单,甚至比第 2 篇 Micro:bit 重力控制 里的水平仪还要简单,因为设定小亮点只能在屏幕底部左右移动,因此我们可以只考虑 x 方向加速度,实现也与 Micro:bit 重力控制里的实现类似,每间隔 200ms 检测一次 x 方向上的加速度,当加速度大于 200 时,向右移动一格,小于 -200 时,向左移动一格
障碍物部分
障碍物的部分稍微复杂一些,既要考虑障碍物的生成位置,也要考虑障碍物的消失问题,并且障碍物会一直下降,直到到达屏幕底部消失,或者碰到小亮点游戏结束,具体分析如下,
1.需要设定一个速度变量,使得每一个新生成的障碍物都使用这个变量的值下降
2.由于设定障碍物长度固定为 3,所以需要创建 3 个精灵,最左边的精灵横坐标为 x,右边第 2 个和第 3 个精灵的横坐标分别为 x 1 和 x 2,三个精灵的纵坐标都为 y,下降的过程就是 y 依次增加的过程
3.关于障碍物的位置,只需要确定最左边的障碍物精灵的 x 坐标位置即可,由于障碍物的长度为3,因此最左边障碍物精灵的 x 坐标的可能值为 0,1,2,下图中分别用 蓝 红 绿方框表示一个障碍物可能的位置,因此对于最左边的障碍物精灵,可能的坐标是 (0,0) (1,0) 或 (2,0),因此我们只需要用随机数模块产生 0 到 2的随机数就可以控制障碍物的生成位置了
4.障碍物在下降过程中要不断检测有没有和小亮点碰撞,如果碰到了则游戏结束,如果没碰到则游戏继续,需要生成新的障碍物
5.当障碍物到达屏幕底部,即 y 坐标为 4 时,应该隐藏该障碍物并从顶部重新生成障碍物,但是因为我们设定同时只有一个障碍物出现在屏幕里,因此当障碍物到达底部时,我们只需更改原来障碍物的坐标,使它重新出现在屏幕顶端即可,这样看起来就像重新生成了一个障碍物,但实际上至始至终只有一个障碍物,只是不停变换位置,这样做简化了实现,也节省了资源
实现
接下来是实现的部分,我们需要用到两个无限循环,分别实现小亮点的逻辑和障碍物逻辑,会生成 4 个精灵 (实际上是代表精灵的变量),1 个代表小亮点,3 个障碍物精灵,还需要 2 个变量,x和 sudu,x 用于接受生成的随机数并设置 3 个障碍物精灵的横坐标,sudu 用于控制障碍物的下降速度,打开 micro:bit在线编程网站(https://makecode.microbit.org/),开始一一实现,
开机初始化
- 在 变量 分类下用 变量 模块设置 6 个变量,分别为 x、sudu、spirt(代表小亮点)、zhangai1(代表最左边障碍精灵)、zhangai2(代表中间障碍精灵)、zhangai3(代表最右边障碍精灵)
- 设置 x 的值为 随机数模块产生 0 到 2的随机数
- 设置 sudu 的值为 600
- 设置 spirt 为 游戏 分类下的 创建精灵 模块,x 坐标填 变量 2,y 坐标填 4,保证 小亮点初始状态在屏幕底部中间
- 设置 zhangai1 为 创建精灵 模块,x 坐标填 变量 x,y 坐标填 0
- 设置 zhangai2 为 创建精灵 模块,x 坐标填 变量 x 1,y 坐标填 0
- 设置 zhangai3 为 创建精灵 模块,x 坐标填 变量 x 2,y 坐标填
小亮点部分
- 每次循环判断 x 方向加速度,如果 大于 200,spirt x 坐标加 1,暂停 200ms
- 每次循环判断 x 方向加速度,如果 小于 -200,spirt x 坐标减 1,暂停 200ms
障碍物部分
- 每次循环 3 个障碍物精灵 y 坐标 减 1
- 判断 如果 spirt 碰到 zhangai1 或者 spirt 碰到 zhangai2 或者 spirt 碰到 zhangai3,则 游戏结束
- 如果 zhangai1(或者zhangai2 或 zhangai3)的 y 坐标为 4,则 重新生成一个 0 到 2 的随机数,设置 给 变量 x
- 用变量 x 设置 zhangai1 的坐标 x 坐标 为 变量 x,y 坐标 为 0
- 用变量 x 设置 zhangai2 的坐标 x 坐标 为 变量 x 1,y 坐标 为 0
- 用变量 x 设置 zhangai3 的坐标 x 坐标 为 变量 x 2,y 坐标 为 0
- 暂停变量 sudu 时间
大功告成,快自己试试看吧。
在下一节的教程里,我们将继续丰富这个小游戏,加上开头动画,记分系统,在游戏结束时展示分数等功能,敬请期待啦。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com