Как сделать в майнкрафте дрон
Дрон не имеет своей видеокарты (и монитора). Вместо неё он использует небольшой (на две строки) экранчик в своём интерфейсе.
У дрона отсутствует файловая система. Программа дрона записывается на чип EEPROM (наподобие микроконтроллера). Для этого вы можете воспользоваться командами компонента eeprom или программой flash , которая входит в состав OpenOS.
Для того чтобы заменить старый чип, положите дрон и новый чип в верстак. Чипы поменяются местами.
Дрон не умеет пользоваться инструментами. Однако он умеет ломать и ставить те блоки, которые может сломать игрок рукой.
Дрон имеет небольшой внутренний инвентарь, и способен управлять апгрейдами - контроллерами инвентаря и внутренних цистерн.
19 комментариев
Запускаем дронов!
Еще года два назад это было просто еще одно интересное видео на Ютубе. Год назад они вдруг оказались в интернет магазинах. Затем просочились в рекламу на ТВ, и вот теперь - они есть и в OpenComputers!
Пришла пора с ними разобраться.
1. Матчасть
Дрон, в данном случае - квадрокоптер, это беспилотный летающий аппарат, приводимый в движение двумя парами горизонтальных винтов. Приостановливая вращение винтов с одного боку, дрон двигается в сторону (стрейф).
Эти винты вращаются в разном направлении (два - по часовой срелке и два - против), за счет чего дрон не нуждается в стабилизирующем хвостовом пропеллере (как вертолет). За счет этого же он и разворачивается в воздухе, замедлив вращение однонаправленной пары винтов.
Дрон обладает небольшой массой, для экономии энергии, которой у него не много (на 10-30 минут полета в среднем).
2. Дроны и OpenComputers
Приблизительное изображение дрона в OpenComputers =):
В мире Майнкрафта дрон представляет из себя "сущность" (Entity). Это значит, что он обладает возможностями мобов Майнкрафта. (В то время как робот - это блок.)
Его можно сдвинуть с места толкая. Он умеет пролетать сквозь двери и калитки (в отличии от робота). Он движется не последовательно, из блока в блок, а из точки в точку. Причем маршрут может лежать по диагонали.
Конечно, движется он по кратчайшей линии, и если на пути окажется стена - дрон столкнется с нею.
Программирование дрона как две капли воды похоже на программирование микроконтроллера. Вы точно так же записываете программу на EEPROM, и при необходимости меняете ее на верстаке.
Только в отличии от контроллера, вам становится доступен новый компонент: drone .
Подробнее об командах дрона можно узнать здесь: OpenComputers/Дрон. (Или здесь: ocdoc.wiki (англ.))
3. План
Нужна какая-нибудь несложная задача, для целей эксперимента. Используем программку send из предыдущего поста, для удаленного управления. Зальем ее на планшет.
А дрон пусть. носит свиней. Будем оригинальными и непоследовательными.
1. Команда ' add X Y Z Name From '. Добавляем точку Name к маршруту, цепляя ее к точке From.
Зададим дрону последовательность точек, которые образуют граф - безопасные маршруты.
2. Команда ' catch ' - дрон ловит свинью.
3. Команда ' drop ' - дрон выпускает свинью.
4. Команда ' to X ' - дрон летит в точку Х.
Для начала не будем особо заморачиваться с графом маршрутов. Это будет простое неориентированное дерево.
4. Строим полигон
Построим что-нибудь подходящее для тестов. Отметим ключевые точки будущего графа красными блоками.
А синий блок - будет стартовой площадкой дрона.
Поскольку я играю без модов на энергию, мой планшет и дрон будут работать вечно. И я не заморачиваюсь станцией подзарядки.
Иначе, к схеме выше было бы необходимо добавить станцию, где дрон мог бы зарядить аккумулятор.
5. Пишем программу
Скрипт для удаленного управления скопипастим из прошлого поста, подправим, чтобы умела отправлять несколько переменных и зальем на планшетик, для удобства.
(Для этого, соберите планшет - не забудьте клавиатуру и видеокарту! - положите его в зарядник и запустите с подключенного компа команду install . Укажите адрес винчестера планшета - и все, что было у вас на компе автоматически загрузится в планшет, включая даже ваши собственные программы.)
Далее - более сложная часть. Программа дрона. Программа предназначена для EEPROM. Значит соблюдаем те же правила: используем computer, component и API имеющихся у дрона компонентов. Включая его родной компонент drone .
В нашем случае, дрон вооружен апргейдом-лассо ( leash ) и беспроводной сетевой картой ( modem ) для связи.
Отредактировать чип в стороннем редакторе, не вынимая его из дрона тоже не выйдет. В отличии от файловых систем, которые имеют удобную папку вида /saves/World/opencomputers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/ , чипы EEPROM хранят свой код в NBT тегах предмета. Этим же обусловлено и ограничение размера кода в 4 килобайта.
5.1. Основная часть
Это цикл который ждет указаний, а затем запускает соответствующую функцию.
Просто скопируйте в папку на компьютере, где вы пишете программу для дрона.
Затем измените первые строки программы следующим образом:
Затем добавьте в цикл условие выхода по нажатию кнопки:
И вы можете просто запустить вашу программу для дрона на компьютере.
Разумеется полноценной эмуляцией дрона тут и не пахнет, зато очень удобно отслеживать глупые синтаксические и логические ошибки.
Как устроен код основного цикла?
Переменная route - хранит таблицу "вейпоинтов" (waypoints). Это вершины графа и информация о связях между ними.
Переменная path - хранит путь от текущей вершины до цели.
Переменная current - отмечает текущее местоположение дрона в графе.
Во второй части цикла происходит проверка. Если путь до цели - не пуст (это значит, что дрону надо куда-то лететь) и дрон уже долетел до текущей вершины ( getOffset() ), то программа берет следующую вершину из path , отправляет дрона к ней и объявляет ее текущей.
5.2. Функции-команды
Теперь последовательно добавим функции для каждой команды.
Тут все просто. Пишем вершину в список. Если он связана с другой вершиной ( from
= nil ), то в специальную табличку link заносим две связи: из name в from , и из from в name .
Функция to обнуляет старый путь (на всякий случай), затем вставляет в него цель пути ( name ) и запускает функцию search , которая рекурсивно ищет и записывает остальные промежуточные вершины на маршруте от name до current (текущей локации).
Функция search сделана достаточно примитивно (возможно вы предложите более эффективный способ?). Поскольку мы договорились, в целях упрощения использовать граф-дерево (не содержаший петель), от любой точки к другой существует один и только один маршрут, который функция и находит перебором связанных вершин.
Тут все элементарно.
6. Подготовка
Пишем программу на дрона, заряжаем планшет и выдвигаемся в зону действий. Дрона ставим на синий куб (стартовая площадка) и включаем.
После уточнения на местности, составляем карту вейпоинтов и строим на бумажке будущий граф:
Для каждого загона добавлены две точки - name и name_up. Основные "трассы" дрона лежат на высоте в 6 блоков. А в каждом загоне спускаются к земле. (Чтобы заарканить животное, выстреливая лассо вбок, дрону желательно находиться на одном уровне с жертвой).
С планшета вносим координаты в память дрона. Примерно так:
Главное - не ошибиться. Т.к. в код не была добавлена защита "от дурака" =)
Алгоритм позволяет добавлять вершину "на лету". В любой момент вы можете добавить еще одну ветку к схеме.
Теперь все готово к тесту.
7. Запуск
Проверим, как он двигается.
Введем send to sheeps в консоль планшета. Дрон уверенно поднимается в воздух и опускается в загоне в овцами.
Теперь введем send to pigs . Функция search снова вычислит путь и робот переместится в указанную вершину:
Функции catch и drop тоже работают штатно =)
Хотя и не лишены некоторых глюков (ведь физика веревки не просчитывается):
8. Итоги
а) Дрон - любопытная штуковина.
в) Навигация по вейпоинтам - интересный и очень распространенный способ организации сложного движения. Схему можно усложнить - опционально добавлять только одну связь в таблицу link - тогда получатся ребра с односторонним движением. Добавить петли, оптимизировать поиск кратчайшего пути.
Еще можно облегчить правление дроном - хранить все команды для конкретной задачи в виде файла-скрипта, который запускать одной командой и т.д.
Создание дрона [ ]
Интерфейс сборщика при изготовлении дрона.
Для настройки и создания нового дрона используется сборщик. Он позволяет подобрать комплектующие в соответствии с будущей задачей дрона.
Поместите в левый слот сборщика корпус дрона. При создании вы можете использовать любые компьютерные комплектующие и апгрейды, не превосходящие уровень использующегося корпуса.
Вы можете установить на дрона уже записанный чип EEPROM. Или заменить его потом, использовав в процессе сборки пустой чип.
Название компонента: drone
Возвращает текст, отображаемый в дисплее дрона.
Изменяет текст в дисплее дрона.
Для того чтобы отобразить текст в две строчки, используйте в тексте управляющий символ переноса строки: \n .
Изменяет цвет дрона на заданный.
Назначает дрону конечную точку, в которую он должен переместиться.
Возвращает текущее расстояние до конечной точки.
Возвращает текущую скорость, в м/с.
Возвращает максимальную скорость, в м/с.
Возвращает ускорение дрона.
Изменяет ускорение на заданное, и возвращает результат.
Помимо этого, дроны поддерживают большинство функций робота по взаимодействию с окружающим миром. Например, такие как detect , suck , drop , drain , fill .
Содержание
Как построить боевой вертолёт с одним винтом
Как и для квадрокоптера, для Апача не нужны моды, мы собираем его из обычных блоков подходящих материалов.
Большой квадрокоптер в Майнкрафте
Моды не нужны, этот квадрокоптер можно построить из обычных блоков в обычном Майнкрафте.
Смотри еще по темам
Очень быстрая и красивая схема для того, чтобы построить в игре Майнкрафт маленький, изящный вертолёт. В кабину можно посадить жителя или сесть самому. Читать дальше ->
Рекомендуемые комментарии
Полезные ресурсы
Голосование
Информация
О нас
У нас играют и пишут программы как новички так и опытные программисты. А самые продвинутые участники нашего коллектива даже разрабатывают собственные авторские моды и аддоны, ресурспаки, репозитории, мощнейшие библиотеки и операционные системы.
Читайте также: