OpenComputers/Туториал: Автоматическая ферма

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

Итак, вы установили OpenComputers. Что же теперь? Теперь пусть роботы работают за нас!


Выращивать пшеницу — скучное занятие. Однако пока вы заняты поиском алмазов для своего супер-компьютера, вам надо что-то есть. Построим роботизированную пшеничную ферму!

Ферма будет размерами 9×9 блоков. По центру разместим источник воды, для увлажнения почвы. Таким образом, полезная площадь составит 80 блоков. Оградим ферму по периметру от нежелательных гостей, чтобы не вытаптывали пшеницу и не сбивали программу роботу.


Tutorial Wheat Farm 0 (OpenComputers).png


Что потребуется?[править | править код]

  • Робот. Он будет пахать, сеять и собирать урожай в сундук.
  • Апгрейд-солнечная панель для робота. Это позволит ему работать без перерывов на подзарядку (если ферма будет на поверхности).
  • Дискета. На нее мы запишем программу робота.
  • Мотыга покрепче. Её мы вручим роботу.
  • Сундук. В него робот будет складывать урожай.
  • Ведро воды. Вода будет увлажнять землю.
  • Пара лопат, для подготовки фермы.
  • Материалы для ограждения (доски, заборы, стекло и т.д.) по желанию.
  • Стопка семян. Не обязательно ровно 80 штук. Робот постепенно накопит нужное количество семян сам (после сбора урожая) и засеет поле полностью.


Желательно также обладать компьютером, на котором мы будем писать программу.

Строительство[править | править код]

Первым делом — подготовим место для фермы. Удобно расположить ее на поверхности. Тогда робот сможет самостоятельно поддерживать заряд батарей.

Выберем подходящий участок земли размерами 9×9 блоков. Можно заглубить ферму в землю (как это сделал я, на скриншоте). Постройте ограждение. На одной из сторон участка, у правого угла, постройте возвышение в один блок над уровнем поля. Здесь будет располагаться робот (поле должно находиться перед ним и продолжаться влево) и сундук для урожая.

Выкопаем по центру поля ямку 1×1 блок и выльем туда воду.

Затем мотыгой взрыхлим землю на всем участке.


Tutorial Wheat Farm 1 (OpenComputers).png


Осветите участок и завершите постройку. Теперь пришло время засевать.


Измерение[править | править код]

Для более точной настройки программы необходимо установить, за какое время большая часть пшеницы на поле поспеет и будет готова к сбору. Для этого засеем поле в первый раз вручную. Засечем время и займемся чем-нибудь другим.

В моем случае, созревание пшеницы заняло около 50 минут реального времени. За это время в игре прошло несколько суток. Я взял интервал с небольшим запасом — час. Это 3600 секунд.


Программирование[править | править код]

Возьмем дискету и вставим в компьютер. Назовем ее Farm и создадим на дискете программу farmer.lua. (Подробно о работе с дисками и дискетами, переименовании и создании программ — см. Туториал: Работаем с дисками.)


Tutorial Wheat Farm 2 (OpenComputers).png


Вы можете перепечатать следующий код вручную и сохранить, либо скопировать его и вставить (⇧ Shift+Insert в игровом редакторе).

И наконец, вы можете открыть (свернув игру на время, и поместив дискету в инвентарь) папку \.minecraft\saves\<Название вашего сохранения>\opencomputers\<Адрес дискеты>\. Там находится только что созданный файл farmer.lua. Вы можете открыть его любым редактором и вставить текст программы.


Код:

local robot = require("robot")
local comp = require("computer")

local size = 9

function harvest()
  -- fly to start
  robot.forward()
  for y=1, size do
    -- harvest one line
    robot.swingDown()
    robot.placeDown()
    for x=1, (size-1) do
      robot.forward()
      robot.swingDown()
      robot.placeDown()
    end
	-- turn
    if y%2 == 1 then
	  robot.turnLeft()
	  robot.forward()
	  robot.turnLeft()
	else
	  robot.turnRight()
	  robot.forward()
	  robot.turnRight()
	end
  end
  -- return
  for y=1, (size-1) do
    robot.forward()
  end
  robot.turnLeft()
  for y=1, (size-1) do
    robot.forward()
  end
  robot.turnRight()
  robot.forward()
  robot.turnAround()
end

function unload()
  robot.turnAround()
  for c = 2, 16 do
    robot.select(c)
    if robot.count() > 0 then
      robot.drop()
    else
      robot.select(1)
      break
    end
  end
  robot.turnAround()
end

while true do
  -- one hour sleeping
  for i=1, 10 do
    os.sleep(360)
    print((10*i)..'%')
  end
  -- 
  harvest()
  if robot.count(2) == 64 then
    unload()
  end
end

Разбор кода[править | править код]

Программа состоит из двух функций и главного цикла.


Функция harvest() обеспечивает сбор урожая и высадку семян. Она выводит робота на поле, а затем двигает его "челночными" движениями, ряд за рядом. Над каждым блоком робот делает взмах мотыгой, собирая урожай, и высаживает взамен одно семечко из активного первого слота.


Функция unload() выгружает содержимое инвентаря робота в сундук, который должен находиться позади начальной позиции робота. Первый слот функция пропускает — там робот хранит запас семян для посадки. При сборе урожая этот слот автоматически заполняется семенами снова.


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

При достижении 100%, вторая часть главного цикла вызывает функцию harvest(). Затем проверяет, не полон ли второй слот и выгружает инвентарь в сундук, если необходимо.


Программа работает в бесконечном цикле. Её можно прервать, если выключить робота, или нажать Ctrl+Alt+C в его консоли.


Запуск фермы[править | править код]

Засеиваем поле (если оно еще не засеяно). Размещает робота на стартовой позиции (в правом углу одной из сторон поля).


Tutorial Wheat Farm 3 (OpenComputers).png


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


Включите робота. Смонтируйте дискету в удобное расположение, перейдите на нее и запустите нашу программу.

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


Tutorial Wheat Farm 4 (OpenComputers).png


Готово!


Итоги[править | править код]

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

За один сбор урожая ферма будет производить 55-60 снопов пшеницы и около 40 семян. Т.е. приблизительно 20 батонов хлеба в час.

Что дальше?[править | править код]

Ферму можно быстро расширить до любой площади. Для этого достаточно лишь заменить константы ширины и длины поля в коде робота, и подготовить землю.


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

Можно пойти дальше в автоматизации фермы, и добавить автоматический верстак (BuildCraft) для крафта хлеба из пшеницы, а затем трубу для доставки хлеба в дом.


Материалы[править | править код]

Туториалы:


Интерфейсы: