掷骰子活动

Create virtual dice using the MakeCode editor

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

介绍

这个项目向学生们介绍了选择条件IF...THEN...ELSE(如果...那么...否则)以及如何控制单颗LED灯。

教学指南

打开 打开 teacher resources

课堂活动

5个步骤

第一步

This is a program that allows the user to shake the micro:bit to show a die face. On the MakeCode editor select the input blocks from the block menu and select the “shake” block.


input.onGesture(Gesture.Shake, () => {
  
})
          

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

Click the arrow on the shake block to change the gesture

第二步

现在你的程序可以对摇晃输入做出反应了,我们需要添加它的响应方式。在变量积木块中,添加一个“set item to”“设置选项到”积木块。


let item = 0
input.onGesture(Gesture.Shake, () => {
    item = 0
})
          

Rename the variable to something more suitable, such as “Roll”. Click the arrow next to 'item' and select 'Rename variable'; a popup box will allow you to change the variable name.

Click the arrow to rename the variable
Enter a name and click 'ok' to rename a variable

Now that a variable called “Roll” has been created we needed to pick a random number between 1 and 6. From the block menu select the “Math” option and select “pick random 0 to 10”

Drag the random block from the 'math' menu

Drag the “pick random” block onto the workspace and connect it to the “Set variable” block replacing the “0” with “1” and the “10” with “6”. Now the program will pick a random number between 1 and 6 every time the micro:bit is shaken. 这个数将会存储在变量“Roll”(滚动)中。


let roll = 0
input.onGesture(Gesture.Shake, function () {
    roll = Math.randomRange(1, 6)
})
          

第三步

现在micro:bit需要显示一个基于变量“Roll”的不同的结果。 这叫做选择。 在这个案例中,我们将使用IF...THEN...ELSE选项。 在积木块选区中的Logic(逻辑)选项下找到selection(选择),将其添加到micro:bit。

Drag the block from the logic section

Add a logic statement of “IF THEN ELSE” and click the "+" button to edit the logic to have multiple conditions.


let roll = 0
input.onGesture(Gesture.Shake, function () {
    roll = Math.randomRange(1, 6)
    if (true) {
      
    } else {
      
    }
})
          

由于这里有6个可能的选项,需要添加4个“else if”语句。 因为第一个“if”语句紧接着的4个“else if”语句和最末尾的“else”语句,它总共包括了6个选项。


let roll = 0
input.onGesture(Gesture.Shake, function () {
    roll = Math.randomRange(1, 6)
    if (true) {
      
    } else if (false) {
      
    } else if (false) {
      
    } else if (false) {
      
    } else if (false) {
      
    } else {
      
    }
})
          

第四步

现在我们需要为IF语句创建一个基于允许选择的逻辑语句。再从积木块选区中的“logic”(逻辑)选项选择“equals”(等于)积木块。

Drag the equals block from the logic menu

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

为了确保micro:bit的IF语句基于随机数,存储在变量“Roll”(滚动)的数值需要被检查。 变量“Roll”(滚动)可以在积木块选区的(variable)变量选项中找到。

Drag the 'roll' variable from the variable menu

The first of the 6 checks to carry out is if the variable “Roll” is equal to 1. Place the “Roll” variable within the “is equal to” (=) block.

现在这个过程需要为其他4个“else if”语句重复。通过正确点击“equals”(等于)积木块,它可以复制和修改不同肯能的数值。

Right click to duplicate blocks

let roll = 0
input.onGesture(Gesture.Shake, function () {
    roll = Math.randomRange(1, 6)
    if (roll == 1) {
      
    } else if (roll == 2) {
      
    } else if (roll == 3) {
      
    } else if (roll == 4) {
      
    } else if (roll == 5) {
      
    } else {
      
    }
})
          

第五步

现在程序的最后一步是为不同的骰子面显示不同的模式。从积木块选区的基本选项中选择“show leds”(显示LED)模块。

Drag a 'show LEDs' block from the basic tab

将“Show leds”(显示LED)积木块拖拽到工作区并放置在第一个“IF”语句下方。 By clicking on the dark blue squares, you can create the die pattern required ('on' LEDs are shown by the white colour). 对于这个例子,下面有1的完整的模式。

The centre LED is on

这个积木块可再次重复5次来创造其他的骰子面,直到所有的选项都被完成。下面是最终的程序。将程序下载保存到micro:bit。


let roll = 0
input.onGesture(Gesture.Shake, function () {
    roll = Math.randomRange(1, 6)
    if (roll == 1) {
        basic.showLeds(`
            . . . . .
            . . . . .
            . . # . .
            . . . . .
            . . . . .
            `)
    } else if (roll == 2) {
        basic.showLeds(`
            . . . . .
            . . . # .
            . . . . .
            . # . . .
            . . . . .
            `)
    } else if (roll == 3) {
        basic.showLeds(`
            # . . . .
            . . . . .
            . . # . .
            . . . . .
            . . . . #
            `)
    } else if (roll == 4) {
        basic.showLeds(`
            . . . . .
            . # . # .
            . . . . .
            . # . # .
            . . . . .
            `)
    } else if (roll == 5) {
        basic.showLeds(`
            . . . . .
            . # . # .
            . . # . .
            . # . # .
            . . . . .
            `)
    } else {
        basic.showLeds(`
            . # . # .
            . . . . .
            . # . # .
            . . . . .
            . # . # .
            `)
    }
})
          

挑战

试着添加下列功能:

  • 添加一个骰子滚动的动画。
  • 允许用户声明骰子面的数字,即6、8或12

了解更多

真心话大冒险活动使用的就是手势控制、LED屏幕和再次引用IF语句,但是同时运行着2个程序循环。

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