Andronio 13 Опубликовано: 30 октября, 2017 (изменено) Опять же, не знаю, как вы, но я частенько сталкивался с проблемой недостатка базовых функций библиотек. Из-за этого приходилось писать свою функцию. Но бывало часто, что одна и та же функция(или сразу несколько) использовались в нескольких программах. Для этого я и сделал данную библиотеку. Что она может: Передвижение(+ автопробитие преграды) Навигация Графический вывод компонентов(Чучуть недоделанная) Отсылать сообщения по соед.карте Включить/выключить чанклоадер(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 Не знаю, может будет кому полезно тоже Изменено 30 октября, 2017 пользователем Andronio Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 30 октября, 2017 А нельзя ли функции перемещения 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Гость Опубликовано: 30 октября, 2017 Не плохо было бы чутка сократить "robolib." до чего-то более короткого, например "rlib." или вообще "rb.", а то слишком уж длинное "robolib." особенно с учетом того, что дальше название функции с одной буквы "u", "d" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Andronio Автор темы 13 Опубликовано: 30 октября, 2017 Не плохо было бы чутка сократить "robolib." до чего-то более короткого, например "rlib." или вообще "rb.", а то слишком уж длинное "robolib." особенно с учетом того, что дальше название функции с одной буквы "u", "d". Действительно. Просто rl мне не понравилось, поэтому написал полное название. rlib в самый раp. А что мешает использовать, например, local r = require('robolib')? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Andronio Автор темы 13 Опубликовано: 30 октября, 2017 (изменено) А нельзя ли функции перемещения 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 Изменено 30 октября, 2017 пользователем Andronio Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Гость Опубликовано: 30 октября, 2017 (изменено) А что мешает использовать, например, local r = require('robolib')? Абсолютно ничего не мешает, просто как-то в глаза бросилось много robolib.функция(), вот и решил написать об этом. Да и при сокращении до rlib всё так же ясно и понятно, а если можно что-то сократить при этом не потеряв смысла и понятности, то почему бы и не сократить?) Изменено 30 октября, 2017 пользователем Гость Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Andronio Автор темы 13 Опубликовано: 30 октября, 2017 (изменено) а если можно что-то сократить при этом не потеряв смысла и понятности, то почему бы и не сократить?) Действительно, почему бы и нет. Хотя это уже переходит в раздел логика + философия К слову, название уже изменил, но еще не протестировал Изменено 30 октября, 2017 пользователем Andronio Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Гость Опубликовано: 30 октября, 2017 А как в данном случае можно заменить рекурсию? У меня вариант пока что: через while Вариант через while not r.up() do end вполне хорош, если требуется что бы робот всё пытался и пытался выполнить движение до успешного его выполнения. Также можно swingUp добавить после do, тогда робот будет каждый раз пробовать свингнуть если не удалось выполнить условия цикла Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 30 октября, 2017 Не way, а path. Это разные слова со схожим, но разным смыслом. Да и не настолько библиотека великая, чтобы об имени спорить. Там ляпы похуже есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Andronio Автор темы 13 Опубликовано: 30 октября, 2017 Не way, а path. Да и не настолько библиотека великая, чтобы об имени спорить. Сам свое же опроверг Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 30 октября, 2017 Сам свое же опроверг Не то имя . Библиотеки, а не методов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 8 ноября, 2017 Конструкции вида: 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]) Можно добавлять сколько угодно локализаций на разных языках, а код при этом усложнится куда меньше, чем в первом варианте. 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
maxlevs 0 Опубликовано: 20 ноября, 2017 Хмм.. А как правильно сделать require твоей либы? Помещаю файл рядом со своим, как не прописываю относительный путь - не хочет подключать.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах