theCPU 29 Опубликовано: 30 июля, 2017 Робот получает сигналы через "улучшение: чат" из мода Computronics Управление q = Вниз e = Вверх w = Вперёд s = Назад a = Поворот налево d = Поворот направот Пример: #qewsad local component = require("component") local event = require("event") local robot = require("robot") function check(t) --Проверка и выполнения команд tostring(t) for i = 1,#t do if t[1] == "#" then table.remove(t,1) elseif t[1] == "w" then robot.forward() table.remove(t,1) elseif t[1] == "a" then robot.turnLeft() table.remove(t,1) elseif t[1] == "s" then robot.back() table.remove(t,1) elseif t[1] == "d" then robot.turnRight() table.remove(t,1) elseif t[1] == "e" then robot.up() table.remove(t,1) elseif t[1] == "q" then robot.down() table.remove(t,1) else end os.sleep(0.1) --Задержка end end while true do local _, _, _, msg = event.pull("chat_message") --Получение сообщения из чата t = {} str=msg str:gsub(".",function© table.insert(t,c) end) --Перевод строки в массив if t[1] == "#" then -- Если содержит символ # то далее происходит выполнение команды check(t) end os.sleep(0.05) --задержка t=0 --Очистка массива end 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Quant 442 Опубликовано: 30 июля, 2017 Массив можно было вообще не очищать,ну и очистка делается присвоением nil или {} Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 749 Опубликовано: 31 июля, 2017 (изменено) local component = require("component") local event = require("event") local robot = component.robot local function move(side) if not robot.detect(side) and not robot.move(side) then move(side) end end local CMD = { w = function() move(3) end, a = function() robot.turn(false) move(3) end, s = function() robot.move(2) end, d = function() robot.turn(true) move(3) end, e = function() move(1) end, q = function() move(0) end } while true do local e = {event.pull('chat_message')} if e[4]:sub(1,1) == '#' then for i = 2, #e[4] do local index = e[4]:sub(i,i) if CMD[index] then CMD[index]() end end end end А вот версия для ЕЕPROM: local robot = component.proxy(component.list('robot')()) local function move(side) if not robot.detect(side) and not robot.move(side) then move(side) end end local CMD = { w = function() move(3) end, a = function() robot.turn(false) move(3) end, s = function() robot.move(2) end, d = function() robot.turn(true) move(3) end, e = function() move(1) end, q = function() move(0) end } while true do local e = {computer.pullSignal()} if e[1] == 'chat_message' and e[4]:sub(1,1) == '#' then for i = 2, #e[4] do local index = e[4]:sub(i,i) if CMD[index] then CMD[index]() end end end end Изменено 31 июля, 2017 пользователем Doob 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TC1061 14 Опубликовано: 21 августа, 2017 Массив можно было вообще не очищать,ну и очистка делается присвоением nil или {} Не очищали мы массив, остался в памяти, и потом... not enough memory... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 9 сентября, 2017 @theCPU: Используй тег разметки code для оформления кода. Это поможет сохранить отступы, облегчит чтение кода другим участниками и подтолкнет и к кнопочке «Нравится». Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах