
エージェントの基本的な操作 で、エージェントを使いたいところに移動させるようにしました。
さらに、エージェントをプログラムして、サバイバルで役立てられるようにしてゆきましょう。
さて、マインクラフトのサバイバルモードで最初の難関が、初日の夜を生き延びることだと思います。
夜になるとモンスターが出現します。
なんの準備もできていないとモンスターに襲われて、ゲームオーバーになってしまいます。
夜になるまでの昼間の10数分の間にゲームオーバーにならないよう備えておかなければいけません。
夜に向けての準備を、エージェントと役割分担ができたらいいですね。
夜になってモンスターが出現してきても、生き延びる方法としては
- ベッドがあれば、寝ることで夜をスキップできるので、ベッドがすでにある村を探す。
- 同色の羊毛が3つ木材3つを集め、ベッドを作業台でクラフトして、寝ることで夜をスキップする。
- モンスターは高さ1より高い壁を登れないので、自分の周囲に壁を作ってモンスターを防ぎ、朝になるまでまつ。
- 剣と防具を準備して、襲ってきたモンスターを返り討ちにする
村を探したり羊を探したりするのは、エージェントは苦手です。
エージェントは、プログラムを組んだらそれに沿って黙々と作業をしてくれます。
エージェントにはまず、作業台やベッド、壁用の木を集めてもらいましょう。
木を一本切ってもらう
マインクラフトの世界ではよく見かける木である、シラカバと、樫の大半は、幹が一ブロックで高さ4~6ブロックで生えています。
エージェントに木を集めてもらうには、まずは
木の前にエージェントを呼んで、
木の方向に向かせて、
エージェントに前を破壊させて、
エージェントにアイテムを全てひろわせる
で、 エージェントが原木を一つ回収します。
エージェントを呼んで木の方に向かせるのは エージェントの基本的な操作 でできるので、 エージェントに前を破壊させて、アイテムを回収、のプログラミングとしてはこうなります。

チャットコマンドとして ”cut tree” で “ct” としましたが、これは自分が覚えやすい名前で大丈夫です。
これだと「ct」コマンド一回で木ブロック一つしか回収できないので、幹の上までエージェントに回収してもらいましょう。
エージェントに上のブロックを破壊させて、
エージェントにアイテムを全てひろわせて、
エージェントを一歩上にすすめる
これを繰り返すことで上の方まで木を切って回収することができます。
プログラムを繰り返すには、コマンドメニュー「ループ」のブロックを使います。
たとえば「繰り返し4回」ではさめば、はさまれたプログラムを4回繰り返します。

シラカバや樫の木は高さが6くらいなので、5回繰り返すという方法が考えられます。
他の考え方としては、ループの中に「もし真ならくりかえし」というのがあります。
エージェントの上にブロックがあったら繰り返して、無かったら繰り返しを終了させる、ということができます。

幹の上の葉っぱまで切ってしまいますが、木の高さに合わせて繰り返すことができるので、こちらの方がスマートですかね。
木を複数本切ってもらう
これまでで、木を一本エージェントに切ってもらうことができるようになりましたが、木一本ごとに、プレイヤーが木を探し、その前に移動し、エージェントを呼び出して、向きを合わせて、切ってもらうのは効率が悪いですね。
ある範囲の木を、全部切ってもらえるように改造しましょう。
先ほどの一本木を切った時点でエージェントは木の上にいます。
次の木を探すには、地面まで戻してあげる必要があるので、このように改造します。

これに、エージェントの前にブロックがあったら、その上に連続してあるブロックを切って、無かったら前に進む、
を10回繰り返すプログラムに改造します。

だんだんプログラムが長くなってきて、見にくくなってきましたね。
上の図の黄色い枠で囲んだ部分は目の前の木を一本切ってくるプログラムなので、これを関数にまとめてしまいます。
関数というのはプログラムから呼び出せるプログラムの塊で、コマンドメニューの「高度なブロック」の中の「関数」から作ることができます。
fctという関数を作って、 チャットコマンド”ct”の黄色い枠の部分を、その中に移動。

チャットコマンド”ct”の黄色い枠があったところに「呼び出し fct」をいれます。

関数を使うと、プログラムがスッキリしますね。
実際にサバイバル初日で試してみた
複数の木を切ってもらうプログラムを、前方向に10ブロックだけでなく横方向にも10ブロック、計100ブロック内の木を切るように改良して、実際にサバイバル初日で試してみましたが…場所によってはあまり効率がよくなさそうです。
初日の木こりに関しては、プレイヤーが木を見つけてエージェントに木を切ってもらうほうが良さそうです。

チャットコマンド”ct”を入力したら、エージェントが西を向いた状態でテレポートし、前の木を切ってくれます。
エージェントが木を切り終わったら、メッセージを送って知らせてくれます。
プレイヤーは木の東側に立ってチャットコマンド”ct”を入力、エージェントに木こりは任せて次の木の東側に移動。
エージェントが木を切り終わったメッセージがあったら、また チャットコマンド”ct”を入力、のほうが効率が良さそうです。