解説動画

解答コード
function safeMoveForward() {
let aheadId: number = agent.inspect(AgentInspection.Block, FORWARD);
if (aheadId != AIR_ID) {
throw "正面が崩れていて進めません";
}
agent.move(FORWARD, 1);
}
function safePlaceTorch() {
agent.move(UP, 1);
let rightId: number = agent.inspect(AgentInspection.Block, RIGHT);
agent.move(DOWN, 1);
if (rightId == AIR_ID) {
throw "右側にたいまつを置けません";
}
placeTorch();
}
player.onChat("19-9", function () {
player.say("トンネルを掘り進めます");
agent.setSlot(1); // このあとはスロット1に常に1個だけたいまつを補充しながら使う(digForwardは設置を行わないため対象外)
// 前置きの移動フェーズ: スタート地点は掘りかけの区間(1歩分・右にたいまつ設置済み)の手前にあるため、まずそこへ進む
agent.move(FORWARD, 1);
let reachedGoal: boolean = false;
while (!reachedGoal) {
digForward();
try {
safeMoveForward();
} catch (e) {
player.say("例外を検出: " + e);
player.say("右へよけてから掘り進めます");
agent.turn(RIGHT);
digForward();
agent.move(FORWARD, 1);
agent.turn(LEFT);
}
let belowId: number = agent.inspect(AgentInspection.Block, DOWN);
if (belowId == COAL_ID) {
reachedGoal = true;
} else {
try {
safePlaceTorch();
} catch (e) {
player.say("例外を検出: " + e);
player.say("ここにはたいまつを置きません");
}
}
}
player.say("トンネルが掘れました");
});