解説動画
解答コード
// 橋のブロックを保存する変数で中身は配列
let arrBridge = [[0]];
// 橋の長さを保存する変数
let bridge_len = 1;
// 橋の横移動を制御する変数
let sideStepCnt = 1;
function cloneBridge() {
arrBridge.forEach(function (element) {
element.forEach(function (block) {
agent.setItem(block, 1, 1);
agent.place(DOWN);
// 設置したら1足していく
sideStepCnt += 1;
// sideStepCntが5以下の時に右に1ブロック進む
if(sideStepCnt <= 5) {
agent.move(RIGHT, 1);
}
});
// element.length左に移動すると橋から飛び出してしまうので、1引くことで、橋の上を移動することができる
agent.move(LEFT, element.length - 1);
agent.move(FORWARD, 1);
// sideStepCntをまた初期値に戻す
sideStepCnt = 1;
});
}
function inspectBridge() {
arrBridge = [];
// 下のブロックが空ではない間はプログラムを実行する
while(Block.Air != agent.inspect(AgentInspection.Block, DOWN)) {
let arrline = [];
for(let i = 0; i < 5; i++) {
let block_type = agent.inspect(AgentInspection.Block, DOWN);
arrline.push(block_type);
agent.move(RIGHT, 1);
}
arrBridge.push(arrline);
agent.move(LEFT, 5);
agent.move(FORWARD, 1);
// 橋の長さを保存するために前に移動するごとに1足していく
bridge_len += 1;
}
// スタート位置に戻る
agent.move(BACK, bridge_len);
}
player.onChat("13-10", function () {
// 読み取り位置に移動
agent.move(FORWARD, 1);
// 読み取る
inspectBridge();
// 橋を作る開始位置に移動
agent.move(BACK, 2);
agent.move(RIGHT, 7);
agent.turn(RIGHT_TURN);
// 橋を複製する
cloneBridge();
});