解説動画
解答コード
// 複製した後にエージェントが動く数を変数にしてます
let move_left = 5;
let arr13_8 = [[0]];
function cloneWall13_8() {
// 外側の配列をループする
arr13_8.forEach(function (element) {
// 配列の中の配列をループする
element.forEach(function (block) {
// 格納されたブロックを設置
agent.setItem(block, 1, 1);
agent.place(FORWARD);
agent.move(UP, 1);
});
// 格納されたelement要素の数だけ移動する
agent.move(DOWN, element.length);
agent.move(LEFT, 1);
});
}
function inspectWall13_8() {
arr13_8 = [];
// 横方向に4ブロックあるので4回繰り返す
for(let i = 0; i < 4; i++) {
let arrline13_8 = [];
// 縦方向に4ブロックあるので4回繰り返す
for(let j = 0; j < 4; j++) {
// 目の前のブロックを読み取る
let block_type = agent.inspect(AgentInspection.Block, FORWARD);
// 配列の中の配列に格納する
arrline13_8.push(block_type);
agent.move(UP, 1);
}
arr13_8.push(arrline13_8);
agent.move(DOWN, 4);
agent.move(LEFT, 1);
}
}
player.onChat("13-8", function () {
// 読み取る
inspectWall13_8();
// 複製位置に移動
agent.turn(LEFT_TURN);
agent.move(LEFT, 1);
// 複製をfor文を使って3回繰り返す
for(let j = 0; j < 3; j++){
cloneWall13_8();
agent.move(LEFT, move_left); // この時には変数"move_left"の値には"5"が入っている
// move_leftの値から"2"を引いて"3"にすることで2つ目を複製したあとは3ブロック移動する
move_left -= 2;
}
});