13-10 希望をつなぐ橋

解説動画

解答コード

// 橋のブロックを保存する変数で中身は配列
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();
});