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

Ферма кактусов

Рекомендованные сообщения

Это моя первая программа на этом ресурсе.  Буду рад вашей критике, идеям по оптимизации кода.

 

Загрузить можно по ссылке  http://pastebin.com/bzBkTvkZ

 

или набрать в терминале:

pastebin get bzBkTvkZ cactus

Snimokekra_1808937_24163381.jpg

 

Начальные установки:

6   local len,w = 8,8   -- длинна и ширина поля
7   local s = 200 -- время ожидания созревания
 

В 6 строке кода надо указать размеры вашего поля. По умолчанию стоит 8 х 8. В 7 строке время полного созревания урожая.

Робота нужно установить на высоте 4 блока от уровня будущего поля. За ним поставить сундук. Робот должен обладать Апгрейтом -солнечная панель для подзарядки.

Snimokekra_9380846_24163402.jpg

 

Если поле еще не сформированно, то робот сам может засеять поле кактусами в шахматном порядке.

 

Snimokekra_8010132_24163387.jpg

cactpng_3166873_24160070.jpg

 

Робот будет информировать вас о количестве высаженных кактусов, заряде батареи. При необходимости подзаряжаться.

 

Snimokekra_3629333_24160234.jpg

 

 

P.S. Хочу сказать спасибо Alex, за гайд 

http://computercraft.ru/topic/1520-chto-takoe-for-in-pairs/

Эта статья стала настольной книгой, чтобы разобраться в работе таблиц.

Fingercomp за объяснение логики lua.

Отдельное спасибо Totoro и  qwertyMAN за быстрые ответы на мои порой нубские вопросы.

 

Спасибо вам за терпение.   :)

Изменено пользователем bob558
  • Like 9

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Добавь скрин : сбоку от поля, на уровне робота - чтобы визуально было видно, уровень установки робота, относительно кактусов.

2. Будешь ли добавлять статистику сбора урожая ? Сколько собрал - за 1 проход, и сколько - за всё время.

Изменено пользователем davial

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Добавь скрин : сбоку от поля, на уровне робота - чтобы визуально было видно, уровень установки робота, относительно кактусов.

2. Будешь ли добавлять статистику сбора урожая ? Сколько собрал - за 1 проход, и сколько - за всё время.

 

Добавил новые картинки. 

 

Да, буду добавлять статистику. Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У рoбoтoв есть не oчевидная прoблема, если ему дать кoманду сделать шаг, тo oн мoжет ее и не выпoлнить из-за лагoв сервера, пoэтoму каждoе движение дoлжнo быть пoдтвержденo.

Например: if robor.move(side) then i=i+1 end или даже

function move(side)
  if not robot.detect(side) and not robot.move(side) then
    move(side)
  end
end
Чтoбы рабoтать сo счетчикoм, тo лучше так пoдтверждать движение пo всем oсям, так рoбoт будет знать свoю пoзицию и прoще будет егo oтправить на тoчку старта.

Нo я изначальнo, все фермы делал без всяких счетчикoв, рoбoт узнавал, кoгда надo пoвoрачивать дoстигнув стены, кoтoрая указывала границы пoля.

Изменено пользователем Doob
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У рoбoтoв есть не oчевидная прoблема, если ему дать кoманду сделать шаг, тo oн мoжет ее и не выпoлнить из-за лагoв сервера, пoэтoму каждoе движение дoлжнo быть пoдтвержденo.

Например: if robor.move(side) then i=i+1 end или даже

function move(side)
  if not robot.detect(side) and not robot.move(side) then
    move(side)
  end
end
Чтoбы рабoтать сo счетчикoм, тo лучше так пoдтверждать движение пo всем oсям, так рoбoт будет знать свoю пoзицию и прoще будет егo oтправить на тoчку старта.

Нo я изначальнo, все фермы делал без всяких счетчикoв, рoбoт узнавал, кoгда надo пoвoрачивать дoстигнув стены, кoтoрая указывала границы пoля.

 

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

robot.forward(); os.sleep(0.3)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот кстати непонятно, как лаг сервера может сбить робота.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот кстати непонятно, как лаг сервера может сбить робота.

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

 

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

os.sleep(0.3)

как он стал строго следовать программе. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, такое случается, тоже замечал.

Но почему - непонятно. Надо будет расследовать.

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, такое случается, тоже замечал.

Но почему - непонятно. Надо будет расследовать.

Видать, у некоторых потоков, на сервере - очень низкий приоритет. И поэтому : их исполнение откладывается. И выполняется ... не вовремя. Вот тебе и причина сбоя в работе скриптов. Вот тебе и - спонтанные пропуски операций робота.(И это, как-то связано именно с обработкой блоков в мире. Т.к. программы в компьютере - не сбоят. Только в роботе. По крайней мере, у меня, не сбоили.)

Изменено пользователем davial

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Робот - блок, вполне возможно что с ним происходит то-же самое, что и при разрушении блоков при плохом пинге или перегрузе

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

Войти

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

Войти сейчас

×