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

KelLiN' - блог

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

Записи в этом блоге

 

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

Ресурсов всегда не хватает. Что делать ?! Копать! Где копать ?! Вот сейчас то после прочтения данной записи мы и узнаем.   Для добычи ресурсов будем использовать планшет. Сам по себе для добычи ресурсов он бесполезен, но если в него при сборке установить геосканер, то мы сможем узнавать где и сколько ресурсов находяться в породе, но с определенной в настройках сервера погрешносью. Как собирать планшет возможно расскажу потом.   Использоваться будет команда сканера 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 Для демонстрации работы я подготовил стэнд:   С включенным планшетом я стал в позицию 1. Для работы программы нужно обязательно смотреть на восток. Это связанно с жестким закреплением направления сканирования в программе из-за избыточной сложности пользования gps (не сложности программирования, а малого gps.range() ). Скриншоты с начальным положением и направлением в начале работы для тех, кто путается со сторонами света или пока еще не проходил географию в школе:     Далее запускаем программу и увидим небольшие инструкции для работы. Возможностей пока мало: -выход по нажатию на кнопку "q" . -сканирование по нажатию на кнопку пробела . -очистка экрана по нажатию на "c".   Смело нажимаем пробел и программа начнёт сканировать породу под игроком на расстояние в 20 блоков на восток. В итоге у нас получиться примерно вот такая табличка, разобраться в которой я помогу на следующих скриншотах (По оси X удаление от игрока, по Y- глубина залегания добра).   А вот и обьяснение как расшифровать эту табличку: Рассмотрим на примере золота. Нужно сделать 5 шагов вперед от начальной точки и прокопать на глубину минимум 4 блока. Если копать до 7го блока, то мы выкопаем все ресурсы .   Как можно заметить, дерево, шерсть и губка имели плотность ниже 2х и не попали в табличку. Но попала лава и ядерный реактор.   Обьяснение скудное, но заходите в игру и покажу. Программу можно модифицировать разными способами. Добавить сетку привязок высот, чтобы небыло мешанины цифр. Тогда можно будет определять лавовые озера по горизонтальному скоплению "ресурсов". С успеход дописывается работа с gps, тогда отпадает необходимость работы только в сторону востока. Но gps.range() у нас на сервере всего 64 блока, поэтому уйдя далее этого расстояния необходимо отрисовывать новую карту и вставлять её в gps приемник, что очень сильно напрягает. А так бы можно было сделать визуальное и звуковое оповещение над каким блоком копать вниз и на сколько. Визуально показывать на сколько копать вниз, звуком пищать на широте и долготе залегания ресурсов. При этом сам модуль gps ставить невнутри в робта, а в контейнер для улучшений,иначе нужно будет разбирать робота чтобы поменять карту.   Еще опечалил тот факт, что роботам увеличили энергохранилище во много раз, а планшет судя по расходу энергии оставили на стандартном уровне. Поэтому планшет и без геосканера разряжается в теченииполучаса простого программирования в нём..Надеюсь поправят и запас энергии и дальность работы gps от одной карты . Собственно для привлечения внимания к этому факту и написана статья.

KelLiN

KelLiN

×