Перейти к публикации
Форум - ComputerCraft
Andronio

Библиотека для расширенного управления роботом

Рекомендованные сообщения

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

 

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

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

 Навигация

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

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

 Включить/выключить чанклоадер(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

 

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

Изменено пользователем Andronio
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А нельзя ли функции перемещения 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

А нельзя ли функции перемещения 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

Изменено пользователем Andronio

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Абсолютно ничего не мешает, просто как-то в глаза бросилось много robolib.функция(), вот и решил написать об этом. Да и при сокращении до rlib всё так же ясно и понятно, а если можно что-то сократить при этом не потеряв смысла и понятности, то почему бы и не сократить?)

Изменено пользователем Litvinov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

Изменено пользователем Andronio

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как в данном случае можно заменить рекурсию?

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

Вариант через 

while not r.up() do end

вполне хорош, если требуется что бы робот всё пытался и пытался выполнить движение до успешного его выполнения. Также можно swingUp добавить после do, тогда робот будет каждый раз пробовать свингнуть если не удалось выполнить условия цикла

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не way, а path. Это разные слова со схожим, но разным смыслом. Да и не настолько библиотека великая, чтобы об имени спорить. Там ляпы похуже есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не way, а path. Да и не настолько библиотека великая, чтобы об имени спорить.

Сам свое же опроверг :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Конструкции вида:

    if loc == 'En' then
      status = 'Installed'
    elseif loc == 'Ru' then
      status = 'Присутствует'
    end

так и просятся на оптимизацию.

Например как-нибудь так:

local loc = {
  installed = { en = "Installed", ru = "Установлено" }
}
local language = "en"

print(loc.installed[language])

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

  • Like 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хмм.. А как правильно сделать require твоей либы? Помещаю файл рядом со своим, как не прописываю относительный путь - не хочет подключать....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×