\b;Упражнение
Запрограммируйте бота так, чтобы он нашел себе путь и не столкнулся со стенами лабиринта. Мы предполагаем, что конфигурация лабаринта вам неизвестна, но там нет раздвоений и тупиков. Лабиринт состоит из квадратов размером 5 метров каждый.

\b;Инструкция \c;radar\n;
Инструкция \c;\l;radar\u cbot\radar;(Barrier, 0, 45, 0, 5);\n; будет искать любую \l;преграду\u object\barrier;, расположенную перед радаром на расстоянии менее 5 метров. Давайте поближе рассмотрим пять использующихся параметров:

\s;\c;Barrier\n;
\l;Категория\u cbot\category; объекта, который должен искать радар, то есть преграда.

\s;\c;0\n;
Направление радара. \c;0\n; означает, что радар должен искать ее прямо перед собой.

\s;\c;45\n;
Открывающий угол в градусах. С открывающим углом в 45 градусов, будут замечены преграды, расположенные между 22.5 градусами влево 22.5 градусами вправо.

\s;\c;0\n;
Минимальное расстояние обнаружения. \c;0\n; означает, что будут обнаружены даже те объекты, которые расположены вплотную к боту.

\s;\c;5\n;
Максимальное расстояние обнаружения. Любая преграда, расположенная на расстоянии более \c;5\n; метров не будет обнаружена.

Чтобы привести еще один пример, \c;\l;radar\u cbot\radar;(Barrier, 90, 45, 0, 5);\n; направит радар на 90 градусов влево, чтобы проверить, нет ли слева прохода.

\image tlaby1 10 10;
\b;Общий принцип
Программа должна заниматься только одним участком лабиринта. Вы должны будете запустить ее несколько раз, чтобы добраться до финальной площадки.
o  Если впереди ничего нет, идти вперед.
o  Если слева ничего нет, поворот на четверть оборота влево, идти вперед.
o  Если справа ничего нет, поворот на четверть оборота вправо, идти вперед.

1) Сначала задайте три \l;переменные\u cbot\var; типа \c;\l;объект\u cbot\object;\n;, которые мы называем \c;front\n;, \c;left\n; и \c;right\n;. Переменные этого типа могут содержать описание любого объекта, например преграды, обнаруженной радаром.
\s;\c;	object   front, left, right;\n;

2) Искать преграды во всех трех направлениях, и выводить результат инструкции \c;radar\n; в три переменные, заданные в пункте 1). Если радар не найдет ничего, переменная будет содержать значение \c;\l;null\u cbot\null;\n;.
\s;\c;	front = radar(Barrier,   0, 45, 0, 5);
\s;	left  = radar(Barrier,  90, 45, 0, 5);
\s;	right = radar(Barrier, -90, 45, 0, 5);
\n;
3) Проверка наличия свободного пространства перед ботом с помощью инструкции \c;\l;if\u cbot\if;\n;. Если проверка истинна, будет выполнена инструкция, заключенная в скобках \c;{ }\n; , иначе продолжится выполнение кода после закрывающей скобки \c;}\n;.
Инструкция \c;return\n; прводит к остановке программы: работа выполнена.
\s;\c;if ( front == null )
\s;{
\s;	move(5);
\s;	return;
\s;}
\n;
4) Проверка возможности повернуть влево; если так, проводится поворот влево инструкцией \c;\l;turn\u cbot\turn;\n; и бот идет 5 метров вперед.
\s;\c;if ( left == null )
\s;{
\s;	turn(90);
\s;	move(5);
\s;	return;
\s;}
\n;
5) Проверка возможности повернуть вправо.
    ...

\b;Внимание
Инструкция \c;if ( )\n; не должна заканчиваться \l;точкой с запятой\u cbot\term;.

\t;См. также
\l;Программирование\u cbot;, \l;типы\u cbot\type; и \l;категории\u cbot\category;.