Minecraft Wiki перенесена на Единую платформу UCP. О замеченных ошибках, пожалуйста, сообщайте на портале сообщества или канале Discord.

OpenComputers/Шахта-тоннель

Материал из Minecraft Wiki
Перейти к: навигация, поиск

Эта несложная программа для робота вооруженного киркой.

Робот копает тоннель на 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 Проходит один сегмент тоннеля с колоннами

Последняя функция использует жестко заданные параметры: 12 ширины, 7 высоты и 5 глубины. Эти параметры можно вынести в описание функции и передавать пользовательские значения:

...
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


Эксплуатация[править | править код]

Программа предполагает, что робот находится в начале запланированного тоннеля, в правом нижнем его углу. Куб, в котором находится робот считается частью тоннеля (т.е. робот копает из этого куба вверх и влево).


Программа не предусматривает экстренные ситуации: разряд аккумуляторов, завалы гравия, монстров, переполнение инвентаря и т.д.