魔术8 游戏

Make a fun question-based game in MakeCode!

  • Get started
  • MakeCode
  • Random
  • Variables
  • Games
Print lesson
  • 年龄 8+
  • 30 分钟
  • MakeCode Editor

简介

这个项目教用户如何创造一个魔力8号球游戏。游戏完成后,你可以问micro:bit一个问题,然后它会回答一个随机答案哦!

教学指南

打开 打开 teacher resources

课堂活动

7个步骤

第一步

这个程序再现了“魔力8号球”游戏。它要求用户提出一个问题并随机给出一个答案。

第一步是给设备编程,告诉用户提问。 屏幕上将会显示一个字符串,这是由积木块菜单的基本选项中的“show string”(显示字符串)积木块来实现的。

Drag the show string block

将积木块“show string”拖拽到工作区域,将它放在“on start”积木块下方。点击文本“hello!”,并将它改成“Ask a question!”


basic.showString("Ask a question!")
          

下一步是在屏幕上显示数字“8”来代表魔力8号球的标识。再次重复这些步骤。

Drag the show number block

basic.showString("Ask a question!")
basic.showNumber(8)
          

第二步

现在程序显示了“ask a question”和“8”,用户需要从micro:bit上获得一个回复。 这是用“Shake”手势作为一种输入来实现的。 在积木块菜单,选择“input”(输入)选项,并选择“on shake”积木块,将其拖拽进工作区域。

Drag the on shake block

在工作区域中,“积木块“on”可以被改变成多个手势,例如:向左倾斜或向右倾斜。在这个项目中,摇晃手势就选择成功了。

Click the arrow to change the gesture

input.onGesture(Gesture.Shake, function () {
  
})
          

首先,micro:bit的显示需要通过“Clear”积木块来进行更新。 这将会清除当前在micro:bit上显示的任何图案,不管它是“Ask a question”还是数字“8”。 你可以在积木块菜单栏里的“More”(更多)选项下的“basic”选项中找到积木块“clear screen”。 将积木块拖拽到工作区,将它放在“on shake”积木块下方。

Drag the clear screen block

input.onGesture(Gesture.Shake, function () {
    basic.clearScreen()
})
          

第三步

现在micro:bit已经被编程,因此它会响应一个摇晃手势。下一步是创建一个变量来存储一个随机数。 在积木块菜单中选择“Variables”(变量)选项,并点击“Make a Variable”(创建一个变量)。

Click 'Make a variable' in the variables tab

然后一个弹出的对话框将要求你给你的变量命名。在这个例子中,将它命名为“Random”(随机)。

Click 'ok' to rename your variable

当摇晃micro:bit的时候,我们想要生成随机数,并将它存储在变量“Random”中。为了实现它,将“Set item to”(设置项木至)添加到工作区域中。

Drag the 'set item to' block into the workspace

将积木块“Set item to”置于积木块“clear screen”下,并点击“item”一词旁边的下拉箭头。 这使我们能够选择这个叫做“Random”的变量。当摇晃micro:bit的时候,这个变量将暂时被设置为“0”。


let Random = 0
input.onGesture(Gesture.Shake, function () {
    basic.clearScreen()
    Random = 0
})
          

第四步

Now that the variable is set to “0” when the micro:bit is shaken, we now need to assign a random number to it. From the block menu select the “Math” option and select “pick random 0 to 10”

Drag a 'pick random' block from the 'Math' section

Drag the “pick random” block onto the workspace and join to the “set random” block. A random number between 1 and 3 will give us the 3 options needed, so change the number “0” to “1” and “10” to “3”.


let Random = 0
input.onGesture(Gesture.Shake, function () {
    basic.clearScreen()
    Random = Math.randomRange(1, 3)
})
          

第五步

下一步是用积木块菜单的“Logic”选项下的IF语句来添加一个选择过程。

Drag an 'if' block to the workspace

拖拽“IF”积木块到工作区域,将其连接到积木块“random”下方。 所以,如果摇晃micro:bit就会清理屏幕,生成一个随机数并存储在变量“Random”中。现在,我们需要设置每个不同变量条件带来的结果。


let Random = 0
input.onGesture(Gesture.Shake, function () {
    basic.clearScreen()
    Random = Math.randomRange(1, 3)
    if (true) {

    } else {

    }
})
          

As there are more than 2 conditions within this selection another selection statement is required, an “else if”. Click '+' on the if block to add extra else and else if statements.


let Random = 0
input.onGesture(Gesture.Shake, function () {
    basic.clearScreen()
    Random = Math.randomRange(1, 3)
    if (true) {
      
    } else if (false) {
      
    } else {
      
    }
})
          

接下来,我们需要填写IF语句来允许选择。在积木块菜单的“logic”(逻辑)选项中选择“equals”积木块。

Drag an equals block to the workspace

一旦选定,将“equals”(等于)积木块拖拽到“IF”语句积木块上。


let Random = 0
input.onGesture(Gesture.Shake, function () {
    basic.clearScreen()
    Random = Math.randomRange(1, 3)
    if (0 == 0) {
      
    } else if (false) {
      
    } else {
      
    }
})
          

第六步

为了确保micro:bit的IF语句基于随机数,存储在变量“Roll”(滚动)的数值需要被检查。 The “Random” variable can be found from the 'Variables' option in the block menu.

Drag the 'random' variable from the variables tab

变量“Random”积木块放置在“equals”积木块下方来测试IF语句的逻辑。 If the “Random” variable is equal to "3" the first option is selected otherwise the second or third option is chosen.


let Random = 0
input.onGesture(Gesture.Shake, function () {
    basic.clearScreen()
    Random = Math.randomRange(1, 3)
    if (Random == 3) {
      
    } else if (false) {
      
    } else {
      
    }
})
          

So the micro:bit can switch between three options, click '+' in the 'if' block so that the block has 1 'if', 1 'else if', and 1 'else' statement. Your code should look like this:


let Random = 0
input.onGesture(Gesture.Shake, function () {
    basic.clearScreen()
    Random = Math.randomRange(1, 3)
    if (Random == 3) {
      
    } else if (Random == 2) {
      
    } else {
      
    }
})
          

第七步

现在,micro:bit基于生成的随机数有了3个可能的选项。下一步是根据用户提出的一个问题,给出一个答案。 这是通过将积木块菜单中的基本选项下的“show string”积木块拖拽到工作区域来实现的。

Drag a 'show string' block to the workspace

“if”积木块中的每个“then”部分都要有一个“show string”积木块。 从菜单中拖拽出3或者在工作区域右击积木块一次来复制它。 字符串应该修改成“yes”(是的)、“no”(不是)和“I don't know”(我不知道)。


let Random = 0
input.onGesture(Gesture.Shake, function () {
    basic.clearScreen()
    Random = Math.randomRange(1, 3)
    if (Random == 3) {
        basic.showString("YES")
    } else if (Random == 2) {
        basic.showString("NO")
    } else {
        basic.showString("I DON'T KNOW")
    }
})
          

一旦答案生成了,程序的最后一个部分是给micro:bit编程,让它再次显示数字“8”。 需要另一个“show string”积木块,并将其置于“if”语句之后。


let Random = 0
input.onGesture(Gesture.Shake, function () {
    basic.clearScreen()
    Random = Math.randomRange(1, 3)
    if (Random == 3) {
        basic.showString("YES")
    } else if (Random == 2) {
        basic.showString("NO")
    } else {
        basic.showString("I DON'T KNOW")
    }
    basic.showNumber(8)
})
          

保存项目并将其下载到micro:bit.


let Random = 0
input.onGesture(Gesture.Shake, function () {
    basic.clearScreen()
    Random = Math.randomRange(1, 3)
    if (Random == 3) {
        basic.showString("YES")
    } else if (Random == 2) {
        basic.showString("NO")
    } else {
        basic.showString("I DON'T KNOW")
    }
    basic.showNumber(8)
})
basic.showString("Ask a question!")
basic.showNumber(8)
          

挑战

试着添加下列功能:

  • 添加其他答案
  • 在摇晃手势后添加一个思考的动画

了解更多

“闪烁的心”的活动用“radio”积木块在第二块micro:bit的LED屏幕上显示了一个图像。

Selecting this opens external content from our support system, which adheres to their privacy policy.