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

some blog name

  • записей
    15
  • комментарий
    41
  • просмотра
    17 254

Робот с геосканером. Часть #5 [тонкий расчет]

Doob

705 просмотров

При запуске программы надо оценить возможности робота, чтобы в дальнейшем, можно было точно знать количество энергии для перехода на точку старта.
Робот должен измерить уровень энергии, сделать шаг, измерить еще раз и вычислить разницу. Эту разницу будет учитывать при измерении расстояния и принимать решение - идти домой или не идти.
Функция robot.durability() не показывает правильный износ для зачарованных инструментов.
Придется несколько раз ставить и разрушать блок, пока не обнаружится износ.
Вынесем пока это все в отдельную функцию calibration()

local function calibration() -- калибровка при запуске
  local energy = computer.energy() -- получить уровень энергии
  step(0) -- сделать шаг
  E_C = math.ceil(energy-computer.energy()) -- записать уровень потребления
  energy = robot.durability() -- получить уровень износа/разряда инструмента
  while energy == robot.durability() do -- пока не обнаружена разница
    robot.place(1) -- установить блок
    robot.swing(1) -- разрушить блок
  end
  W_R = energy-robot.durability() -- записать результат
  step(1) -- вернуться на место
end

Переменные E_C и W_R выносим в обую область видимости.

Во время работы, например, после четырех сканов, робот будет оценивать количество доступных шагов по этой формуле: math.min(robot.durability()/W_R, computer.energy()/E_C) и сравнивать с расстоянием до точки старта.

Из-за магической механики, зачарованные инструменты (Unbreaking) изнашиваются неравномерно, но роботу это нисколько не мешает.

  • Нравится 2


6 комментариев


Рекомендуемые комментарии

Цитата

Функция robot.durability() не показывает правильный износ для зачарованных инструментов.
Придется несколько раз ставить и разрушать блок, пока не обнаружится износ.

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

 

А ещё энергия тратится не только на перемещение, но и на повороты, а также на взмахи инструментом, что тоже можно учесть, если расчёт достаточно тонок.

Поделиться комментарием


Ссылка на комментарий

Со стандартным конфигом 1.7.4 робот расходует любые инструменты на 4 действия эффективней игрока.

А с зачарованными/модифицированными инструментами куча багов, вроде-бы появились после апгрейда функции robot.swing(), а может были и раньше. Но работать можно.

 

В функции step() есть взмах инструментом и перемещение, до любой точки робот может дойти, сделав всего 3 поворота. Дополнительный запас хода будем учитывать в основном цикле, когда будет ясно, какие действия нужно выполнить, кроме движения (будет еще чистка инвентаря, упаковка и сброс лута).

Поделиться комментарием


Ссылка на комментарий
2 часа назад, Doob сказал:

В функции step() есть взмах инструментом и перемещение, до любой точки робот может дойти, сделав всего 3 поворота. Дополнительный запас хода будем учитывать в основном цикле, когда будет ясно, какие действия нужно выполнить, кроме движения (будет еще чистка инвентаря, упаковка и сброс лута).

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

Поделиться комментарием


Ссылка на комментарий

Как это неизвестно? Первые три строчки как раз про это самое.

Получаем заряд батарей 

computer.energy()

Делаем шаг, который будет основной функцией во время работы. В коде шага есть взмах инструмента, за время работы функции, у робота отнимется энергия на работу всех компонентов - робот 0.25, чтение диска 0.1, слип 0.1, чанклоадер (если предварительно включили) и что там еще энергию потребляет.

 

Измеряем заряд батарей заново, отнимаем от старого новый.

energy-computer.energy()

Округляем вверх, записываем в переменную E_C

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

Поделиться комментарием


Ссылка на комментарий

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

Поделиться комментарием


Ссылка на комментарий

По-другому никак. Естественно, все условия надо будет проверять при запуске и пинать пользователя, чтобы он соблюдал инструкцию.

Поделиться комментарием


Ссылка на комментарий
Гость
Добавить комментарий...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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