論理ブロックの使い方 - 条件によって処理を変える

論理ブロックの使い方 - 条件によって処理を変える

あなたがMinecraftをプレイしているとき、次のような行動をとることがあるでしょう。

満腹度が減っていたら、食べ物を食べる。 夜になったら、ベッドで寝る。 クリーパーを見つけたら、弓矢で攻撃する。

論理ブロックは、このように、「~なら、~をする」というような処理をプログラムで作ることができます。

サンプルプロジェクトの読み込み

この記事で使ったプログラムを公開しています。 コードビルダーの読み込み機能から、次のURLを使って、プロジェクトをダウンロードしてください。

https://makecode.com/_YE1X59VEkJUR

まずは完成品のプログラムを使ってみて、次に自分で組んでみてください。

もし同じように動かなかった場合は、どこが違うのかをよく観察してください。

もし~ならば (if)

logic1.png

例文は「スニークしたときに、『もし足元の座標に草ブロックがあるならば』、メッセージを送信する」という処理になります。

このもし~ならというブロックは、ある条件を確認して、それが正しいときにだけ実行します。 順番に見ていきましょう。

まず、座標部分ですが、自分を基準にしてy-1の位置ということですね。 つまり、自分の足元である、自分が立っているブロックのことを指します。

なので、今回の条件として、「足元のブロックは草ブロックですか」という質問がされています。

この質問の答えによって次のようになります。

  • 「はい」ならば (しん)true (トゥルー)
  • 「いいえ」ならば ()false (フォルス)

この質問がの場合だけ、ブロックの内側の処理が実行されてメッセージが流れます。 つまり、足元が草ブロックのときだけ、メッセージが流れて、それ以外のブロックだとメッセージが流れません。

の場合には、その部分は無視されて次に進みます。エラーになって止まるわけではありません。

「はい」か「いいえ」で答えられない質問の場合にはエラーがでます。

~でなければ (else)

logic2.png

次は、「正しくなかった場合」の処理の書き方をみていきましょう。

今回の条件は「草ブロックを壊した回数を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

条件はいくつも設定できます。 この書き方の場合は、上から順番に判定し、正しかったらそこの処理だけ行われ、残りは無視されます。

例えば土ブロックを壊した数1の時は次のようになります。

  • 1番目の条件は1のときなので、正しいです
  • 2番目の条件は4以下なので、これも正しいです

しかし、この場合は1番目の処理だけが行われます。 1番目で条件を満たしたので、2番目以降は無視されます。

1回目のときは、メッセージだけが表示され、ニワトリが出現しないことに注目してください。

  • 壊した数が1のとき、1番目の条件を満たすので、メッセージが出る
  • 壊した数が2のとき、2番目の条件を満たすので、ニワトリが出る
  • 壊した数が3のとき、2番目の条件を満たすので、ニワトリが出る
  • 壊した数が4のとき、条件を満たさないのでゾンビが出る

フラグを立てる

logic4.png

変数の中にはそのまま「真」と「偽」を入れることもできます。

この例では、「羽根を使ったとき」を条件にして、変数死亡フラグを切り替えています。 この死亡フラグになっているときに、プレイヤーが走ると死にます。 このように、変数を通して離れたブロックの条件を操作できます。

よくいわれる死亡フラグとは、このようなプログラミング処理が語源です。

まず、あるキャラクターが物語の途中で、ある行動をとったときに、そのキャラクターの死亡フラグを真にします(フラグを立てる)。 そして、ある場面で条件が判定されたときに、条件は真になっているので、そのまま死亡イベントが発生します。

「フラグを折る」という表現は、死亡フラグが偽になったという表現です。 この場合は、判定されても条件を満たさないので死亡イベントは発生しません。

条件を組み合わせる

今回の例として、2と3の倍数を判定してみましょう。 長くなるので、先に全体のブロックを表示しておきます。

logic5.png

チャットコマンドのブロックの右上にある「+」ボタンを押して引数 (ひきすう)を受け取れるように設定してください。

この場合の使い方は、指定したチャットコマンドに続けて、半角スペースを空けて数字を入力します。

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

この変数の中には「入力した数を2で割った余りは、0ですか」という質問に対する答えが、「はい(真)」か「いいえ(偽)」で入っています。 つまり、この変数自体を条件ブロックの中に入れることができます。

今回は倍数であるかどうかを判定をしたいのでした。 この場合は、2の倍数の処理と繋げて、3の倍数の判定を~でなければもしの形で、書かないようにしましょう。

例えば6のときは、2の倍数でも3の倍数でもあるので、両方を表示するべきです。 もし繋げて書いてしまうと、2の倍数と表示する処理だけで終わってしまい、3の倍数とは表示されません。


かつ(and) - AとBの両方を満たす

logic4_2.png

「2の倍数」かつ「3の倍数」とは、この 2つの条件を「共に」満たしたときに正しくなります。

どちらか1つだけが正しい場合は条件を満たしません。 「2の倍数」だけでも、「3の倍数」だけでもいけません。 「2の倍数」でありながら、また「3の倍数」でもある場合だけ条件を満たします。

つまり0, 6, 12, 18, 24, 30...のときです。 それぞれの数字は2でも、3でも割り切れますね。

または(or) - AかBの少なくともどちらか一方を満たす

logic4_3.png

「2の倍数」または「3の倍数」とは、 この2つの条件の「少なくともどちらか一方」を満たしたときに正しくなります。

「2の倍数」だけでも、「3の倍数」だけでも構いません。 勘違いしやすいところです、両方を満たしていても構いません。

つまり0, 2, 3, 4, 6, 8, 9, 10...のときです。 それぞれの数字は2か3のどちらかで割り切れますね。 6の場合は、2でも、3でも割り切れますが、これも含みます。

ではない(not)

logic4_4.png

「~ではない」を組み込むと条件が反対になります。 つまり、この中の値が偽であったときに、真と判定されるようになります。

「(『2の倍数』または『3の倍数』)ではない」となるので、この場合は上の「または」の条件を、「~でなければ(else)」として使った場合と同じです。

次のページへ
コマンド