Перейти к содержимому
  • 0
bob558

Помогите разобраться с движением робота

Вопрос

Лирическое отступление.

В далекие 90-е у меня был комп "Радио 86-РК" на intel 8080 и  по редким статьям я совсем немного научился программировать в ассемблере. Правда дело, чтоб разобраться в  прерываниях,  не дошло - забрали в армию. После армии появились другие интересы. 

 

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

 
Робота ставлю на каменный блок
 
Как я понимаю эту программу.
 
robot=require("robot")
 
while not robot.down() do    -- проверяет что под роботом. если не вернулось true - начать цикл -  внизу препятствие
print(robot.down())
robot.swingDown()               -- копать вниз
--print(robot.down())
 
end
 
Как я думаю, робот должен копнуть под собой и останавливить выполнение программы. Но робот копает и смещается вниз и только затем программа останавливается.
 
Где команда смещения робота вниз?
 
Я не понимаю почему, если раскомментировать строку
 --print(robot.down())
программа зацикливается до бесконечности - копает вниз - смещается вниз - копает вниз - смещается вниз...?
 
Буду благодарен, если кто поможет разобраться.

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


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

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

Где команда смещения робота вниз?

Вот она: robot.down()

И в твоем цикле она встречается целых два раза:

здесь: while not robot.down() do

и здесь: print(robot.down())

 

В первом случае выполняется проверка, выполнено ли движение. И цикл будет выполняться до тех пор, пока этой строчкой кода не будет выполнено реальное перемещение вниз. Потому и программа завершается только после смещения вниз.

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


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

Вот она: robot.down()

И в твоем цикле она встречается целых два раза:

здесь: while not robot.down() do

и здесь: print(robot.down())

 

В первом случае выполняется проверка, выполнено ли движение. И цикл будет выполняться до тех пор, пока этой строчкой кода не будет выполнено реальное перемещение вниз. Потому и программа завершается только после смещения вниз.

Спасибо! Я раньше предполагал, что while not robot.down() do это только проверка под роботом, а не само перемещение робота Изменено пользователем bob558

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


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

проверка выполняется так, robot.detectDown()

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


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

проверка выполняется так, robot.detectDown()

Спасибо!

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


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

Еще раз спасибо вам за подсказки - читать код стало в разы проще и понятней!!!
 
Разбираясь с программой для карьера, я наткнулся на функцию:
 

withg=(generator~=nil)
 
function clearinv()
  alreadyhave=false
    for invcounter=1,slots do
    robot.select(invcounter)
      if withg then
       suc,error=generator.insert()
           if (error=="selected slot does not contain fuel" or alreadyhave) then robot.drop() else alreadyhave=true end
       else
       robot.drop()
       end
     end
     robot.select(1)
     sort()
end
 
Эта функция  связана с заправкой генератора. Я не понимаю вот эту строчку: 
 
suc,error=generator.insert()
 
В другом месте заправка выглядит несколько иначе и понятнее:
  • if(computer.energy()/computer.maxEnergy())<0.01 then
    for i = 1, 16 do
    component.generator.insert(64)
    end
    end
Изменено пользователем bob558

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


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

Функция generator.insert() возвращает true в случае успеха и false и название ошибки в случае неудачи. Если нам нужно узнать результат выполнения функции, то используется "эта непонятная строчка".

Если же нам не важен результат, или мы и так 100% можем сказать, что и так всё получится, то можно использовать просто generator.insert()

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


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

Извините за оффтоп, но Квант, есть такой BB тег, называется code. В квадратных скобках напиши code, потом свой код, а потом в квадратных скобках /code. Не надо мучать себя и раскрашивать код, этот тег сам все раскрасит.

function abcde(...) 
  print("Синяя или красная?")
end
local a = 228
Изменено пользователем LeshaInc

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


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

Извините за оффтоп, но Квант, есть такой BB тег, называется code. В квадратных скобках напиши code, потом свой код, а потом в квадратных скобках /code. Не надо мучать себя и раскрашивать код, этот тег сам все раскрасит.

function abcde(...) 
  print("Синяя или красная?")
end
local a = 228

Спасибо, сделал :))

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...