5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

micro:bitAdvent Calendar 2020

Day 7

OSC2020 Online/Fukuoka で紹介したmicro:bit v2のプログラムと時間の都合で紹介出来なかったこと

Last updated at Posted at 2020-12-07

##はじめに
先日開催されたOpen Source Conference 2020 Online/Fukuoka にてmicro:bit v2を使って親子で一緒に遊べる簡単なプログラムをご紹介しました。時間の関係で紹介出来なかったものも含めて今回そのプログラムを記事にしたいと思います。

##追加された機能を使った簡単プログラム(これはOSCで発表できたもの)
micro:bit v2には、マイクとスピーカーとタッチセンサーが追加されています。
その追加された機能を説明するのに、

  • マイクロビットのロゴを触った時にサーボが動く
  • 大きい音がした時に、サーボが動く
  • ゆさぶられた時に、v2で新たに追加されたサウンドを奏でる

…というプログラムにしました。ついでに

  • Aボタンを押したらメロディが流れて
  • Bボタンを押したらおみくじになるプログラムがこちらです↓↓↓

888.png

ブロックを全部見せると、こんな感じです↓↓↓
スクリーンショット 2020-12-07 11.09.52.png

あと、相性診断というのを作りました。
これは無線機能をシミュレーターでも試せるので、それを体験してもらいたくてご紹介したものです。

最初は連打した数を競う連打ゲームを作っていたのですが、
発表時間の45分内にどうしても説明がおさまらず、好きな数字が同じなら二人の相性は良いであろう…という事で相性診断できるものに変更しました。

これが相性診断のブロックです↓↓↓
000.png

自分の好きな数字の数だけタッチセンサーに触れて打ち込みます。
間違って好きな数字を超えてしまったり、もう一度やりたい時は、二人ともAボタンを押してクリアしてください。
最後にBボタンを押して同じ数字だったら相性が良いということでハートマークが表示されます。(違ったら×が表示されます。)

こちらの動画で詳しくプログラムの作り方などを説明していますのでご覧ください。

「ブロック」のスライドボタンを「JavaScript」に変えるとソースが表示されます。

「おみくじ」

omikuji.js
let おみくじ = 0
input.onButtonPressed(Button.A, function () {
    music.startMelody(music.builtInMelody(Melodies.Dadadadum), MelodyOptions.Once)
})
input.onLogoEvent(TouchButtonEvent.Pressed, function () {
    servos.P0.setAngle(0)
})
input.onGesture(Gesture.Shake, function () {
    soundExpression.twinkle.playUntilDone()
})
input.onSound(DetectedSound.Loud, function () {
    servos.P0.setAngle(180)
})
input.onButtonPressed(Button.B, function () {
    おみくじ = randint(0, 3)
    soundExpression.happy.playUntilDone()
    if (おみくじ == 0) {
        basic.showLeds(`
            . . # . .
            # # # # #
            . . # . .
            . # . # .
            # . . . #
            `)
        music.startMelody(music.builtInMelody(Melodies.PowerUp), MelodyOptions.Once)
    } else if (おみくじ == 1) {
        basic.showLeds(`
            . . # . .
            # # # # #
            # . # . #
            # # # # #
            . . # . .
            `)
        music.startMelody(music.builtInMelody(Melodies.JumpUp), MelodyOptions.Once)
    } else if (おみくじ == 2) {
        basic.showLeds(`
            . . # . .
            . . # . .
            # . # . #
            # . # . #
            # . # . #
            `)
        music.startMelody(music.builtInMelody(Melodies.JumpDown), MelodyOptions.Once)
    } else if (おみくじ == 3) {
        basic.showLeds(`
            # . . . #
            # # . # #
            # . # . #
            # # . # #
            # # # # #
            `)
        music.startMelody(music.builtInMelody(Melodies.PowerDown), MelodyOptions.Once)
    }
})

「相性診断」

aishou.js
radio.onReceivedNumber(function (receivedNumber) {
    相手の数 = receivedNumber
})
input.onButtonPressed(Button.A, function () {
    自分の数 = 0
    相手の数 = 0
    basic.clearScreen()
})
input.onLogoEvent(TouchButtonEvent.Pressed, function () {
    自分の数 += 1
    radio.sendNumber(自分の数)
    basic.showNumber(自分の数)
})
input.onButtonPressed(Button.B, function () {
    if (自分の数 == 相手の数) {
        basic.showIcon(IconNames.Heart)
    } else {
        basic.showIcon(IconNames.No)
    }
})
let 相手の数 = 0
let 自分の数 = 0
radio.setGroup(1)
自分の数 = 0
basic.forever(function () {
	
})

新規で作ったプロジェクトのスライドボタンをJavaScriptにして上記のプログラムをコピー&ペーストすると遊べますよ。但し「おみくじ」はservoを使いますので拡張機能の追加が必要です。

##連打ゲーム(これはOSCでご紹介できなかったもの)
先程ご紹介した相性診断のもとになったもので、無線機能を使って相手と比べてどのくらい沢山タッチセンサーを連打できるかをゲームです。(このプログラムは2つのmicro:bit v2を用意して同じプログラムを入れてください。)

例えば10秒とか時間を決めて、タイマーをセットし、スタートと同時にタッチセンサーを連打します。
時間がきたらタッチするのをやめてBボタンを押したら勝敗がわかります。
もう一度勝負したい時はAボタンを押してください。その時に自分が実際何回連打していたのか、数が表示された後にクリアされます。

こちらがブロックでの表示です。
スクリーンショット 2020-12-07 11.56.56.png

JavaScriptに変えるとこのようになります。

rh.js
radio.onReceivedNumber(function (receivedNumber) {
    受け取った数 = receivedNumber
})
input.onButtonPressed(Button.A, function () {
    basic.showNumber()
    basic.pause(2000)
     = 0
    受け取った数 = 0
    basic.clearScreen()
})
input.onLogoEvent(TouchButtonEvent.Pressed, function () {
     += 1
    radio.sendNumber()
})
input.onButtonPressed(Button.B, function () {
    if ( > 受け取った数) {
        basic.showString("You Win!")
        music.startMelody(music.builtInMelody(Melodies.Wedding), MelodyOptions.Once)
    } else if ( < 受け取った数) {
        basic.showString("You Lose")
        music.startMelody(music.builtInMelody(Melodies.Funeral), MelodyOptions.Once)
    } else {
        basic.showString("Draw")
        music.startMelody(music.builtInMelody(Melodies.Entertainer), MelodyOptions.Once)
    }
})
let 受け取った数 = 0
let  = 0
radio.setGroup(1)
 = 0

##あえて間違って工夫していくことで楽しくなる
このプログラムは、タッチセンサーの連打の数を競うもので、手順としては

  1. 最初にタッチセンサーを連打する。
  2. 次にBボタンを押すと、勝敗が表示されてメロディが鳴る
  3. 次にAボタンを押すと、実際に連打した数を表示してクリアする

…というのを知ってないと楽しめないし、間違ったやり方だと当然思った通りに動作しません。

なので最初に楽しみ方を説明して知ってもらうことがとても重要になります。

でも説明するのって結構面倒くさいですよね。なので説明しなくても最初にタッチセンサーを触りたくなるような工夫をどんどん追加するといいかな?って思うのです。

例えば
スクリーンショット 2020-12-07 12.29.41.png

最初だけ矢印を表示させてタッチセンサーを使うのを促したらどうか? とか

スクリーンショット 2020-12-07 12.33.37.png

点滅させるのに繰り返しているところ、**「くりかえし」**を使ってみたらどうか? とか

どうしたらゲームが相手に伝わって楽しくなるのか、プログラムの改変が楽になるのか、途中で間違ってAボタンを押したらどうなるのか?
あえて間違ってみて、お子さんと一緒に考えて機能追加していくのも楽しいと思います!
ぜひやってみてください!

(おしまい)

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?