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

KelLiN' - блог

  • запись
    1
  • комментария
    4
  • просмотров
    9 429

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

KelLiN

2 832 просмотра

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

 

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

 

Использоваться будет команда сканера 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.gpus=c.geolyzerfunction intro()  print("Нажмите пробел для сканирования")  print("Нажмите q для выхода")  print("Нажмите с для очистки экрана")  print("Область сканирования 20 блоков на восток")endfunction 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()endintro()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()  endend

Для демонстрации работы я подготовил стэнд:

index.php?app=core&module=attach&section=attach&attach_rel_module=post&attach_id=424

 

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

index.php?app=core&module=attach&section=attach&attach_rel_module=post&attach_id=425

 

index.php?app=core&module=attach&section=attach&attach_rel_module=post&attach_id=427

 

Далее запускаем программу и увидим небольшие инструкции для работы. Возможностей пока мало:

-выход по нажатию на кнопку "q" .

-сканирование по нажатию на кнопку пробела .

-очистка экрана по нажатию на "c".

 

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

index.php?app=core&module=attach&section=attach&attach_rel_module=post&attach_id=426

 

А вот и обьяснение как расшифровать эту табличку:

index.php?app=core&module=attach&section=attach&attach_rel_module=post&attach_id=428

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

 

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

 

Обьяснение скудное, но заходите в игру и покажу.

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

 

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

  • Like 4


4 комментария


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

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

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

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


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

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

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


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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас
×