.
Создаем искусственный интеллект. Урок 7. Расширяем функционал класса TIIProblemSpace (пространство с
Автор megabax   
07.07.2010 г.
unit AIObj

Создаем искусственный интеллект. Урок 7. Расширяем функционал класса TIIProblemSpace (пространство состояний).

Сегодня мы начнем расширять функционал написанный на предыдущем уроке классов. Для начала добавим к классу TIIProblemSpace свойство Items, что бы иметь доступ к элементам списка состояний. Вот как теперь будет выглядеть объявление класса TIIProblemSpace:

TIIProblemSpace=class(TObject)
protected
   FEnter:TIIStateItem;
   FCurrentItem:TIIStateItem;
   FItems:TList;
   function GetItem(index:integer):TIIStateItem;
public
   property Enter:TIIStateItem read FEnter;
   property CurrentItem:TIIStateItem read FCurrentItem;
   property Items[index:integer]:TIIStateItem read GetItem;
   constructor Create;
   destructor Destory;
   procedure Add(Item:TIIProblemSpace);
   procedure Clear;
end;

Как видим, мы так же добавили метод GetItem, давайте реализуем его:

function TIIProblemSpace.GetItem(index:integer):TIIStateItem;
begin
    Result:=FItems[index];
end;

Напрашивается такая задача, как реализовать графическое представление пространства состояний, дабы потом легче было тестировать и отлаживать программу. Давайте подумаем, как это сделать. Для начала составим простенькую графическую модель, что бы мы могли ее быстро реализовать. Потом, в случае необходимости, доработаем ее. И так, вот как может выглядеть граф в нашей реализации:

Создаем искусственный интеллект. Урок 7. Расширяем функционал класса TIIProblemSpace (пространство состояний).

Как видим, вершины графа расположены друг под другом, что программно реализовать довольно таки просто. Для рисования дуг в Delphi так же средства. со стрелкой конечно, придется чуть повозиться, но, как говориться, глаза бояться руки делают. И так, давайте начнем с реализации рисования вершин. Пусть это будут у нас кругляшки. Для начала объявим в классе  TIIProblemSpace поля, которые будут отвечать за расположение первой вершины графа и за расстояние между вершинами.

FDistance:integer;
FLeft:integer;
FTop:integer;

Затем добавим в конструктор их инициализацию:

FDistance:=30;
FLeft:=50;
FTop:=30;;

Теперь реализуем метод рисования вершины графа:

procedure TIIProblemSpace.DrawTop(AImage:TImage; index:integer);
var x,y,dx,dy:integer;
begin
   x:=FLeft;
   y:=FTop+index*FDistance;
   dx:=10;
   dy:=10;
   AImage.Canvas.Ellipse(x,y,x+dx,y+dy);
end;

Вот, наконец то нас есть что протестировать. Кидаем на форму TImage*

Создаем искусственный интеллект. Урок 7. Расширяем функционал класса TIIProblemSpace (пространство состояний).

Присваиваем ей имя Image и пишем обработчик создания формы:

procedure TfrmII.FormCreate(Sender: TObject);
var PS:TIIProblemSpace;
begin
    PS:=TIIProblemSpace.Create;
    PS.DrawTop(Image,0);
    PS.DrawTop(Image,1);
    PS.DrawTop(Image,2);
    PS.DrawTop(Image,3);
end;

Запускаем на тестирование. Видим вот такую картинку:

Создаем искусственный интеллект. Урок 7. Расширяем функционал класса TIIProblemSpace (пространство состояний).

Значит, все работает правильно и на следующем уроке мы продолжим реализовывать рисование графа.

 


Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями  в соответствии со ст. 1274 ГК РФ программного продукта "Delphi", авторское право на который принадлежит "Borland Software Corporation".

Последнее обновление ( 29.10.2010 г. )