Crab.scan()
From 8x9craft
crab.scan()の意味とは?
crab.scan()というプログラムの「crab」ははっくん、「scan()」とは、周りにあるブロックを調べるという意味です。
crab.inspect()との違いは、inspectは、1ブロックしか調べませんが、
scanは、はっくんの前とその左右、前後、斜め左前、右前、左後、右後についても調べてくれます。
返却値について
scanの返却値は BlockStateの配列です。
let blocks = crab.scan()とした場合、調べた結果が下記のような番号の場所にセットされます。
※配列とは、変数をたくさん入れることができる番号付きのロッカーのようなものです。
※この番号は、プログラム用語では「添え字(そえじ)、インデックス」と言います。
0:左前のブロックの情報 | 1:前のブロックの情報 | 2:右前のブロックの情報 |
3:左のブロックの情報 | 4:真ん中のブロックの情報 | 5:右のブロックの情報 |
6:左後のブロックの情報 | 7:後のブロックの情報 | 8:右後のブロックの情報 |
- はっくんの眼の前のブロックの情報を使いたい場合は、blocks[1] というように指定します。
- はっくんの左のブロックの情報を使いたい場合は、blocks[3] というように指定します。
- はっくんの右のブロックの情報を使いたい場合は、blocks[5] というように指定します。
はっくんの1つ上や、1つ下の周辺を調べたいとき
- 上記のようにcrab.scan()は、はっくんが居る高さの周辺を調べます。
- crab.scanUp()とすれば、はっくんが居る場所の1つ上の周辺を調べます。
- crab.scanDown()とすれば、はっくんが居る場所の1つ下の周辺を調べます。
つまり、blocks[4]は、scan()のときは、はっくんそのもの。scanUp()の場合は、はっくんの真上。scanDown()は、はっくんの真下、ということですね。
使用例
// はっくんの下の周辺を調べます。 let blocks = crab.scanDown() // もし 前方下がコンクリート、かつ、黒だったら、進めます!と言います if (blocks[1].id == 251 && blocks[1].mata == 15) { crab.say("前に進めます!") } else { crab.say("進めません!") }