虹色 LED ランタンにはボタンが二個ついています。このボタンが押されているかどうかをプログラムから知ることができるようになっています。ボタン関連の命令は以下の四つです。
スイッチ 1 が押されていたら飛び先にジャンプする
スイッチ 1 が押されてなかったら飛び先にジャンプする
スイッチ 2 が押されていたら飛び先にジャンプする
スイッチ 2 が押されてなかったら飛び先にジャンプする
ボタン 1 が押されているかどうかを知る bbtp1 命令の例を見てみましょう。
LABEL1: ledz 0 7 7 wait 10 bbtp1 LABEL2 jmp LABEL1 LABEL2: ledz 7 0 7 wait 10 jmp LABEL2 |
このプログラムを頭から解説すると
ここに LABEL1 という名前をつける
全 LED を水色で表示する
0.02 x 10 = 0.2 秒待つ
もしボタン 1 が押されていたら LABEL2 と名付けた所、すなわち 7 行目に飛ぶ
(ちなみにここはボタンが押されてない時来る) LABEL1 と名付けた所、すなわち 2 行目に飛ぶ
ここに LABEL2 という名前をつける
全 LED を紫色で表示する
0.02 x 10 = 0.2 秒待つ
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 |
なお「ゲームも作れる」ことを示しただけで、ゲーム自体が面白いわけではありません。