Sheratan 5 Опубликовано: 9 ноября, 2015 (изменено) Привет всем, я тут впервые и решил к вам обратиться вот с каким вопросом. Что не так с моим кривым кодом? Почему не работает? Черепашка-майнер должна копать 50 блоков в длину и 10 блоков в высоту, копает по типу змейки. После того как я запускаю свой код, черепашка задумывается и ничего не происходит, что не так, все голову уже себе разбил. Помогите пожайлуста. http://pastebin.com/XR4JPGC5 Изменено 9 ноября, 2015 пользователем Sheratan Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Tanker 70 Опубликовано: 9 ноября, 2015 (изменено) Вообще-то, принято кидать свой код на pastebin.com Изменено 9 ноября, 2015 пользователем Tanker Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
cyber01 1 704 Опубликовано: 9 ноября, 2015 А может для начала написать (автору), что именно в нем "кривым" (по мнению автора) и как именно не работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JaggerDer 90 Опубликовано: 9 ноября, 2015 Какую ошибку кидает? Если ошибок не кидает, то что именно не работает? Что задумывалось? Слишком сложна, мой экстрасенс не понимать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SkyFogginer 25 Опубликовано: 9 ноября, 2015 (изменено) А мой почти понимать)h изначально 0, и условие h == 50 никогда не будет верным.Но комментарии в коде всегда полезны.Или хотя бы здесь пояснить алгоритм. Табуляция какая-то сбившаяся, попробуй делать два пробела. Изменено 9 ноября, 2015 пользователем SkyFogginer 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
cyber01 1 704 Опубликовано: 9 ноября, 2015 Ну начнем с того, что переменные вообще все нулевые т.к. вообще не передаются им значения Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JaggerDer 90 Опубликовано: 9 ноября, 2015 А мой почти понимать) h изначально 0, и условие h == 50 никогда не будет верным. Но комментарии в коде всегда полезны. Или хотя бы здесь пояснить алгоритм. Слушай, а ты похоже прав. Плюс прога в вечный цикл уйдет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 9 ноября, 2015 Давай немного проанализируем, как происходит выполнение кода. Запускается самый внешний цикл с условием c ~= 10. Кстати, это довольно опасная конструкция. Если переменная c, во внутреннем цикле успеет принять значение больше 10, цикл станет вечным, и никогда не остановится. Второй цикл имеет условие h == 50. Это условие уже равно false, так как переменная h равна 0. Цикл не выполнится. Таким образом первый цикл становится вечным, но программа при этом ничего не делает, раз за разом сравнивая перменную c с числом 50. А если бы второй цикл все же выполнился, то программа пропустила бы третий цикл с условием r == true, потому что всего парой строк до него, переменная r получила значение false. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 541 Опубликовано: 9 ноября, 2015 Мая шатать глаза. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Quant 442 Опубликовано: 10 ноября, 2015 (изменено) А зачем целых две логических переменных и два ифа?else есть же, а состояние можно сменять так: l=not l. При этом твою конструкцию из двух ифов можно сделать такой: if l then поворот на лево else поворот на право end l=not l Изменено 10 ноября, 2015 пользователем Quant 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
evgkul 571 Опубликовано: 10 ноября, 2015 А черепаха заправлена? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
davial 1 972 Опубликовано: 11 ноября, 2015 Если, не брезгуешь, то можешь посмотреть - как у меня робо-экскаватор копает. http://pastebin.com/VwiUAGFg П.С. Только там принцип другой - снимается шар "грунта" высотой 3 блока. А размер можно, теоретически - задать любой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 541 Опубликовано: 11 ноября, 2015 Если, не брезгуешь, то можешь посмотреть - как у меня робо-экскаватор копает. http://pastebin.com/VwiUAGFg П.С. Только там принцип другой - снимается шар "грунта" высотой 3 блока. А размер можно, теоретически - задать любой. while r.detect () == true do == while r.detect() do 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
davial 1 972 Опубликовано: 11 ноября, 2015 (изменено) while r.detect () == true do == while r.detect() do Спасибо. Когда набрасывал текст, этого не знал. В связи с этим, возникли несколько вопросов : 1. Где глянуть остальные примеры, замены стандартного написания - на новое ? 2. Кроме эстетического удовольствия, такой формат, ещё как-то влияет на программу ? ( Ускорение работы ? Уменьшение ошибок ? ) Изменено 11 ноября, 2015 пользователем davial Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 11 ноября, 2015 (изменено) 1. Где глянуть остальные примеры, замены стандартного написания - на новое ? 2. Кроме эстетического удовольствия, такой формат, ещё как-то влияет на программу ? ( Ускорение работы ? Уменьшение ошибок ? ) 1) Условия и циклы в Луа (да и любом другом языке программирования), принимают в качестве параметра выражения, результат которых - логическое значение (true, либо false). Функция robot.detect() согласно документации возвращает true при обнаружении препятсвия, и false в обратном случае. То есть твое выражение while r.detect () == true do будет в процессе выполнения программы сведено к одному из двух вариантов: while true == true do -- результат: true или while false == true do -- результат: false То есть, все выражение r.detect () == true можно смело упростить до r.detect (). Аналогично и в других похожих случаях. Если функция уже возвращает логическое значение, сравнивать его с true или false часто бывает излишне. 2) Нет, особого ускорения не будет. Просто это выглядит короче, красивее, и даже иногда понятнее (у меня глаз всегда цепляется за такие конкструкции, и тратит пару секунд, чтобы понять, что дополнительное действие на самом деле ничего дополнительно не делает =)) Изменено 11 ноября, 2015 пользователем Totoro 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах