ジェスチャー

加速度センサーを持つことの実に興味深い副作用はジェスチャーの検出です。BBC micro:bit を特定の手段(ジェスチャー)で動かすと、MicroPython はこれを検出できます。

MicroPythonは、次のジェスチャーを認識することが可能です: up, down, left, right, face up, face down, freefall, 3g, 6g, 8g, shake 。ジェスチャーは常に文字列として表されます。名前でほとんどのものは明らかですが、ジェスチャー 3g, 6g, 8g は、デバイスが(宇宙飛行士が宇宙に打ち上げされたときのような) g 力のこれらのレベルを受けたことを検出します。

現在のジェスチャーを取得するには、 accelerometer.current_gesture メソッドを使います。その結果は上に挙げた名前のジェスチャーの1つになるでしょう。たとえば、以下のプログラムを使用すると、デバイスが表向きの場合にのみデバイスがハッピーになります。

from microbit import *

while True:
    gesture = accelerometer.current_gesture()
    if gesture == "face up":
        display.show(Image.HAPPY)
    else:
        display.show(Image.ANGRY)

前にもやったように、デバイスが変化する状況に対応させるために while ループを使います。ループの スコープ 内で、現在のジェスチャーが読み込まれて gesture に入ります。 if 条件は gesture"face up" であるかをチェックします(Python では等価性の検査に == を使い、単一の等価記号 = は代入に使います - ちょうどジェスチャーを読んで gesture に代入しているように)。ジェスチャーが "face up" であれば、ディスプレイを使ってハッピーな顔を表示します。それ以外の場合、デバイスは怒って見えるようになります!

マジック8

マジック8ボールは 1950 年代に最初に発明されたおもちゃです。遊び方はイエス/ノーの質問をして、マジック8ボールを振り、真実を明らかにするのを待つことです。これをプログラムに変えるのは簡単です:

from microbit import *
import random

answers = [
    "It is certain",
    "It is decidedly so",
    "Without a doubt",
    "Yes, definitely",
    "You may rely on it",
    "As I see it, yes",
    "Most likely",
    "Outlook good",
    "Yes",
    "Signs point to yes",
    "Reply hazy try again",
    "Ask again later",
    "Better not tell you now",
    "Cannot predict now",
    "Concentrate and ask again",
    "Don't count on it",
    "My reply is no",
    "My sources say no",
    "Outlook not so good",
    "Very doubtful",
]

while True:
    display.show("8")
    if accelerometer.was_gesture("shake"):
        display.clear()
        sleep(1000)
        display.scroll(random.choice(answers))

プログラムのほとんどは、 ansawers というリストです。実際のゲームは最後の while ループです。

ゲームのデフォルト状態は文字 "8" を表示することです。しかし、プログラムはそれが揺れているかどうかを検出する必要があります。was_gesture メソッドはその引数にしたがい(この場合、ゆさぶっていることを検出したいので、文字列 "shake" を指定しています)、 True / False の応答を返します。デバイスを振った場合、 if 条件のコードブロックに入り、画面をクリアし、1 秒間待って(デバイスがあなたの質問について考えているように見える)、無作為に選択された回答を表示します。

これが今までに書かれた最高のプログラムかを、このプログラム自身に聞いてみませんか? 「ズル」をして答えを常にポジティブまたはネガティブな回答にするにはどうすればよいですか? (ヒント: ボタンを利用)