OpenComputers/Туториал: Автоматическая ферма
Итак, вы установили OpenComputers. Что же теперь? Теперь пусть роботы работают за нас!
Выращивать пшеницу — скучное занятие. Однако пока вы заняты поиском алмазов для своего супер-компьютера, вам надо что-то есть.
Построим роботизированную пшеничную ферму!
Ферма будет размерами 9×9 блоков. По центру разместим источник воды, для увлажнения почвы. Таким образом, полезная площадь составит 80 блоков. Оградим ферму по периметру от нежелательных гостей, чтобы не вытаптывали пшеницу и не сбивали программу роботу.
Что потребуется?
- Робот. Он будет пахать, сеять и собирать урожай в сундук.
- Апгрейд-солнечная панель для робота. Это позволит ему работать без перерывов на подзарядку (если ферма будет на поверхности).
- Дискета. На нее мы запишем программу робота.
- Мотыга покрепче. Её мы вручим роботу.
- Сундук. В него робот будет складывать урожай.
- Ведро воды. Вода будет увлажнять землю.
- Пара лопат, для подготовки фермы.
- Материалы для ограждения (доски, заборы, стекло и т.д.) по желанию.
- Стопка семян. Не обязательно ровно 80 штук. Робот постепенно накопит нужное количество семян сам (после сбора урожая) и засеет поле полностью.
Желательно также обладать компьютером, на котором мы будем писать программу.
Строительство
Первым делом — подготовим место для фермы. Удобно расположить ее на поверхности. Тогда робот сможет самостоятельно поддерживать заряд батарей.
Выберем подходящий участок земли размерами 9×9 блоков. Можно заглубить ферму в землю (как это сделал я, на скриншоте). Постройте ограждение. На одной из сторон участка, у правого угла, постройте возвышение в один блок над уровнем поля. Здесь будет располагаться робот (поле должно находиться перед ним и продолжаться влево) и сундук для урожая.
Выкопаем по центру поля ямку 1×1 блок и выльем туда воду.
Затем мотыгой взрыхлим землю на всем участке.
Осветите участок и завершите постройку. Теперь пришло время засевать.
Измерение
Для более точной настройки программы необходимо установить, за какое время большая часть пшеницы на поле поспеет и будет готова к сбору. Для этого засеем поле в первый раз вручную. Засечем время и займемся чем-нибудь другим.
В моем случае, созревание пшеницы заняло около 50 минут реального времени. За это время в игре прошло несколько суток. Я взял интервал с небольшим запасом — час. Это 3600 секунд.
Программирование
Возьмем дискету и вставим в компьютер. Назовем ее Farm
и создадим на дискете программу farmer.lua
. (Подробно о работе с дисками и дискетами, переименовании и создании программ — см. Туториал: Работаем с дисками.)
Вы можете перепечатать следующий код вручную и сохранить, либо скопировать его и вставить (⇧ 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 в его консоли.
Запуск фермы
Засеиваем поле (если оно еще не засеяно). Размещает робота на стартовой позиции (в правом углу одной из сторон поля).
Размещаем мотыгу, дискету и солнечную панель в соответствующих слотах. Если устанавливать робота при свете солнца, вам не придется даже заряжать его. После установки солнечной панели, аккумулятор робота автоматически начнёт заполняться. Положите стек семян в активный первый слот (он отмечен бегущим зеленым контуром).
Включите робота. Смонтируйте дискету в удобное расположение, перейдите на нее и запустите нашу программу.
Робот должен будет повиснуть в воздухе, и начнет ожидание. В консоль будут периодически выводиться проценты готовности. Через час, робот совершит облет поля, соберет урожай и засеет новый.
Готово!
Итоги
Ферма полностью автоматизирована. Вам необходимо будет только менять мотыгу роботу, когда она износится (это будет происходить не очень часто).
За один сбор урожая ферма будет производить 55-60 снопов пшеницы и около 40 семян. Т.е. приблизительно 20 батонов хлеба в час.
Что дальше?
Ферму можно быстро расширить до любой площади. Для этого достаточно лишь заменить константы ширины и длины поля в коде робота, и подготовить землю.
Вы можете усложнить код робота. Добавьте настройку первого ожидания (если робот устанавливается на уже созревающее или пустое поле). Сделайте автоматическую замену сломанной мотыги. И т.д.
Можно пойти дальше в автоматизации фермы, и добавить автоматический верстак (BuildCraft) для крафта хлеба из пшеницы, а затем трубу для доставки хлеба в дом.
Материалы
Туториалы:
Интерфейсы: