よく見かけるIF B AND #A THEN ~というのは特殊は書き方であり実は応用的な記述なので初心者が理解できるにはある程度の段階を踏んでないと難しいです。
その説明ができないならば「B AND #A」で(他のボタンが押されていても)Aボタンが押されたかどうかの判定が可能なおまじないみたいなものと丸暗記してもらうのも1つの手です。ただし、おまじない(丸暗記)にしてしまった時点でそれからの発展は無くなる両刃の剣です。(後で詳しく説明する予定というのであれば何ら問題はないですが)
それと同様にWHILE 1~WENDで無限ループになるのも特殊な書き方であるもののこちらは丸暗記でも大して問題にはなりません。
ボタン入力判定の鍵ともいえるIF B AND ○ THEN ~という記述ですが、この時点でしっかり説明しておくのか、軽く流すだけ(後で詳しく説明も無し)でいいのか、後で十分に説明するのかによってこの回での説明方法は全く変わると思います。
IF B==#A THEN ~とIF B AND #A THEN ~との対比だと「==とANDとの違い」と勘違いしてしまいがち(実際にそういう初心者も多い)でそれを無くすためには「falseとtrue(論理演算)」と「ビット演算(つまり、2進数の演算)」の知識が必要不可欠になってしまいます。それを初心者に分かるように順序よく説明しようとすれば必然的に私の講座くらいの文章量になってしまいます。
簡潔、かつ、(初心者に分かるように)分かりやすく説明するのはすごく難しいことなのです。
せっかく分かりやすい定数リテラルで記述しても2進数に変換して説明するとなると本末転倒であり、初心者に理解してもらうため私は「2進数を使わない(ボタン入力限定)ビット演算の説明」を行っています。
ちなみに私のプチコン3号入門講座の基本的な記述方法だと「左上の判定」はIF (B AND #LEFT+#UP)=#LEFT+#UP THEN ~となります。これはIF B==#LEFT+#UP THEN ~から簡単に移行できるため非常に分かりやすいと思います。(2進数を説明しなくてもB AND #LEFT+#UPで左と上のボタンの情報を取り出せるということさえ分かればいい)
中級者以上であればIF B AND #LEFT && B AND #UP THEN ~の方が良いと思いがちですが慣れてない初心者がIF B==#LEFT+#UP THEN ~からこの形へと移行させるのは難しいと私は思います。
実は2進数→16進数や16進数→2進数は簡単(16通り覚えればいいので九九を覚えるよりも簡単)ですが、10進数→2進数や2進数→10進数は計算する以外にないため計算方法から覚えなくてはなりません。まぁBIN$関数が加わったお陰でその計算方法を説明しなくてもBIN$を使えば良いのでビット演算の説明はしやすくなりましたね。
ちなみにボタン判定はすべて B AND ○ を使用しているのですが、すでに行っている B==○ との違いの説明は行うのでしょうか?今まで B==○ だったのにいきなり B AND ○ に変わったら「おまじない」でも戸惑いそうです。
プログラムに正解がないのと同じく講座(説明の方法)にも正解はありません。ただし、プログラムがどのようなものを作りたいのかを考えた上でそれに沿ったプログラムを作るのと同じく講座もその自分が考えたものに沿っていればそれで正解だと思います。
条件式 AND 条件式なら 訳したままで良いけど
良く良く考えると B AND #ボタンは説明出来ないなー。
B=BUTTON()で 入力してるボタンが入って #UPなら1で
Bに上を入れてたとしたら IF (1+α) AND 1 THEN ~
もし (1+α)と1 なら ~
日本語として成立してないから 何故に上入力してる事を判定するのかも説明も出来ない。
IF (B AND #UP)==0 THEN ~
こっちは==で判定してるから 一応日本語は成立するけど #UPの方が0になる事はないから ANDが成立しなくなる。実際は成立するから 入力してないを判断するんだろうけど 日本語で考えてくと説明のしようがなくなってしまう。
ボタン部分は こうすればこうなる というだけで 何の不自由もないから気にもしてなかったけど 意味不明な事を書いてる というのはちょっと気持ち悪いな。
B AND #Aの動きをきちんと理解できるようになったら特定のボタンを押して特定のボタンを押してない場合の条件式も簡単に記述できます。
4方向をすべてANDを使って記述すると自動的に8方向移動になってしまいますが、これを4方向に抑えたいという場合であっても簡単に記述できるのでプログラミングが楽しくなります。
とはいえ、すべてを説明しようと思ったらすごく長くなるのでnobuさんが不要と思った部分を端折るのは何ら問題はないと思います。
私はMiiverseで初心者の質問をたくさん見てきましたが、大きく分けて3つあります。
(1)ヘルプを見ることができず、簡単な命令さえ使うことができない人
(2)ヘルプを見ても使い方がよく分からないで悩んでいる人
(3)ヘルプに載ってない部分で悩んでいる人
実は今回のANDは(2)と(3)なのです。これをどうするかはnobuさん次第です。
先日も書いたようにB AND #Aというのはヘルプでもろくに記述されてない特殊な使い方なんですよね。
IFでヘルプを見てみると「(条件1 AND 条件2)同時に満たす」と記述されています。
これから推測すればIF B AND #A THEN ~というのはBと#Aを同時に満たす場合となり意味不明な条件になってしまいます。
次にANDでヘルプを見てみると「変数=数値1 AND 数値2」となっていて数値1と数値2の論理積(ビット演算)となっています。この時点で初心者には意味不明ですが、数値1の説明が「ビット列1」、数値2の説明が「ビット列2」になっているし使用例が「A=200 AND &HE7」と記述されているし、さらに意味不明になっています。
このヘルプのみでB AND #Aの意味を理解できる初心者がいたらその人は天才です。
BUTTON関数の戻り値は(10進数っぽい値が入るけど)3DSのたくさんのボタンの状態が特別な形で1つの変数に入ってくるので、それを個別に判定するのが B AND #UP みたいな書き方です。
それぞれに対応するのはこの書き方です(斜めや同時押し含む例を載せる)
って感じで、おまじないとするのが最初は混乱しない感じかもです。
この時点では方向やボタンを取得したいだけなはずなので、2進数かどうかなんてややこしいこと気にしなくて、ボタンだけ取得できればいいのかなと。
2進数やビット操作はDIALOGやBGPUTやATTRなど、慣れてきたあたりで使うような命令で、ビットで渡す必要があるときに説明すればいいのかなとは思います。