5. ボタンに反応させてみよう


ボタン

虹色 LED ランタンにはボタンが二個ついています。このボタンが押されているかどうかをプログラムから知ることができるようになっています。ボタン関連の命令は以下の四つです。

ボタン 1 が押されているかどうかを知る bbtp1 命令の例を見てみましょう。

LABEL1:
  ledz 0 7 7
  wait 10
  bbtp1 LABEL2
  jmp LABEL1
LABEL2:
  ledz 7 0 7
  wait 10
  jmp LABEL2

このプログラムを頭から解説すると

  1. LABEL1:

    ここに LABEL1 という名前をつける

  2. ledz 0 7 7

    全 LED を水色で表示する

  3. wait 10

    0.02 x 10 = 0.2 秒待つ

  4. bbtp1 LABEL2

    もしボタン 1 が押されていたら LABEL2 と名付けた所、すなわち 7 行目に飛ぶ

  5. jmp LABEL1

    (ちなみにここはボタンが押されてない時来る) LABEL1 と名付けた所、すなわち 2 行目に飛ぶ

  6. LABEL2:

    ここに LABEL2 という名前をつける

  7. ledz 0 7 7

    全 LED を紫色で表示する

  8. wait 10

    0.02 x 10 = 0.2 秒待つ

  9. jmp LABEL2

    LABEL2 と名付けた所、すなわち 7 行目に飛ぶ

となります。


さて、このプログラムは一回ボタン 1 が押されて紫色の表示になると永久に 7〜9 行を回り続け元の水色に戻ることはできません。 これを戻るようにするにはどうすればいいでしょうか。

水色に戻す方法は二種類あります。 一つはボタン 2 が押されたら戻る方法、もう一つは ボタン1 が押されなくなったら戻る方法です。 それぞれ以下のように書くと実現できます。

LABEL1:
  ledz 0 7 7
  wait 10
  bbtp1 LABEL2
  jmp LABEL1
LABEL2:
  ledz 7 0 7
  wait 10
  bbtp2 LABEL1
  jmp LABEL2

LABEL1:
  ledz 0 7 7
  wait 10
  bbtp1 LABEL2
  jmp LABEL1
LABEL2:
  ledz 7 0 7
  wait 10
  bbtn1 LABEL1
  jmp LABEL2

簡単なゲーム

ボタンが二個あるので二人で競ういろいろなゲームを作ることもできます。 例えば以下はクイズ番組なんかである早押しゲームです。 通常は薄い緑で点灯していて、ボタン 1 が先に押せば青く、ボタン 2 が先に押せば 赤く光るものです。

  ledz 0 3 0
LOOP:
  bbtp1 LABEL1
  bbtp2 LABEL2
  jmp LOOP
LABEL1:
  ledz 0 0 7
  wait 10
  jmp LABEL1
LABEL2:
  ledz 7 0 0
  wait 10
  jmp LABEL2

もう一つはドンケツゲームとかポカポンゲームと呼ばれるものです。 通常は緑の状態です。相手から攻撃を受けてもダメージを受けません。 ボタンを押すと赤い攻撃モードになります。相手も攻撃モードだったら ダメージを与え倒すことができます。逆に攻撃モード中に相手から攻撃を 受けたらダメージを受け倒されます。 倒されると灰色になります。

LOOP:
  ledz 0 5 0
  bbtp1 LABEL1
  bbtp2 LABEL2
  jmp LOOP
LABEL1:
  leda 7 0 0
  ledd 7 0 0
  bbtp2 LABEL3
  bbtn1 LOOP
  jmp LABEL1
LABEL2:
  ledb 7 0 0
  ledc 7 0 0
  bbtp1 LABEL4
  bbtn2 LOOP
  jmp LABEL2
LABEL3:
  ledb 7 0 0
  ledc 7 0 0
  leda 2 2 2
  ledd 2 2 2
  jmp LABEL5
LABEL4:
  leda 7 0 0
  ledd 7 0 0
  ledb 2 2 2
  ledc 2 2 2
  jmp LABEL5
LABEL5:
  wait 10
  jmp LABEL5

なお「ゲームも作れる」ことを示しただけで、ゲーム自体が面白いわけではありません。


[戻る]