13-7 海を望んで②

解説動画

解答コード

// 壁を複製する
let arr13_7 = [[0]];
function cloneWall() {
    // 外側の配列をループする
    arr13_7.forEach(function (element) {
        // 配列の中の配列をループする
        element.forEach(function (block) {
            // 格納されたブロックを設置
            agent.setItem(block, 1, 1);
            agent.place(FORWARD);
            agent.move(UP, 1);
        });
        // 格納されたelement要素の数だけ移動する arr = [[赤,緑,黄]],[[赤,赤,黄]],[[黄,緑,緑]],[[赤,黄,緑]]
        agent.move(DOWN, element.length);
        agent.move(RIGHT, 1);
    });
}

// 壁を読み取る
function inspectWall() {
    arr13_7 = [];
    // 横方向に4ブロックあるので4回繰り返す
    for(let i = 0; i < 4; i++) {
        let arrline = [];
        // 縦方向に3ブロックあるので3回繰り返す
        for(let j = 0; j < 3; j++) {
            // 目の前のブロックを読み取る
            let block_type = agent.inspect(AgentInspection.Block, FORWARD);
            // 配列の中の配列に格納する
            arrline.push(block_type);
            agent.move(UP, 1);
        }
        // 配列の中の配列に格納し終わったものを外側の配列に格納する
        arr13_7.push(arrline);
        // 次に読み取る場所に移動
        agent.move(DOWN, 3);
        agent.move(RIGHT, 1);
    }
}

player.onChat("13-7", function () {
    // 読み取る
    inspectWall();

    // 複製位置に移動
    agent.turn(LEFT_TURN);
    agent.turn(LEFT_TURN);
    agent.move(RIGHT, 7);
    agent.move(FORWARD, 7);

    // 壁を複製
    cloneWall();
});