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






Фотография
* * * * * 1 голосов

Геосканнер в планшете

Написано KelLiN , 10 Май 2015 · 2 682 просмотров

Ресурсов всегда не хватает. Что делать ?! Копать! Где копать ?! Вот сейчас то после прочтения данной записи мы и узнаем.

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

Использоваться будет команда сканера scan. Вот выдержка из вики:
scan(x: number, y: number, [ignoreReplaceable: boolean]): table or nil, string
Функция сканирует "колонну" блоков в относительных координатах (x, y) и возвращает таблицу плотностей (с определенной погрешностью). В случае ошибки возвращает nil и ее текст.

Координаты (0, 0) обозначают колонну блоков, в которой располагается сам сканер (32 блока вверх от него, и 32 блока вниз).
От себя добавлю только то, что можно сканировать куб 64*64*64 , где центр куба - положение сканера. Положением сканера будет центр этого куба, тоесть 32 высота ( Также у нас на сервер насколько я понял куб будет 128*128 и высотой в 64 блока). На сканирование одного блока уходит 10 энергии. На один столб должно порядка 640.

Для начала работы нам потребуется сам планшет со следующими минимальными компонентами:
-видеокарта 1 уровня
-монитор 1 уровня
-клавиатура
-геосканер
-любые процессор, оперативная память, винчестер, bios и пр. .

Для начала работы нам нужен планшет с записанной на диск программой. Я не использовал в планшете интернет-карту, а просто вставил текст программы нажатием средней кнопки мыши в открытый для редактирования файл. Ссылка на pastebin: http://pastebin.com/eJne1Dna . Код eJne1Dna
c=        require("component")
computer= require("computer")
event=    require("event")
os=       require("os")
term =    require("term")
gpu=c.gpu
s=c.geolyzer


function intro()
  print("Нажмите пробел для сканирования")
  print("Нажмите q для выхода")
  print("Нажмите с для очистки экрана")
  print("Область сканирования 20 блоков на восток")
end

function scann()
--сканирует область в 20 блоков от игрока в сторону севера.

  local cx,cy=1,1
  local onThatX=0;--количество ресурсов для данного столбца. Используется для отрисовки глубины копки для нового
  local maxy=1;--положение курсора по окончании сканирования
  for x=1,20 do
    gpu.set(cx,cy,tostring(x));--текущий столбец
    data=s.scan(x,0);-- х инкриментируется до 20, у=0 ширина сканирования 1.
    local t=0;--"табулятор" для двухсимвольной глубины.
    if x>9 then t=1 end
    for d=1,32 do
      if data[d]>2 then
        -- в data записаны плотности блоков. >2 означает сообщать о блоках с плотностью более 2.
        -- Весь диапазон от 0 до 99. 99 это вроде игрок. Все ресурсы примерно одинаковой плотности в районе 3.
        computer.beep(2000,0.1)
        if onThatX>0 then
          cy=cy+1
          if (32-d)>9 and t==0 then t=1 end;--смещаем курсор для печати на один столбец дальше из-за цифт больше 9.
          if cy<15 then 
            gpu.set(cx,cy,tostring(math.floor(32-d)));--Печатает глубину на которую нужно копать вниз относительно начальной высоты игрока.
          else
            -- для 80*15 экрана. Для больших экранов можно изменить и убрать.
            gpu.set(cx,15,tostring(math.floor(32-d)))
          end
        end
        onThatX=onThatX+1 
      end
    end

    if t==1 then cx=cx+2 else cx=cx+1 end;t=0
    
    if cy>maxy then maxy=cy end;--положение курсора при продолжениие печати о "нажмите enter для продолжения".
    cy=1

    onThatY=0;--обнуляем количество ресурсов для текущего столбца.
  end
  term.setCursor(1,maxy)
  term.write("нажмите enter для продолжения")
  io.read()
  term.clear()
  intro()
end

intro()

while true do
  _,_,key1,key2=event.pull("key_down")
  if key2==57 then      term.clear();scann()
  elseif key2==46 then  term.clear();intro()
  elseif key2==16 then  term.clear();os.exit()
  end
end
Для демонстрации работы я подготовил стэнд:
Изображение

С включенным планшетом я стал в позицию 1. Для работы программы нужно обязательно смотреть на восток. Это связанно с жестким закреплением направления сканирования в программе из-за избыточной сложности пользования gps (не сложности программирования, а малого gps.range() ). Скриншоты с начальным положением и направлением в начале работы для тех, кто путается со сторонами света или пока еще не проходил географию в школе:
Изображение

Изображение

Далее запускаем программу и увидим небольшие инструкции для работы. Возможностей пока мало:
-выход по нажатию на кнопку "q" .
-сканирование по нажатию на кнопку пробела .
-очистка экрана по нажатию на "c".

Смело нажимаем пробел и программа начнёт сканировать породу под игроком на расстояние в 20 блоков на восток. В итоге у нас получиться примерно вот такая табличка, разобраться в которой я помогу на следующих скриншотах (По оси X удаление от игрока, по Y- глубина залегания добра).
Изображение

А вот и обьяснение как расшифровать эту табличку:
Изображение
Рассмотрим на примере золота. Нужно сделать 5 шагов вперед от начальной точки и прокопать на глубину минимум 4 блока. Если копать до 7го блока, то мы выкопаем все ресурсы .

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

Обьяснение скудное, но заходите в игру и покажу.
Программу можно модифицировать разными способами. Добавить сетку привязок высот, чтобы небыло мешанины цифр. Тогда можно будет определять лавовые озера по горизонтальному скоплению "ресурсов". С успеход дописывается работа с gps, тогда отпадает необходимость работы только в сторону востока. Но gps.range() у нас на сервере всего 64 блока, поэтому уйдя далее этого расстояния необходимо отрисовывать новую карту и вставлять её в gps приемник, что очень сильно напрягает. А так бы можно было сделать визуальное и звуковое оповещение над каким блоком копать вниз и на сколько. Визуально показывать на сколько копать вниз, звуком пищать на широте и долготе залегания ресурсов. При этом сам модуль gps ставить невнутри в робта, а в контейнер для улучшений,иначе нужно будет разбирать робота чтобы поменять карту.

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

Прикрепленные изображения

  • Прикрепленное изображение
  • Прикрепленное изображение
  • Прикрепленное изображение
  • Прикрепленное изображение
  • Прикрепленное изображение
  • Прикрепленное изображение


  • Alex, Totoro, Fingercomp и еще 1 это нравится



Отличная работа! Одна из наиполезнейших прог

Кстати, энергозатраты на сканирование одинаковы? что 10 блоков, что 1000?

Затраты на сканирование по 10 на каждый блок, если я правильно помню с вики. В моей программе анализируются блоки только под игроком (от 1 до 32) и не анализируются над игроком (с 32 по 64) , хотя сканером они сканируются.
По идее 12800 за 1 сканирование вперед на 20 блоков по 64 . 
Программа простецкая, поэтому скан чанка не делал- энергозатратно. Хотя 10мая20115 подняли батарейку планшету до с 20к до 80к, может проще станет.

Выглядит неплохо =)

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

Плюс/минус 5 слоев вверх/вниз от места, где располагается сканер и небольшие стандартные жилы руды уже становится трудно различать на фоне возрастающих "погрешностей сканирования".

То есть чтобы определить с высокой долей вероятности точное положение жил - надо спускаться на предполагаемый уровень добычи.

Я обычно на 14м стоял и рыл вниз. Бесит только лава и бэдрок, который фонит иногда на 6 и 7 уровни. Было бы у ресурсов разная плотность, было бы интереснее.
Update: у нас на сервере стоимость сканирования уменьшена сильно ниже 10. Поэтому планшет быстро не садился.


Обратные ссылки на эту запись [ URL обратной ссылки ]

Обратных ссылок на эту запись нет

Июнь 2018

В П В С Ч П С
     12
3456789
10111213141516
171819202122 23
24252627282930

Новые записи

Новые комментарии