マインクラフト MakeCode Agent Build コードチェック

マインクラフト MakeCode プログラミング。
チュートリアル、コードチェック編。

Agent Build のコードチェックページです。

 player.onChat("pd", function () {
agent.setAssist(AgentAssist.PlaceOnMove, true)
agent.teleportToPlayer()
})
player.onChat("square", function () {
for (let カウンター = 0; カウンター <= 3; カウンター++) {
agent.move(SixDirection.Forward, 3)
if (agent.detect(AgentDetection.Block, SixDirection.Forward)) {
agent.move(SixDirection.Up, 1)
agent.setAssist(AgentAssist.PlaceOnMove, false)
agent.move(SixDirection.Forward, 1)
}
agent.turn(TurnDirection.Left)
}
})

コードは2つに分かれています。
まずは最初のコードを確認しましょう。

 player.onChat("pd", function () {
agent.setAssist(AgentAssist.PlaceOnMove, true)
agent.teleportToPlayer()
})

新しいのは
agent.setAssist(AgentAssist.PlaceOnMove, true)
この部分ですね。
agent.setAssist(AgentAssist.命令内容, 真偽)
という形式ですね。
ブロックで言うと

になります。

命令内容は
PlaceOnMove ・・・・・・動きながら置く
PlaceFromAnySlot・・・・アイテムがなくなったら次のアイテムを使う
DetroyObstacles・・・・・動きながら壊す
真偽は
true ・・・・実行する
false・・・・実行しない
となります。

次のコードは

player.onChat("square", function () {
for (let カウンター = 0; カウンター <= 3; カウンター++) {
agent.move(SixDirection.Forward, 3)
if (agent.detect(AgentDetection.Block, SixDirection.Forward)) {
agent.move(SixDirection.Up, 1)
agent.setAssist(AgentAssist.PlaceOnMove, false)
agent.move(SixDirection.Forward, 1)
}
agent.turn(TurnDirection.Left)
}
})

なんだか一気にプログラミングコードっぽくなりましたね。
ループと条件判断の論理を同時に使っているせいでしょう。
細かく分けて見ていきましょう。

まずはループ部分から
ループ部分のコードを切り取ると

for (let カウンター = 0; カウンター <= 3; カウンター++) {
}

この部分です。
ブロックで言うと

の部分になります。
ループの命令 for の記述方法は

for (let 変数名 = 初期値; 変数値 <= 最大値; 変数値 増減の数値) {
くりかえす内容
}

となります。
let は変数を指定するときに使用する決まり文句です。
これから変数を設定するよっていうときに使います。
詳しい説明はこちら-MDN web docs
=、<=、++はそれぞれ
= ・・・変数を設定(代入)するとき
<=・・・左のほうが右より小さいときは真(実行)、大きければ偽(非実行)
++・・・値を1ずつ増加させる

では次に論理、条件判断です。

if (agent.detect(AgentDetection.Block, SixDirection.Forward)) {
agent.move(SixDirection.Up, 1)
agent.setAssist(AgentAssist.PlaceOnMove, false)
agent.move(SixDirection.Forward, 1)
}

この部分になります。
ブロックで言うと

の部分になります。(新しいところだけ抜粋)
条件判断の命令 if の記述方法は

if (真偽、任意の条件) {
真の時に実行する命令
}

となります。

今回は
真偽、任意の条件のところが
agent.detect(AgentDetection.Block, SixDirection.Forward)
となっています。
エージェントに確認させる命令ですね。
記述方法は

agent.detect(確認させる内容, SixDirection.確認する場所)

確認させる内容はブロックかレッドストーン
確認する場所は前後左右上下

確認する内容のレッドストーンというのはレッドストーンなのかレッドストーン回路なのかは現状不明。
レッドストーンパウダーや鉱石、リピーターなどを使って簡単な確認をしましたが思い通りの動作をしてくれなく、いまいち仕様が不明です。

真の時に実行する命令は

agent.move(SixDirection.Up, 1)
agent.setAssist(AgentAssist.PlaceOnMove, false)
agent.move(SixDirection.Forward, 1)

となり
エージェントを上に1ブロック移動
動きながら置くを偽に設定
前に1ブロック移動
となります。

その後、条件判断の命令が終了したら

agent.turn(TurnDirection.Left)

エージェントを左に向けて終了です。

エージェントに確認させるの部分がいまいち詳細が不明なのはボチボチ解明していきましょう。

コメント