Эта несложная программа для робота вооруженного киркой.
Робот копает тоннель на 12 ширины, 7 высоты и 5 глубины. Посередине тоннеля оставляет колонны 2х2 блока.
local robot = require("robot") function column(height, dir) for c=0, height-1 do if dir == true then robot.swingUp() robot.up() else robot.swingDown() robot.down() end end end function slice(height, length, pos) for x=0, length-1 do if x%2 == 0 then column(height, pos) else column(height, not pos) end if x < (length-1) then robot.swing() robot.forward() end end end function room(height, length, width) for y=0, width-1 do if y%2 == 0 then slice(height, length, (length*y)%2 == 0) if y<(width-1) then robot.turnLeft() robot.swing() robot.forward() robot.turnLeft() end else slice(height, length, (length*y)%2 == 0) if y<(width-1) then robot.turnRight() robot.swing() robot.forward() robot.turnRight() end end end end function metro() room(6, 5, 5) robot.turnAround() for c=0, 5 do robot.down() end robot.forward() robot.turnRight() robot.swing() robot.forward() room(4, 2, 3) for c=0, 3 do robot.down() end robot.swing() robot.forward() robot.turnLeft() robot.swing() robot.forward() robot.turnAround() room(6, 5, 5) for c=0, 5 do robot.down() end robot.back() robot.turnRight() for c=0, 10 do robot.forward() end robot.turnLeft() robot.forward() robot.swing() robot.forward() end metro()
Программа состоит из нескольких блоков-функций:
Функция | Описание |
---|---|
column | Копает вертикальную шахту в 1 блок, заданной высоты |
slice | Плоскость заданной высоты и глубины |
room | Создает прямоугольную комнату |
metro | Проходит один сегмент тоннеля с колоннами |
... function metro(width, height, length) ... end local W, H, L print("Enter segment width: ") W = io.read() print("Enter segment height: ") H = io.read() print("Enter segment length: ") L = io.read() metro(W, H, L)
Одиночный вызов функции metro() можно заменить на цикл с пользовательским параметром:
... local N print("Enter tonnel length (segments): ") N = io.read() for c=1, N do metro() end
Программа предполагает, что робот находится в начале запланированного тоннеля, в правом нижнем его углу. Куб, в котором находится робот считается частью тоннеля (т.е. робот копает из этого куба вверх и влево).
Программа не предусматривает экстренные ситуации: разряд аккумуляторов, завалы гравия, монстров, переполнение инвентаря и т.д.