Xottabich 11 Опубликовано: 22 апреля, 2020 (изменено) Привет, это моя первая программа для робота. Автоферма пшеницы. local args = {...} local io = require("io") local robot = require("robot") local comp = require("computer") local filesystem = require("filesystem") local r_forward = robot.forward local arg1 = args[1] local arg2 = args[2] function robot.forward() repeat os.sleep(0) until r_forward() return true end if (arg1 == "size") then if (arg2 == nil) then return print("Не указан размер") end local farmsize = io.open("/home/farm.cfg", "w") farmsize:write(arg2) farmsize:flush() farmsize:close() return print("Позиция установлена") end if (filesystem.exists("/home/farm.cfg") == false) then return print("Файл конфигурации не создан! пожалуйста используйте аргумент size *Размер поля*") end local farmsize = io.open("/home/farm.cfg") local size = farmsize:read() farmsize:close() function farm() robot.forward() for y = 1, size do -- собрать 1 линию robot.swingDown() robot.useDown() robot.placeDown() for x = 1, (size - 1) do robot.forward() robot.swingDown() robot.useDown() robot.placeDown() end -- поворот if y % 2 == 1 then robot.turnLeft() robot.forward() robot.turnLeft() else robot.turnRight() robot.forward() robot.turnRight() end end if(size%2 == 0) then robot.turnLeft() robot.turnLeft() robot.turnLeft() -- возвращение на базу for y = 1, (size - 1) do robot.forward() end robot.turnRight() robot.turnLeft() robot.forward() robot.turnRight() robot.forward() robot.turnAround() else for y = 1, (size - 1) do robot.forward() end robot.turnLeft() for y = 1, (size) do robot.forward() end robot.turnRight() robot.forward() robot.turnAround() end end function dropitem() robot.turnAround() for c = 2, 16 do robot.select(c) if robot.count() > 0 then robot.drop() else robot.select(1) break end end robot.turnAround() end if arg1 == "primary" then farm() if robot.count(2) == 64 then dropitem() end end local primary = nil while true do -- таймер(1час) for i = 1, 10 do os.sleep(370) print((10 * i) .. '%') end farm() if robot.count(2) == 64 then dropitem() end end Пару слов об аргументах *name*.lua primary(принудительный запуск сбора) *name*.lua size *size*(установка размера фермы) Также о настройке 1.Ферма должна быть одинаковая по размерам. т.е. 15x15 или 9x9 и т.д. 2.Робот должен быть установлен следующим образом(см.ниже) 3.(по желанию) дать роботу мотыгу чтобы он сам вспахал землю(в принципе просто можно задать ему размеры и дать семена и он сам вспашет землю и посадит семена) Просьба не судить строго так как это моя первая программа и вообще первая программа на языке LUA Жду адекватной критики и предложений. Спасибо за помощь игроку Asummonster Изменено 23 апреля, 2020 пользователем Xottabich Добавил закрытие потока,добавлена табуляция, пофикшенбаг который не давал работать на чётной по размеру ферме(6x6,8x8 и тд) 7 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Xottabich Автор темы 11 Опубликовано: 22 апреля, 2020 Если робот стучится в одну из стен вашей фермы или делает лишний шаг, то вы указали неправильные размеры или неправильно посчитали размер фермы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Xottabich Автор темы 11 Опубликовано: 22 апреля, 2020 (изменено) Исправлено Изменено 23 апреля, 2020 пользователем Xottabich Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах