13-8 海を望んで③

解説動画

解答コード

// 複製した後にエージェントが動く数を変数にしてます
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;
    }
});