サイコロ

Create virtual dice using the MakeCode editor

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

はじめに

このレッスンでは、条件分岐『もし…..なら….でなければ….』ブロックの使い方と、個々のLEDの制御の仕方を学びます。

先生用ガイド

開く 開く teacher resources

アクティビティ

全5ステップ

ステップ 1

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, () => {
  
})
          

『~とき』ブロックはワークスペース上で、色々なジェスチャーに変更ができます。例えば、『右に傾けたとき』とか『左に傾けたとき』などです。このプログラムでは、『ゆさぶられたとき』にします。

Click the arrow on the shake block to change the gesture

ステップ 2

今から、ゆさぶらたときに『何をどうするのか』をプログラムしていきます。ブロック種類選択メニュー『変数』から『変数を0にする』ブロックを選択します。


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. この数字は、変数『サイコロの目』に保存されます。


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

ステップ 3

変数『サイコロの目』の値に応じてサイコロの目を表示する必要があります。 これは条件分岐選択といいます。 この場合『もし…なら…でなければ…』ブロックを使います。 『もし…なら…でなければ…』ブロックは、ブロック種類選択メニュー『論理』のところにあります。

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つの選択肢がありますので、『elseif(でなければもし)』ブロックを4つ追加する必要があります。 最初の『もし』、続く4つの『でなければもし』、最後の『でなければ』で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 {
      
    }
})
          

ステップ 4

ここからは、条件分岐選択をするために『もし…』の…(論理条件)部分を作っていきます。再度ブロック種類選択メニュー『論理』から『0=0(等しい)』ブロックを選択します。

Drag the equals block from the logic menu

追加された『0=0』ブロックをドラッグして、『もし』の右にドロップします。

『もし 0=0』で変数『サイコロの目』に保存されている乱数がどの値か調べます。 変数『サイコロの目』は、ブロック種類選択メニュー『変数』にあります。

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つの『でなければもし』で繰り返します。『サイコロの目=0』ブロックを右クリックして表示されるメニューで『複写する』を選択して複写します。複写したブロックの右の数字をそれぞれ1、2,3、4に変更してください。

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 {
      
    }
})
          

ステップ 5

最後に、サイコロの目に応じたパターンをLEDに表示するプログラムを作ります。ブロック種類選択メニュー『基本』から、『show leds(LEDを点灯)』ブロックを選択します。

Drag a 'show LEDs' block from the basic tab

ワークスペースに追加された『show leds』ブロックをドラッグして、最初の『もし』の下にドロップします。 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

『show leds』ブロックを5回複写して残りのサイコロの目のパターンを作ってください。以下が完成したプログラムです。プロジェクトを保存してから、マイクロビットにダウンロードしてください。


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表示と『もし』ブロックを使いますが、同時に2つのプログラムループを実行する方法が学べます。

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