colobot-data/help/R/tlaby1.txt

63 lines
5.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

\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;.