[GTech] Программа для робота - Ферма деревьев

Тема в разделе "Руководства", создана пользователем tim_twiser, 4 янв 2015.

  1. tim_twiser

    tim_twiser
    Архитектор
    416
    226
    293
    Необходимо:
    1. сам робот с минимальной конфигурацией
    2. топор попрочнее
    3. саженцы высокой ели (Fir Sapling)
    4. зарядная станция для робота (запитанная есесно от источника питания)
    5. сундук

    Желательно также:
    - пару стаков забора чтобы огородить ферму (мобы могут помешать логике робота)

    Скриншот 1 - https://www.dropbox.com/s/8ru9vxcxhyu6pkd/2015-01-04_19.32.27.png?dl=0
    Скриншот 2 - https://www.dropbox.com/s/oykuwxce5getlb0/2015-01-04_20.38.54.png?dl=0

    Сама ферма представляет собой выстроенные в ряд деревья с интервалом в 6 клеток (то есть каждое следующее на 7й клетке от предыдущего). Робот ставится сбоку (см.скрин 1) от первого дерева на высоте 2 (чтобы не видеть саженца, а видеть только выросшее дерево). Над "головой" робота ставится сундук для готовых бревен. Позади робота ставится зарядник.
    Длинна фермы не ограничена программой - робот поймет, что ферма кончилась, когда упрется во что нибудь, а под ним окажется тоже что нибудь. Для этого в конце фермы сделайте ступеньку из чего нибудь высотой в 2 блока (см.скрин 2).Важно чтобы каждое следующее дерево стояло ровно на 7й клетке от предыдущего (хотя этот параметр можно и изменить в программе. В 16й слот робота необходимо положить саженцы - без этого робот не начнет выполнять программу. Этим же можно воспользоваться, чтобы остановить работу робота без его выключения - просто выньте все саженцы из 16го слота и робот после выгрузки в сундук добытого завершит программу. Как закинуть программу на дискету и в робота я описывать не буду, читайте соответствующие гайды.

    Какие параметры можно изменить:
    - строка 41, цифры "1, 12" - робот выгружает в сундук из слотов 1-12
    - строка 51, цифры "1, 7" - робот проходит 7 клеток до следующего дерева

    Сама программа:
    -- Date: 04.01.2015 by TiM_Twiser
    local robot=require("robot")
    -- Rubka dereva
    function tree()
    if robot.detect() then
    print ("Cut down Tree...")
    robot.swing()
    robot.forward()
    robot.swingDown()
    while robot.detectUp() do
    if not robot.up() then
    robot.swingUp()
    robot.up()
    end
    end
    while not robot.detectDown() do
    robot.down()
    end
    robot.turnAround()
    robot.forward()
    robot.turnAround()
    robot.select(16)
    robot.place()
    robot.up()
    end
    end
    -- Vozvrat na nachalo
    function retreat()
    print ("Retreat to First tree...")
    robot.turnRight()
    while not robot.detectUp() do
    if robot.detect() then robot.swing()
    end
    robot.forward()
    end
    robot.turnLeft()
    end
    -- Vigruzka
    function drop()
    print ("Unloading...")
    for s = 1,12 do
    robot.select(s)
    robot.dropUp()
    end
    robot.select(1)
    end
    -- Perehod k sledujushemu derevu
    function nexttree()
    print ("Going to next Tree...")
    robot.turnLeft()
    for i = 1, 7 do
    if robot.detect() then robot.swing()
    end
    robot.forward()
    end
    robot.turnRight()
    end
    -- MAIN PROGRAM
    while robot.count(16) > 0 do
    while not robot.detectDown() do
    if robot.detect() then tree() else os.sleep(10)
    tree()
    end
    nexttree()
    end
    retreat()
    drop()
    end
    ЗЫ: Старался сделать программу более краткой и понятной, поэтому не включил в нее некоторые дополнительные функции, типа замены инструмента при износе и тд.
     
  2. tim_twiser

    tim_twiser
    Архитектор
    416
    226
    293
    Вижу особых вопросов ни у кого по программе нет. Это значит, что либо никого это вообще не интересует, либо все понятно и без разъяснений.
    Значит просо выкладываю обновленную версию выше представленной программы без разьяснений. если что непонятно - спрашивайте.

    Сама программа:
    -- Date: 08.01.2015 by TiM_Twiser
    local robot=require("robot")
    local comp=require("computer")
    -- Rubka dereva
    function tree()
    if robot.detect() then
    robot.select(1)
    robot.swing()
    robot.forward()
    robot.swingDown()
    while robot.swingUp() do robot.up()
    end
    robot.select(15)
    while not robot.compareDown() do
    robot.swingDown()
    robot.down()
    end
    robot.back()
    robot.select(16)
    robot.place()
    robot.select(1)
    robot.up()
    end
    end
    -- Proverca zapolnenia inventora
    function check()
    robot.select(12)
    return robot.count() > 0
    end
    -- Vozvrat na nachalo
    function retreat()
    robot.turnRight()
    while robot.swing() or not robot.detect() do robot.forward()
    robot.select(16)
    robot.suckDown()
    end
    robot.turnLeft()
    drop()
    while comp.energy() < 5000 do
    print ("Battery Low. Wait..")
    os.sleep (30)
    end
    end
    -- Vigruzka
    function drop()
    for s = 1,12 do
    robot.select(s)
    robot.dropUp()
    end
    robot.select(1)
    end
    -- Perehod k sledujushemu derevu
    function nexttree()
    robot.turnLeft()
    if robot.detect() then robot.swing()
    end
    robot.forward()
    robot.turnRight()
    end
    -- MAIN PROGRAM
    while robot.count(16) > 0 or robot.durability() < 30 do
    if robot.detectDown() then retreat() else tree()
    end
    if check() then retreat() else nexttree()
    end
    end
     
  3. Osmium

    Osmium
    Подрядчик
    6
    0
    216
    вот мне совсем ничего не понятно по программе. в том смысле, откуда взялась? и где можно найти какие-нибудь другие подобные программы?
     
  4. Quasi_Gradient

    Quasi_Gradient
    Подрядчик
    18
    18
    168