bob558 28 Опубликовано: 24 ноября, 2016 (изменено) Это моя первая программа на этом ресурсе. Буду рад вашей критике, идеям по оптимизации кода. Загрузить можно по ссылке http://pastebin.com/bzBkTvkZ или набрать в терминале: pastebin get bzBkTvkZ cactus Начальные установки: 6 local len,w = 8,8 -- длинна и ширина поля 7 local s = 200 -- время ожидания созревания В 6 строке кода надо указать размеры вашего поля. По умолчанию стоит 8 х 8. В 7 строке время полного созревания урожая. Робота нужно установить на высоте 4 блока от уровня будущего поля. За ним поставить сундук. Робот должен обладать Апгрейтом -солнечная панель для подзарядки. Если поле еще не сформированно, то робот сам может засеять поле кактусами в шахматном порядке. Робот будет информировать вас о количестве высаженных кактусов, заряде батареи. При необходимости подзаряжаться. P.S. Хочу сказать спасибо Alex, за гайд http://computercraft.ru/topic/1520-chto-takoe-for-in-pairs/ Эта статья стала настольной книгой, чтобы разобраться в работе таблиц. Fingercomp за объяснение логики lua. Отдельное спасибо Totoro и qwertyMAN за быстрые ответы на мои порой нубские вопросы. Спасибо вам за терпение. ) Изменено 24 ноября, 2016 пользователем bob558 8 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
davial 1 972 Опубликовано: 24 ноября, 2016 (изменено) 1. Добавь скрин : сбоку от поля, на уровне робота - чтобы визуально было видно, уровень установки робота, относительно кактусов. 2. Будешь ли добавлять статистику сбора урожая ? Сколько собрал - за 1 проход, и сколько - за всё время. Изменено 24 ноября, 2016 пользователем davial Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
bob558 Автор темы 28 Опубликовано: 24 ноября, 2016 1. Добавь скрин : сбоку от поля, на уровне робота - чтобы визуально было видно, уровень установки робота, относительно кактусов. 2. Будешь ли добавлять статистику сбора урожая ? Сколько собрал - за 1 проход, и сколько - за всё время. Добавил новые картинки. Да, буду добавлять статистику. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 749 Опубликовано: 24 ноября, 2016 (изменено) У р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ля. Изменено 24 ноября, 2016 пользователем Doob 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
bob558 Автор темы 28 Опубликовано: 24 ноября, 2016 У р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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 24 ноября, 2016 Вот кстати непонятно, как лаг сервера может сбить робота. Ведь выполнение программы производится на сервере и движение тоже, клиент только отображает изменение положения робота. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
bob558 Автор темы 28 Опубликовано: 24 ноября, 2016 Вот кстати непонятно, как лаг сервера может сбить робота. Ведь выполнение программы производится на сервере и движение тоже, клиент только отображает изменение положения робота. Была такая штука, когда я находил разряженного и выключенного робота забившегося в угол, куда он не должен был попасть по своей воле. Стоило ему добавить после каждого перемещения os.sleep(0.3) как он стал строго следовать программе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 24 ноября, 2016 Да, такое случается, тоже замечал. Но почему - непонятно. Надо будет расследовать. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 749 Опубликовано: 24 ноября, 2016 Слипы не помогают, лаги происходят рандомно, поэтому даже с задержками робот будет пропускать ходы и сбиваться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
davial 1 972 Опубликовано: 24 ноября, 2016 (изменено) Да, такое случается, тоже замечал. Но почему - непонятно. Надо будет расследовать. Видать, у некоторых потоков, на сервере - очень низкий приоритет. И поэтому : их исполнение откладывается. И выполняется ... не вовремя. Вот тебе и причина сбоя в работе скриптов. Вот тебе и - спонтанные пропуски операций робота.(И это, как-то связано именно с обработкой блоков в мире. Т.к. программы в компьютере - не сбоят. Только в роботе. По крайней мере, у меня, не сбоили.) Изменено 25 ноября, 2016 пользователем davial Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ALeXeR 67 Опубликовано: 24 ноября, 2016 Робот - блок, вполне возможно что с ним происходит то-же самое, что и при разрушении блоков при плохом пинге или перегрузе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах