論理ブロックの使い方 - 条件によって処理を変える
![論理ブロックの使い方 - 条件によって処理を変える](/_next/image/?url=%2Fcontent%2Fcode-builder%2Fmakecode-basic%2Fcode-builder-logic%2Fthumbnail.png&w=1920&q=75)
あなたがMinecraftをプレイしているとき、次のような行動をとることがあるでしょう。
満腹度が減っていたら、食べ物を食べる。 夜になったら、ベッドで寝る。 クリーパーを見つけたら、弓矢で攻撃する。
論理ブロックは、このように、「~なら、~をする」というような処理をプログラムで作ることができます。
サンプルプロジェクトの読み込み
この記事で使ったプログラムを公開しています。 コードビルダーの読み込み機能から、次のURLを使って、プロジェクトをダウンロードしてください。
https://makecode.com/_YE1X59VEkJUR
まずは完成品のプログラムを使ってみて、次に自分で組んでみてください。
もし同じように動かなかった場合は、どこが違うのかをよく観察してください。
もし~ならば (if)
![logic1.png](/_next/image/?url=%2Fcontent%2Fcode-builder%2Fmakecode-basic%2Fcode-builder-logic%2Flogic1.png&w=1920&q=75)
例文は「スニークしたときに、『もし足元の座標に草ブロックがあるならば』、メッセージを送信する」という処理になります。
このもし~なら
というブロックは、ある条件を確認して、それが正しいときにだけ実行します。
順番に見ていきましょう。
まず、座標部分ですが、自分を基準にしてy
が-1
の位置ということですね。
つまり、自分の足元である、自分が立っているブロックのことを指します。
なので、今回の条件として、「足元のブロックは草ブロックですか」という質問がされています。
この質問の答えによって次のようになります。
- 「はい」ならば真 ・true
- 「いいえ」ならば偽 ・false
この質問が真の場合だけ、ブロックの内側の処理が実行されてメッセージが流れます。 つまり、足元が草ブロックのときだけ、メッセージが流れて、それ以外のブロックだとメッセージが流れません。
偽の場合には、その部分は無視されて次に進みます。エラーになって止まるわけではありません。
「はい」か「いいえ」で答えられない質問の場合にはエラーがでます。
~でなければ (else)
![logic2.png](/_next/image/?url=%2Fcontent%2Fcode-builder%2Fmakecode-basic%2Fcode-builder-logic%2Flogic2.png&w=1920&q=75)
次は、「正しくなかった場合」の処理の書き方をみていきましょう。
今回の条件は「草ブロックを壊した回数を2で割ったあまりが1ならば」です。
草ブロックを壊した回数
という変数を作って、この内容に合わせて処理を変えます。
壊した回数は1回ずつ増えていくので、具体的にみていきましょう。
- 1のとき、
1 ÷ 2 = 0 あまり 1
となり、正しいので真 - 2のとき、
2 ÷ 2 = 1 あまり 0
となり、正しくないので偽 - 3のとき、
3 ÷ 2 = 1 あまり 1
となり、正しいので真 - 4のとき、
4 ÷ 2 = 2 あまり 0
となり、正しくないので偽
この条件では、真のとき(あまりが1)は奇数 、偽のとき(余りは0)は偶数 になります。
~でないけれど、~ならば (else if)
![logic3.png](/_next/image/?url=%2Fcontent%2Fcode-builder%2Fmakecode-basic%2Fcode-builder-logic%2Flogic3.png&w=1920&q=75)
条件はいくつも設定できます。 この書き方の場合は、上から順番に判定し、正しかったらそこの処理だけ行われ、残りは無視されます。
例えば土ブロックを壊した数
が1
の時は次のようになります。
- 1番目の条件は
数
が1
のときなので、正しいです - 2番目の条件は
数
が4以下
なので、これも正しいです
しかし、この場合は1番目の処理だけが行われます。 1番目で条件を満たしたので、2番目以降は無視されます。
1回目のときは、メッセージだけが表示され、ニワトリが出現しないことに注目してください。
- 壊した数が
1
のとき、1番目の条件を満たすので、メッセージが出る - 壊した数が
2
のとき、2番目の条件を満たすので、ニワトリが出る - 壊した数が
3
のとき、2番目の条件を満たすので、ニワトリが出る - 壊した数が
4
のとき、条件を満たさないのでゾンビが出る
フラグを立てる
![logic4.png](/_next/image/?url=%2Fcontent%2Fcode-builder%2Fmakecode-basic%2Fcode-builder-logic%2Flogic4.png&w=1920&q=75)
変数の中にはそのまま「真」と「偽」を入れることもできます。
この例では、「羽根を使ったとき」を条件にして、変数死亡フラグ
を切り替えています。
この死亡フラグ
が真になっているときに、プレイヤーが走ると死にます。
このように、変数を通して離れたブロックの条件を操作できます。
よくいわれる死亡フラグとは、このようなプログラミング処理が語源です。
まず、あるキャラクターが物語の途中で、ある行動をとったときに、そのキャラクターの死亡フラグを真にします(フラグを立てる)。 そして、ある場面で条件が判定されたときに、条件は真になっているので、そのまま死亡イベントが発生します。
「フラグを折る」という表現は、死亡フラグが偽になったという表現です。 この場合は、判定されても条件を満たさないので死亡イベントは発生しません。
条件を組み合わせる
今回の例として、2と3の倍数を判定してみましょう。 長くなるので、先に全体のブロックを表示しておきます。
![logic5.png](/_next/image/?url=%2Fcontent%2Fcode-builder%2Fmakecode-basic%2Fcode-builder-logic%2Flogic5.png&w=1920&q=75)
チャットコマンドのブロックの右上にある「+」ボタンを押して引数 を受け取れるように設定してください。
この場合の使い方は、指定したチャットコマンドに続けて、半角スペースを空けて数字を入力します。
baisuu 2
baisuu 3
baisuu 5
baisuu 6
判定した結果を変数に入れる
2の倍数とは、「2で割った余りが0になる数字」のことです。
具体的には0, 2, 4, 6, 8, 10, 12...
です。
3の倍数とは、「3で割った余りが0になる数字」のことです。
具体的には0, 3, 6, 9, 12, 15...
です。
これの判定結果を変数に入れておきます。
![logic4_1.png](/_next/image/?url=%2Fcontent%2Fcode-builder%2Fmakecode-basic%2Fcode-builder-logic%2Flogic4_1.png&w=1920&q=75)
この変数の中には「入力した数を2で割った余りは、0ですか」という質問に対する答えが、「はい(真)」か「いいえ(偽)」で入っています。 つまり、この変数自体を条件ブロックの中に入れることができます。
今回は倍数であるかどうかを判定をしたいのでした。
この場合は、2の倍数の処理と繋げて、3の倍数の判定を~でなければもし
の形で、書かないようにしましょう。
例えば6のときは、2の倍数でも3の倍数でもあるので、両方を表示するべきです。 もし繋げて書いてしまうと、2の倍数と表示する処理だけで終わってしまい、3の倍数とは表示されません。
かつ(and) - AとBの両方を満たす
![logic4_2.png](/_next/image/?url=%2Fcontent%2Fcode-builder%2Fmakecode-basic%2Fcode-builder-logic%2Flogic4_2.png&w=1920&q=75)
「2の倍数」かつ「3の倍数」とは、この 2つの条件を「共に」満たしたときに正しくなります。
どちらか1つだけが正しい場合は条件を満たしません。 「2の倍数」だけでも、「3の倍数」だけでもいけません。 「2の倍数」でありながら、また「3の倍数」でもある場合だけ条件を満たします。
つまり0, 6, 12, 18, 24, 30...
のときです。
それぞれの数字は2でも、3でも割り切れますね。
または(or) - AかBの少なくともどちらか一方を満たす
![logic4_3.png](/_next/image/?url=%2Fcontent%2Fcode-builder%2Fmakecode-basic%2Fcode-builder-logic%2Flogic4_3.png&w=1920&q=75)
「2の倍数」または「3の倍数」とは、 この2つの条件の「少なくともどちらか一方」を満たしたときに正しくなります。
「2の倍数」だけでも、「3の倍数」だけでも構いません。 勘違いしやすいところです、両方を満たしていても構いません。
つまり0, 2, 3, 4, 6, 8, 9, 10...
のときです。
それぞれの数字は2か3のどちらかで割り切れますね。
6の場合は、2でも、3でも割り切れますが、これも含みます。
ではない(not)
![logic4_4.png](/_next/image/?url=%2Fcontent%2Fcode-builder%2Fmakecode-basic%2Fcode-builder-logic%2Flogic4_4.png&w=1920&q=75)
「~ではない」を組み込むと条件が反対になります。 つまり、この中の値が偽であったときに、真と判定されるようになります。
「(『2の倍数』または『3の倍数』)ではない」となるので、この場合は上の「または」の条件を、「~でなければ(else)」として使った場合と同じです。