Документация
Примеры программ
Содержание
Основные команды
Управляющие конструкции
Примеры программ
- Написать свое имя
- Найти пятно
- Движение по линии
- Лабиринт
Образование

Примеры программ

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

Пример 1 : Написать свое имя

Робот может рисовать, и вы можете создавать простые программы для рисования. Используя команды рисоватьБелым()и стопРисовать(), вы даете команды роботу достать кисть, прикоснуться ей к земле или убрать кисть. Когда робот будет двигается с кистью, он рисует за собой линию на земле. Таким способом вы можете написать любую букву, например 'A'.

На карте openArea.map есть достаточно свободного места, чтобы вы могли создать свое произведение искусства. Попробуйте пульт управления (Запуск > Пульт управления), чтобы робот нарисовал что-нибудь.

См. также: основные команды: рисование, движение

write 'A'

#буква 'A'
рисоватьБелым()


вперед(2)
направо()
вперед(1)
направо()
вперед(2)
назад(1)
направо()
вперед(1)


стопРисовать()

 

Пример 2 : Найти белое пятно

На карте findSpot1.map , которую можно найти в директории карт Robomind, с левой стороны находится тупик, в котором нарисовано белое пятно. Предположим, что вы заранее не знаете, на каком расстоянии находится этот тупик. Сможет ли робот найти его, если в исходной позиции он находится рядом со стеной? Вы конечно можете посчитать количество клеток, которое должен пройти робот, но есть вариант по-лучше.

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

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

find spot
повтор(){
    если(слеваБелый()){
        # Слева от меня есть белое пятно
        налево()
        вперед(1)
        закончить
    }
    иначе{
        # Еще нет белого пятна
        вперед(1)
    }
}

Есть еще один подход к решению этой задачи. Робот повторяет команду вперед, до тех пор пока слева не закончится стена. Затем робот поворачивается и наезжает на пятно.

пока(слеваПрепятствие()){
    вперед(1)
}


налево()
вперед(1)
            

 

Пример 3 : Движение по линии

На карте default.map нарисована белая линия в ее восточной части. Эта линия представляет своего рода дорогу в мире робота. Как сделать так, чтобы робот двигался по этой дороге?

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

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

line follower
# Стать на начало линии
направо()
вперед(8)


# Ехать по дороге
повтор()
{
    если(впередиБелый()){	
        вперед(1)
    }
    иначе если(справаБелый()){
        направо()
    }
    иначе если(слеваБелый()){
        налево()
    }
    иначе если(впередиПрепятствие()){
        закончить
    }
}
      

Другой подход заключается в использовании так называемых рекурсивных процедур. В следующем коде определена процедура следовать(). В этой процедуре, после того как сделан правильный шаг, процедура вызывает еще раз следовать(), то есть вызывает сама себя. Мы получаем последовательность из следовать(...следовать(...следовать(...)...)...), которая каждый раз выполняет какое-то правильное действие, чтобы выполнить задачу. Такое циклическое определение процедуры называется рекурсией, и, вполне возможно, оно покажется вам на первый взгляд довольно странным. Но не стоит беспокоится, попробуйте, и вам станет более понятно как это работает.

# Стать на начало линии
направо()
вперед(8)


# Начинаем движение
следовать()


# Рекурсивное определение трекинга
процедура следовать(){
    если(впередиБелый()){	
        вперед(1)
        следовать()
    }
    иначе если(справаБелый()){
        направо()
        следовать()
    }
    иначе если(слеваБелый()){
        налево()
        следовать()
    }
    иначе если(впередиПрепятствие()){
        # Завершение вызова текущей процедуры
        # (так как после этого нет других команд,
        # то все вызовы будут завершены
        # и программа будет остановлена)
        возврат
    }
}

 

Пример 4 : Лабиринт

Как пройти лабиринт? Оказывается, что эта трудная задача имеет простое решение. Двигайся так, чтобы стена всегда была с правой стороны от тебя (или всегда с левой стороны), и ты найдешь выход.

В следующем коде робот ищет маяк на карте maze1.map.

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

повтор(){	
    если(справаПрепятствие()){
        если(впередиСвободно()){
            вперед(1)
        }
        иначе{
            налево()
        }
    }
    иначе{
        направо()
        вперед(1)
    }

    если(впередиМаяк()){	
        взять()
        закончить
    }
}
      

RoboMind - Copyright © 2005 - 2016 - Research Kitchen