Перейти к содержимому
Sheratan

Кривой копатель ver1.00

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

Привет всем, я тут впервые и решил к вам обратиться вот с каким вопросом.

Что не так с моим кривым кодом? Почему не работает?

 

Черепашка-майнер должна копать 50 блоков в длину и 10 блоков в высоту, копает по типу змейки.

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

 

Помогите пожайлуста.

 

 

 

http://pastebin.com/XR4JPGC5

Изменено пользователем Sheratan

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


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

Вообще-то, принято кидать свой код на pastebin.com

Изменено пользователем Tanker

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


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

А может для начала написать (автору), что именно в нем "кривым" (по мнению автора) и как именно не работает?

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


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

Какую ошибку кидает? Если ошибок не кидает, то что именно не работает? Что задумывалось? Слишком сложна, мой экстрасенс не понимать.

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


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

А мой почти понимать)
h изначально 0, и условие h == 50 никогда не будет верным.

Но комментарии в коде всегда полезны.
Или хотя бы здесь пояснить алгоритм.
 

Табуляция какая-то сбившаяся, попробуй делать два пробела.

Изменено пользователем SkyFogginer

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


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

Ну начнем с того, что переменные вообще все нулевые т.к. вообще не передаются им значения

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


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

А мой почти понимать)

h изначально 0, и условие h == 50 никогда не будет верным.

 

Но комментарии в коде всегда полезны.

Или хотя бы здесь пояснить алгоритм.

Слушай, а ты похоже прав. Плюс прога в вечный цикл уйдет.

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


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

Давай немного проанализируем, как происходит выполнение кода.

 

  1. Запускается самый внешний цикл с условием c ~= 10. Кстати, это довольно опасная конструкция. Если переменная c, во внутреннем цикле успеет принять значение больше 10, цикл станет вечным, и никогда не остановится.
  2. Второй цикл имеет условие h == 50. Это условие уже равно false, так как переменная h равна 0. Цикл не выполнится.
  3. Таким образом первый цикл становится вечным, но программа при этом ничего не делает, раз за разом сравнивая перменную c с числом 50.

А если бы второй цикл все же выполнился, то программа пропустила бы третий цикл с условием r == true, потому что всего парой строк до него, переменная r получила значение false.

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


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

Мая шатать глаза.

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


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

А зачем целых две логических переменных и два ифа?else есть же, а состояние можно сменять так: l=not l.

При этом твою конструкцию из двух ифов можно сделать такой:

if l then поворот на лево else поворот на право end

l=not l

Изменено пользователем Quant

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


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

Если, не брезгуешь, то можешь посмотреть - как у меня робо-экскаватор копает.

http://pastebin.com/VwiUAGFg

 

П.С. Только там принцип другой - снимается шар "грунта" высотой 3 блока. А размер можно, теоретически - задать любой.

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


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

Если, не брезгуешь, то можешь посмотреть - как у меня робо-экскаватор копает.

http://pastebin.com/VwiUAGFg

 

П.С. Только там принцип другой - снимается шар "грунта" высотой 3 блока. А размер можно, теоретически - задать любой.

    while r.detect () == true do  == while r.detect() do

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


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

    while r.detect () == true do  == while r.detect() do

Спасибо. Когда набрасывал текст, этого не знал.

В связи с этим, возникли несколько вопросов :

1. Где глянуть остальные примеры, замены стандартного написания - на новое ?

2. Кроме эстетического удовольствия, такой формат, ещё как-то влияет на программу ? ( Ускорение работы ? Уменьшение ошибок ? )

Изменено пользователем davial

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


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

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) Нет, особого ускорения не будет. Просто это выглядит короче, красивее, и даже иногда понятнее (у меня глаз всегда цепляется за такие конкструкции, и тратит пару секунд, чтобы понять, что дополнительное действие на самом деле ничего дополнительно не делает =))

Изменено пользователем Totoro

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


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

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

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

Гость
Ответить в тему...

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

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

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

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

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


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