воскресенье, 18 марта 2012 г.

Робот для состязаний: Робот "Ван Гог". Часть IV

Продолжение. Часть I. Часть II. Часть III.
Для программирования перемещения робота "Ван Гог" по полю имеет смысл назначить код каждой позции, откуда и куда робот должен приехать.
Назначим цифры от 0 до 3 каждой позиции, где кубики изначально установлены, и также от 0 до 3 для каждого столбика. Цифры назначаются каждой позиции не случайным образом, а в соответствии с определнной логикой.



Позиции с установленными кубиками пронумерованы в соответствии, например, с порядком их обхода. Сначала робот идет в позицию 0, затем в 1 и т.д. На самом деле здесь ничего не мешает задать нам произвольный порядок обхода, главное, чтобы он был. Тем, как позиций закодированы на схеме выше, однозначно определяется как роботу передвигаться. Например, из позиции 0 роботу перемещатся в центр поля, по такой же траектории как и из позиции 3. Другой пример, то что из центра поля траектории перемещения до позиций 1 и 2 будут одинаковыми.

Такой же логике подчиняется нумерация позиций со столбиками. До 0 и 2 столбиков тракетории движения из центра поля – одинаковые, тоже самое и для 1 и 3 столбика.

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

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

ШАГ = 0;
Захватить кубик в позиции 0;
Начало Цикла
    Определить цвет и записать в ЦВЕТКУБИКА;
    //Робот едет в центр
    Если ШАГ = 0 или ШАГ = 3, тогда
        Едем прямо до перекрестка;
        Поворачиваем налево;
    Иначе
        Едем прямо до перекрестка;
        Поворачиваем направо;
    Едем к центру;
    //Робот поворачивается к нужным столбикам
    Если ЦВЕТКУБИКА < 2, тогда
        Поворачиваем в сторону базового лагеря;
    Иначе
        Поворачиваем в сторону противоположную базовому лагерю;
    //Робот едет к кубикам
    Если Остаток(ЦВЕТКУБИКА/2) = 0, тогда
        Едем прямо и налево;
    Иначе
        Едем прямо и направо;
    Выгружаем кубик;
    //Возвращаемся в центр
    Если Остаток(ЦВЕТКУБИКА/2) = 0, тогда
        Едем справа и прямо;
    Иначе
        Едем слева и прямо;
    ШАГ = ШАГ + 1;
    Если ШАГ > 3, тогда
        Прервать цикл;
    //Едем к кубику
    Если ШАГ = 3, тогда
        Едем прямо до перекрестка;
        Поворачиваем направо;
    Иначе
        Едем прямо до перекрестка;
        Поворачиваем налево;
    Едем к центру
    Захватить кубик;
Конец Цикла

Как видно из описания алгоритма, кодировки позиций, где лежат кубики хранятся в переменной ШАГ, а цвет кубика, захваченного роботом, хранится в ЦВЕТКУБИКА.

По значению переменной ШАГ определяется каким образом робот передвигается до центра поля и наоборот – из центра.

Значение ЦВЕТКУБИКА используется первый раз (ЦВЕТКУБИКА < 2) для обозначения в какую сторону роботу необходимо выполнить поворот от центральной линии. Второй раз оно появляется в выражениях Остаток(ЦВЕТКУБИКА/2) = 0, что по сути обозначает есть ли остаток от деления на 2. В зависимости от этого выбирается слева или справа относительно робота, находящегося в центре поля, расположены столбцы для кубиков.

Комментариев нет:

Отправить комментарий

Related Posts Plugin for WordPress, Blogger...