15-10 爆裂!エグゼキューション②

解説動画

解答コード

let arr1510 = [[[0]]];
//橋をコピー
function inspectBridge() {
    arr1510 = []; // パターン全体を格納するための空の配列を初期化
    for (let k = 0; k < 2; k++) {
        let arrLine01 = []; // 1次元配列を初期化
        for (let y = 0; y < 2; y++) {
            let arrLine02 = []; // 1次元配列を初期化
            for (let x = 0; x < 6; x++) {
                // ブロックを読み取って配列に格納していく(1次元)
                const blockType = agent.inspect(AgentInspection.Block, FORWARD);
                arrLine02.push(blockType);
                agent.move(LEFT, 1);
            }
            // 読み取ったブロックを格納した配列をさらに配列に格納していく(2次元)
            arrLine01.push(arrLine02);
            agent.move(RIGHT, 6);
            agent.move(UP, 1);
        }
        // さらにさらに格納してきた配列(2次元)をまた配列に格納していく(3次元)
        arr1510.push(arrLine01); 
        
        if (k == 0) {// スタート位置のブロックを読み取ったら
            // スタート位置と反対側のブロックに移動
            agent.move(FORWARD, 3);
            agent.move(DOWN, 2);
            agent.turn(LEFT);
            agent.turn(LEFT);
            agent.move(RIGHT, 5);


        }
        if (k == 1) { // すべてのブロックを読み取ったら
            // 複製する位置まで移動
            agent.move(DOWN, 2);
            agent.move(RIGHT, 3);
            agent.turn(LEFT);
            agent.turn(LEFT);
            agent.move(FORWARD, 2);
        }

    }
}
//橋を複製
function cloneBridge() {
    // forEach文を使って3次元配列の中身を取り出していく
    arr1510.forEach(function (element) {
        element.forEach(function (block) {
            block.forEach(function (item) {
                if (item !== AIR) {  // ブロックが空気でないかチェック
                    agent.setItem(item, 1, 1);
                    agent.place(DOWN);
                }
                // エージェントを移動
                agent.move(FORWARD, 1);
            });
                // エージェントを移動
            agent.move(BACK, 5);
            agent.move(UP, 1);
        });
                // エージェントを移動
        agent.move(BACK, 1);
        agent.move(LEFT, 1);
        agent.move(DOWN, 2);
    });
}

player.onChat("15-10", function () {
    inspectBridge();//橋をコピー
    cloneBridge(); //橋を複製
});