Day24 ( 游戏设计 ) 记忆大考验

记忆大考验

教学原文参考:记忆大考验

这篇文章会使用「阵列」积木,建立两组灯号数据,搭配「函式」、「变数」、「点亮」、「[计次回圈」和「逻辑判断」等积木,在 micro:bit 实作一个找出光点出现在哪个位置的记忆大考验游戏。

相关文章参考:阵列函式变数计次回圈点亮逻辑判断

游戏方式

贪记忆大考验是一款简单的小游戏,游戏开始时,画面中会出现随机的三个光点,两秒後会消失,两秒内使用者需要记住这三个光点的位置,光点消失後,使用者开始找出光点的正确位置,如果有找到 ( 位置正确 ) 则得分,没找到 ( 位置错误 ) 则游戏结束。

如果使用 micro:bit 实作,游戏操作步骤如下:

  • 同时按下 AB 按钮,开始游戏,画面中出现三个光点。
  • 两秒後光点消失
  • 按下 B 按钮,会出现一个光点让使用者移动
  • 按下 A 按钮,会记录使用者移动的光点的「位置」,或取消该位置
  • 位置都纪录完毕後,按下 AB 按钮,如果三个光点位置正确,得分增加 1,并开始下一题。
  • 如果位置错误,显示得分,游戏结束 ( 按下 AB 按钮可以重新开始 )。

micro:bit - 记忆大考验

积木程序原理

一开始设计按下 A+B 按钮让游戏开始的程序:

  • 当启动时,设定 run 变数为 0。
  • 当按钮 A+B 被按下时:
    • 判断如果 run 是否等於 0。
    • 如果 run 等於 0,设定 run 为 1、score ( 分数 ) 设定为 0,answer ( 答案 ) 设定为 0

micro:bit - 记忆大考验

参考「依序点灯 ( 数字函式 )」文章,建立一个「点灯函式」。

micro:bit - 记忆大考验

接着建立「产生三个光点」的题目程序:

  • 新增一个重复无限次积木。
  • 判断如果 run 等於 1 就执行程序。
    • 清空画面 ( 清空後续使用者选择的光点 )
    • 建立 list 和 user_list 两个空阵列,list 纪录自动产生的光点位置,user_list 纪录使用者选择的光点位置
    • 使用「重复 25 次」回圈,将两个空阵列变成有 25 个项目的阵列
    • 参考「随机不重复的灯」文章,产生三个随机不重复的光点
    • 产生光点後,暂停 2000 毫秒。
    • 清空画面。
    • 将 run 设定为 2,让使用者可以选择光点位置

micro:bit - 记忆大考验

编辑「按下 B 按钮」可以「移动光点」的程序:

  • 判断如果 run 等於 2,按下 B 按钮才有作用。
  • 放入计次回圈,次数设定 0~24 次,显示使用者纪录的光点位置
  • 接着透过 answer 变数的更改,做出按下 B 按钮,画面光点就移动的效果 ( 参考「按钮依序开关灯」 )。

micro:bit - 记忆大考验

编辑「按下 A 按钮」可以「纪录光点位置」的程序:

  • 判断如果 run 等於 2,按下 A 按钮才有作用。
  • 判断如果使用者阵列 user_list 指定项目 ( 光点位置 ) 的数值,如果等於 1 就让其等於 0 ( 如果亮灯状态就熄灯 ),如果等於 0 就让其等於 1 ( 如果是熄灯状态就亮灯 )

micro:bit - 记忆大考验

最後回到「按下 A+B 按钮」,新增 run 等於 2 的判断:

  • 使用计次回圈,次数 0~24 次:
    • 比对 list 的每个项目内容和 user_list 的每个项目内容
    • 如果有一个内容不相同 ( 表示使用者记错了 ),将 run 等於 0,游戏结束,显示得分
  • 接着判断如果 run 仍然等於 2,表示使用者答对了,将 run 设为 1,继续下一题,得分加 1

micro:bit - 记忆大考验

完成後,启动 micro:bit,就能开始进行记忆大考验的游戏。

micro:bit - 记忆大考验

范例解答

范例解答:记忆大考验

实作「贪吃蛇」的小技巧

  • 要做出这个范例,需要先阅读哪些文章?

    可以先阅读「依序点灯 ( 数字函式 )」和「按钮依序开关灯」两篇文章。

  • 为什麽要使用「两个」阵列呢?

    因为对於游戏的程序来说,让阵列互相比对数值,是相当容易且不容易出错的,所以才会使用题目一个阵列,使用者一个阵列,互相比对。

关於我

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


<<:  Jetpack Compose navigation + Koin

>>:  冒险村09 - Time format config

day12 : argo gitops服务以及ingress (中)

昨天透过kustomize的方式做了base的yaml和规划了怎麽应用,那麽今天就来利用这些yaml...

[30天 Vue学好学满 DAY1] 参赛前言

动机 去年0前端基础用JavaScript作为主题参加了自我挑战,近期从原本的Java纯後端实习生默...

[D27] 物件侦测(8)

接下来详细一点的说明 YOLOv4 的内部架构! 目标检测通常由以下几个部分组成: Input: 指...

Day29 :【TypeScript 学起来】React + TypeScript 实作简单 Todo App Part2

今天继续 todo app part2, 会纪录实作上遇到的问题。 若有错误,欢迎留言指教,感恩的...

Leetcode/AlgoExpert 解题笔记 – Array 篇 (1)

嗨大家好,这系列的文章主要是想纪录我在写 Leetcode / AlgoExpert 的题目时的一些...