Lgmrszd 390 Опубликовано: 19 февраля, 2015 (изменено) Так уж вышло, что Сябро первый выложил на форум библиотеку для робота, а я свою написал ещё неделю назад (скрипач Морф - свидетель) Так вот, данное поделие служит для управления роботом и получением его координат. Сам код на pastebin кидать не буду, ибо он слишком прост. local moving={} local robot=require('robot') local x=0 local y=0 local z=0 local direct='N' function getX() return x end function getY() return y end function getZ() return z end function getDirection() return direct end function getCoordinates() return x,y,z,direct end function smartTurnLeft() robot.turnLeft() if direct=='N' then direct='W' elseif direct=='W' then direct='S' elseif direct=='S' then direct='E' elseif direct=='E' then direct='N' end end function smartTurnRight() robot.turnRight() if direct=='N' then direct='E' elseif direct=='E' then direct='S' elseif direct=='S' then direct='W' elseif direct=='W' then direct='N' end end function smartTurnAround() robot.turnAround() if direct=='N' then direct='S' elseif direct=='W' then direct='E' elseif direct=='S' then direct='N' elseif direct=='E' then direct='W' end end function turnNorth() if direct=='S' then robot.turnAround() elseif direct=='W' then robot.turnRight() elseif direct=='E' then robot.turnLeft() end direct='N' end function turnWest() if direct=='E' then robot.turnAround() elseif direct=='S' thenect='N' end function turnWest() if direct=='E' then robot.turnAround() elseif direct=='S' then robot.turnRight() elseif direct=='N' then robot.turnLeft() end direct='W' end function turnSouth() if direct=='N' then robot.turnAround() elseif direct=='E' then robot.turnRight() elseif direct=='W' then robot.turnLeft() end direct='S' end function turnEast() if direct=='W' then robot.turnAround() elseif direct=='N' then robot.turnRight() elseif direct=='S' then robot.turnLeft() end direct='E' end function goNorth() if direct=='N' then a=robot.forward() elseif direct=='S' then a=robot.back() elseif direct=='W' then smartTurnRight() a=robot.forward() elseif direct=='E' then smartTurnLeft() a=robot.forward() end if a then x=x+1 end return a end function goSouth() if direct=='S' then a=robot.forward() elseif direct=='N' then a=robot.back() elseif direct=='E' then smartTurnRight() a=robot.forward() elseif direct=='W' then smartTurnLeft() a=robot.forward() end if a then x=x-1 end return a end function goWest() if direct=='W' then a=robot.forward() elseif direct=='E' then a=robot.back() elseif direct=='S' then smartTurnRight() a=robot.forward() elseif direct=='N' then smartTurnLeft() a=robot.forward() end if a then z=z-1 end return a end function goEast() if direct=='E' then a=robot.forward() elseif direct=='W' then a=robot.back() elseif direct=='N' then smartTurnRight() a=robot.forward() elseif direct=='S' then smartTurnLeft() a=robot.forward() end if a then z=z+1 end return a end function goUp() if robot.up() then y=y+1 end end function goDown() if robot.down() then y=y+1 end end moving['getX']=getX moving['getY']=getY moving['getZ']=getZ moving['getDirection']=getDirection moving['smartTurnAround']=smartTurnAround moving['smartTurnLeft']=smartTurnLeft moving['smartTurnRight']=smartTurnRight moving['turnNorth']=turnNorth moving['turnEast']=turnEast moving['turnSouth']=turnSouth moving['turnWest']=turnWest moving['goNorth']=goNorth moving['goSouth']=goSouth moving['goEast']=goEast moving['goWest']=goWest moving['goUp']=goUp moving['goDown']=goDown moving['getCoordinates']=getCoordinates package.loaded['moving']=moving Для тех, кто ничего не понял, вот список функций (вместо {side} подставить North, South, West или East соответсвенно): getCoordinates():x,y,z,d Возвращает текущее положение робота и его направление (x,y,z - числа, d='N','S','W','E') go{side}():boolean Перемещает подопытного. Возвращает true в случае успеха. goUp() и goDown() делают то же самое, только... угадайте куда . smartTurnRight(), smartTurnLeft() и smartTurnAround() - ну тут всё понятно. turn{Side}() - поворачивают на север, юг... в общем, куда надо. getX(), getY(), getZ(), getDirection() - интересно, что же они возвращают... (подсказка - первые три - числа, четвёртая - строку) --------------- Новая версия! Изменения: Почти ничего, а именно: добавлены функции goX(), goY(), goZ(). Cкачать можно на Яндекс.Диске. Изменено 18 мая, 2015 пользователем MineUbuntu 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 19 февраля, 2015 (изменено) Что-то подобное у меня в Recursive Miner за роботом следит. У тебя под спойлером кусок кода продублировался в конце. Кстати, в API которые я видел в OpenComputers немного по другому обычно делалось. Там вначале объявлялась таблица (moving) и реквайры, а потом все переменные и функции делались полями этой таблицы сразу. Примерно так: function moving.getX() return x end function moving.getY() return y end А последней строкой библиотеки шло: return moving Интересно, есть ли какие-то значительные различия в этих двух методах создания библиотеки. Изменено 19 февраля, 2015 пользователем Totoro Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Lgmrszd Автор темы 390 Опубликовано: 19 февраля, 2015 Что-то подобное у меня в Recursive Miner за роботом следит. У тебя под спойлером кусок кода продублировался в конце. Кстати, в API которые я видел в OpenComputers немного по другому обычно делалось. Там вначале объявлялась таблица (moving) и реквайры, а потом все переменные и функции делались полями этой таблицы сразу. Примерно так: function moving.getX() return x end function moving.getY() return y end А последней строкой библиотеки шло: return moving Интересно, есть ли какие-то значительные различия в этих двух методах создания библиотеки. Так было сделано по совету NEO, так как сначала я делал так, как в исходниках других библиотек, но библиотека не подгружалась. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 19 февраля, 2015 Так было сделано по совету NEO, так как сначала я делал так, как в исходниках других библиотек, но библиотека не подгружалась. Исходный код сохранился? (Старой версии) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Lgmrszd Автор темы 390 Опубликовано: 19 февраля, 2015 Исходный код сохранился? (Старой версии) Нет, конечно! Я же редактировал прямо на сервере, и не делал бэкапы. Но буду признателен, если кто-нибудь подготовит версию с таким способом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Lgmrszd Автор темы 390 Опубликовано: 18 мая, 2015 Выложил новую версию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах