Модуль RobotTaskMaker
Типы модуля
RobotTaskMakertype
TaskProcType = procedure;Тип процедуры, генерирующей конкретное задание. Каждое задание реализуется в виде отдельной процедуры; для связывания этой процедуры с именем задания необходимо использовать процедуру RegisterTask, описываемую ниже.
Процедуры модуля RobotTaskMaker |
procedure
Field(szx,szy: integer);Задает поле Робота размера szx на szy клеток.
procedure
HorizontalWall(x,y,len: integer);Создает горизонтальную стену длины len и координатами левого верхнего угла (x, y).
procedure
VerticalWall(x,y,len: integer);Создает вертикальную стену длины len и координатами левого верхнего угла (x, y).
procedure
RobotBegin(x,y: integer);Задает начальное положение Робота в клетке с координатами (x, y).
procedure
RobotEnd(x,y: integer);Задает конечное положение Робота в клетке с координатами (x, y).
procedure
RobotBeginEnd(x,y,x1,y1: integer);Задает начальное положение Робота в клетке с координатами (x, y) и конечное в клетке с координатами (x1, y1).
procedure
Tag(x,y: integer);Помечает клетку (x, y) для закрашивания.
procedure
TagRect(x,y,x1,y1: integer);Помечает прямоугольник из клеток, задаваемый координатами противоположных вершин прямоугольника (x, y) и (x1, y1), для закрашивания.
procedure
MarkPainted(x,y: integer);Закрашивает клетку (x, y) (в задании некоторые клетки могут быть уже закрашены).
procedure
TaskText(s: string);Задает формулировку текста задания в строке s.
procedure
RegisterGroup(name,description,unitname: string; count: integer);Обеспечивает автоматическую регистрацию новой группы заданий в программном модуле PT4Load
. В результате имя данной группы будет отображаться в окне модуля PT4Load в списке групп, связанных с исполнителем Робот, что позволит создать программу-заготовку для выполнения любого задания этой группы. В качестве параметров процедуры указывается имя группы name, краткое описание группы description, имя модуля unitname, в котором описана группа, и количество заданий count. Имя группы заданий должно содержать не более 7 символов (цифр и латинских букв) и не должно оканчиваться цифрой, количество заданий не должно превышать 999. Процедура RegisterGroup должна вызываться в секции инициализации модуля, содержащего реализацию новой группы заданий для Робота.RegisterTask(name: string; p: TaskProcType);
Связывает имя задания name с процедурой p, в которой реализовано данное задание. Данную процедуру следует вызывать для
Создание заданий для исполнителя Робот
Опишем последовательность создания группы заданий для исполнителя Робот. Создадим модуль RobTasks.pas со следующим текстом:
unit
RobTasks;interface
uses
RobotTaskMaker;implementation
procedure
FirstRob;begin
TaskText('Задание myrob1. Закрасить помеченные клетки');
Field(10,6);
HorizontalWall(0,3,4);
VerticalWall(4,3,2);
RobotBegin(1,4);
VerticalWall(5,1,5);
HorizontalWall(5,1,4);
RobotEnd(6,2);
Tag(6,2);
end
;begin
RegisterGroup('myrob','Мои задания для Робота','RobTasks',2);
RegisterTask('myrob1',FirstRob);
end
.Наберем и запустим основную программу (сохранять ее в каком-либо файле не требуется):
uses
Robot, RobTasks;begin
Task('myrob1');
end
.Будет выведено следующее задание для Робота:
Добавим задание, в котором конфигурация поля случайна:
procedure
SecondRob;var
n,i: integer;begin
TaskText('Задание myrob2. Закрасить клетки под закрашенными');
n:=Random(4)+7;
Field(n,4);
RobotBeginEnd(1,3,n,3);
MarkPainted(n,2);
Tag(n,3);
for
i:=2 to n-1 doif
Random(3)=1 thenbegin
MarkPainted(i,2);
Tag(i,3);
end
;end
;