Программирование - это просто
Advertisement
Главная
19.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Создаем искусственный интеллект. Урок 7. Расширяем функционал класса TIIProblemSpace (пространство с Печать E-mail
Автор 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 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги