OpenComputers/Бесконечная комната

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

Функции[править | править код]

Программа для робота, разрабатывалась для того, чтобы можно было заниматься своими делами, пока робот добывает руду, при как можно меньшем участии игрока. Робот копает бесконечную комнату высотой в три блока, центром которой является начальное расположение робота. Во время копания робот полностью автономен (при соблюдении следующих условий).


Требования[править | править код]

Робот должен иметь:

Вам необходимо положить роботу:

  • В последний, 16 слот, топливо (любое, которое горит);
  • В предпоследний, 15 слот, несколько сундуков (чем больше, тем лучше).

Желательно иметь кирку попрочнее (алмазную, зачарованную на прочность).


Что учтено[править | править код]

В программе учитывается переполнение инвентаря: как только в последнем свободном слоте появляется хоть один предмет, робот под собой ставит сундук и складывает в него все вещи (исключая запас сундуков и топлива). Вам остаётся только изредка приходить и забирать содержимое сундуков.

В программе учтён гравий: робот будет ломать блок перед собой, пока не станет свободно.


Что не учтено[править | править код]

Не учитывается появление монстров. Внимание! Не заставляете робота копать в лаве, ибо это чревато потерей всех добытых ресурсов (робот не сможет поставить сундук в лаве, и выкинет все вещи в неё). Также, не происходит автоматическое складывание угля в генератор. Не учитывается земля (да, он будет рыть её киркой).


Текст программы[править | править код]

--var

local r = require("robot")

local component = require("component")
local g = component.generator

local leng = 3

local i = 0
local j = 0

function eat()
  local selectedSlot = r.select()
--begin
  print("Eating fuel...")
  r.select(16)
  g.insert(8)
  r.select(selectedSlot)
end

function fillChest()
  local selectedSlot = r.select()
  local k = 0
--begin
  r.select(15)
  r.placeDown()
  print("Clearing slots...")
  for k = 1, 14 do
    r.select(k)
    r.dropDown()
  end
  r.select(selectedSlot)
end

function checkInv()
--begin
  if r.count(14) > 0 then
    print("Slot 14 is partially filled!")
    fillChest()
  end
end

function forward()
  checkInv()
  repeat
    r.swing()
  until not r.detect()
  r.forward()
  r.swingUp()
  r.swingDown()
end

--begin

forward()
r.turnRight()
forward()
r.turnRight()

while true do
  print("Current tunnel length: "..leng)
  
  if g.count() < 1 then
    eat()
  end
  
  for j = 1, 2 do
    for i = 1, tonumber(leng) - 1 do
      forward()
    end
    r.turnRight()
  end
  
  leng = leng + 1
end