Перейти к содержимому

Andronio

Пользователи
  • Публикации

    20
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем Andronio


  1. а если можно что-то сократить при этом не потеряв смысла и понятности, то почему бы и не сократить?)

    Действительно, почему бы и нет. Хотя это уже переходит в раздел логика + философия :D

     

    К слову, название уже изменил, но еще не протестировал


  2.  

    А нельзя ли функции перемещения u(), d(), fw(), bw() сделать с параметром на сколько блоков переместиться?

     И еще, рекурсия в данном случае не самое лучшее решение.

    function robolib.u()
      while r.detectUp() do
        r.swingUp()
      end
      if r.up() then
        if waySw then
          way = way.."U"
        end
      else
        robolib.u()
      end
      z = z + 1
    end
    

    Можно сделать. Хотелось бы, по крайней мере. Но что-то мне подсказывает, что юзать рекурсию в этом случае будет прям вообще не ок. А как в данном случае можно заменить рекурсию?

    У меня вариант пока что: через while


  3. Не плохо было бы чутка сократить "robolib." до чего-то более короткого, например "rlib." или вообще "rb.", а то слишком уж длинное "robolib." особенно с учетом того, что дальше название функции с одной буквы "u", "d".

    Действительно. Просто rl мне не понравилось, поэтому написал полное название. rlib в самый раp.

    А что мешает использовать, например, local r = require('robolib')?


  4. Опять же, не знаю, как вы, но я частенько сталкивался с проблемой недостатка базовых функций библиотек. Из-за этого приходилось писать свою функцию. Но бывало часто, что одна и та же функция(или сразу несколько) использовались в нескольких программах. Для этого я и сделал данную библиотеку.

     

    Что она может:

     Передвижение(+ автопробитие преграды)

     Навигация

     Графический вывод компонентов(Чучуть недоделанная)

     Отсылать сообщения по соед.карте

     Включить/выключить чанклоадер(rlib.CL(true/false))

     

    Передвижение:

     rlib.u() - Вверх

     rlib.d() - Вниз

     rlib.fw() - Вперед

     rlib.bw() - Назад

     rlib.r() - Направо

     rlib.l() - Влево

     rlib.a() - Оборот

     

    Навигация:

     rlib.savePath(bool) - true/false включает/выключает запись маршрута(Передвижение)

     rlib.goBackByPath() - Возвращение робота по записанному пути

     rlib.goBackFast() - Возвращение робота по относительным координатам(x,y,z)

     rlib.getCoords() - Выводит x,y,z и сторону, в которую смотрит робот(1,2,3,4)

     rlib.resCoords() - Сбрасывает x,y,z(0,0,0) и сторону, в которую смотрит робот(принимает за 1)

     rlib.getPath() - Выводит путь, проделанный роботом(если включена запись). Пример: 'UUDLFBAFFD'

     rlib.resPath() - Сбрасывает путь

     

    Проверка компонентов:

     rlib.cc(имя_компонента_в_кавычках) - просто возвращает true/false в зависимости от наличия

     

    Графический вывод компонентов:

     rlib.CCWD(имя_компонента_в_кавычках,язык_в_кавычках(Ru/En)) - возвращает строку, состоящую из Тип_Компонента -> Имя_Компонента -> Статус_Компонента. Пример: robolib.CCWD('generator','En') мне может вернуть: "Upgrade -> Generator: Installed"

     

    Отсылка сообщений по соед. карте

     rlib.report('msg') - печатает сообщение в консоль и отправляет по карте, если таковая имеется 

     

    Сам код: https://pastebin.com/4d06TLbu

     

    Не знаю, может будет кому полезно тоже


  5. Средствами OC и CX, без использования дебаги или комблока это невозможно. Радиус 50 килоблоков это pi(50k^2) - почти 8 миллиардов блоков, умножим это хотя-бы на высоту самых высоких гор, получим больше триллиона блоков. Следовательно, не имея файла мира или доступа к командам оператора, ничего сделать нельзя.

    Возможно, я неправильно понял, но нельзя сказать, что это невозможно. Это возможно, но займет кууууучу времени и энергии, с учетом скорости перемещения робота и возможными препятствиями.

     

    Возможно, мой вопрос покажется кому-то глупым, но можно ли в дрона впихнуть вайфайку и радар? Они встки пошустрее роботов

     

    Отправлено с моего X5pro через Tapatalk


  6. Заменил способы движения с обнаружением. В свободном пространстве это незаметно, но если робот встречает препятствие, он его начинает устранять сразу, а не пытается сначала двигаться и потом устранять. По-факту, тратит в два/три раза меньше времени при встрече с проблемой, чем до замены


  7. Не знаю, как вы, а я периодически сталкивался с проблемой нехватки угля/дерева. Поэтому сделал вот такую небольшую программку для робота

    Требуемые улучшения:
    - Притягивающий луч
    - Контроллер инвентаря
    - Геолизёр
    - Большой топор из тинкера
    Остальное по желанию

    Чтобы скачать программу, пишем

    pastebin get FQeCHETF woodman

    https://pastebin.com/FQeCHETF

    Чтобы получить помощь, пишем woodman help
    http://imgur.com/a/EbydN

    Перед запуском программы уясним сразу: первые 4 слота - обязательно саженцы, слева от робота(если смотреть в лицо) - сундук, также не помешает зарядник, ибо если уровень зарядки опустится меньше 25%, он будет ждать зарядник. Когда зарядник подключен, а уровень заряда меньше 25% - заряжается до 50% и продолжает работу

    Также, если во время работы кончаются саженцы, он замораживается и ждет, пока их положат, периодически издавая писк. На старте может подвисать, но ненадолго

    Чтобы запустить робота, пишем

    woodman start X Y delay layers layer_h IsCoal

    где X и Y - размер фермы по X и Y(вид сверху), delay - задержка в секундах, layers - количество слоев, layer_h - высота одного слоя(только если слоев больше, чем 1! Если слой только 1, этот пункт не писать), IsCoal(true/false) - угольная ли ферма(просто изменяет количество tb.suck() после рубки дерева, для экономии времени). Например:

    woodman start 10 8 3600 3 10 false
    woodman start 10 8 1800 1 true

    Также планируется добавить сохранение данных в файл и запуск программы с использованием сохраненных данных, а не вводить каждый раз

    Еще скрин: http://imgur.com/a/xvcKi

    В случае, если робот разрядится меньше 25%, то система просто не даст ему поехать, а будет ждать зарядник, либо, если он подключен, ждет, пока робот не зарядится до 50%
    Если робот встретится с мобом, он не собьется, а будет бить, пока не сможет пройти дальше

    Требуемое расстояние между деревьями - 1

    Не рекомендую использовать мультислойность, если размер сетки - 1*1. Он просто завершит работу ._.

    P.S. Также, если надо, могу записать кратенький видеогайдик
    А зачем я вообще спрашиваю? Все равно когда-нибудь я запишу

    • Нравится 6

  8. но что? тебе нужен os.sleep(100500)? Так смело его юзай)

    или это должна быть задержка, но код должен юзать что либо другое? Тогда юзай таймер.

    Если таймер то:

    local event = require("event")
    
    function func()
     print("hello word")
    end
    
    local t = event.timer(10,func,2) --где 10 - время для таймера, func - что выполнить по исходу времени таймера, 2 - кол-во раз выполнения таймера
    
    

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

    А можно по-подробнее про таймер? Вернее про то, как делать параллельные программы. До таймера или после писать?


  9.  

    • Как только — так (почти) сразу.
    • OC, Computronics, OpenPeripheral будут. ComputerCraft нет испокон веков.
    Про СС не знал. Думал есть, раз есть аддон для него :). А что насчет IC2? Стоит ли мне тратить время на написание контроля IC2шных мехов или его уберут после вайпа?

     

    Отправлено с моего X5pro через Tapatalk


  10. Я же в чате объяснил, как это сделать.

    При крафте надо добавить в робота одну связанную карту, а другую в комп или планшет, сообщение ловить примерно таким образом:

    print(table.pack(event.pull('modem_message'))[6], os.date()) computer.beep(1000, 3)

    Про computer.beep(). Что значат 1000 и 3?

     

    Отправлено с моего X5pro через Tapatalk

×
×
  • Создать...