Читаем Описание языка PascalABC.NET полностью

Модуль RobotTaskMaker

Типы модуля RobotTaskMaker

type 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, в которой реализовано данное задание. Данную процедуру следует вызывать для каждого задания. Подобно описанной выше процедуре RegisterGroup, процедура RegisterTask должна вызываться в секции инициализации модуля, содержащего реализацию новой группы заданий для Робота. Порядок вызова этих процедур может быть произвольным.

Создание заданий для исполнителя Робот

Опишем последовательность создания группы заданий для исполнителя Робот. Создадим модуль 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 do

if Random(3)=1 then

begin

MarkPainted(i,2);

Tag(i,3);

end;

end;

Перейти на страницу:

Похожие книги

Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных