63 lines
5.0 KiB
Plaintext
63 lines
5.0 KiB
Plaintext
\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;.
|