Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа на Delphi.pdf
Скачиваний:
60
Добавлен:
27.05.2015
Размер:
961.42 Кб
Скачать

Cells : array[1..10,1..10] of TBall;

constructor Create(NewColor : TColor; NewCanvas : Tcanvas;

 

 

NewSize : integer);

end;

 

 

где: Size

-

размер клетки;

Canvas -

ссылка на реальную поверхность рисования;

Color

-

цвет фона области рисования;

Cells

-

массив, описывающий текущее состояние клеток области отоб-

 

 

ражения. Если элемент массива равен nil, то клетка свободна. В

 

 

противном случае элемент массива указывает на шар, располо-

 

 

женный в клетке.

Метод constructor Create служит для создания области отображения. В ходе создания производится установка признака «свободна» для каждой клетки и фактическая отрисовка области отображения.

constructor TTable.Create; var

i,j : integer; begin

Color := NewColor;

Size := Newsize; Canvas := NewCanvas; for i := 1 to 10 do

for j := 1 to 10 do Cells[i,j] := nil;

Canvas.Pen.Color := clBlack; Canvas.Brush.Color := Color; Canvas.Rectangle(0,0,Size*10,Size*10); for i := 1 to 9 do

begin Canvas.MoveTo(i*Size,0);

Canvas.LineTo(i*Size,Size*10);

Canvas.MoveTo(0,i*Size);

Canvas.LineTo(Size*10,i*Size);

end;

end;

2.3 Выделение перечня наиболее важных структур данных

Наиболее важными при работе являются экземпляр класса TTable, а также список Balls, хранящий информацию о всех экземплярах класса TBall, используемых в текущий момент. Оба объекта создаются в момент загрузки программы. Можно также отметить счетчик Count, служащий для присвоения добавляемому шару уникального номера, и переменную Current, хранящую информацию о шаре, который должен двигаться на следующем шаге.

10

2.4 Построение алгоритма реализации

При работе программы может возникнуть четыре основных события: добавление, удаление и перемещение шара, а также редактирование его свойств. Рассмотрим алгоритм перемещения шара, который выполняется при каждом срабатывании таймера.

procedure TMainForm.Timer1Timer(Sender: TObject); var

TempBall : TBall; begin

{Перемещение возможно только в случае, если у нас имеется

хотя бы один шар}

if Balls.Count>0 then begin

{Получаем шар, который должен быть перемещен. При этом используется общий список шаров и индекс текущего шара}

TempBall := TBall(Balls.Items[Current-1]);

{Производим перемещение шара}

TempBall.Move;

{Устанавливаем индекс следующего перемещаемого шара. Если при этом производится достижение конца списка, то возвращаемся в его начало}

inc(Current);

if Current>Balls.Count then Current := 1;

end;

end;

Также следует отметить распознавание ошибочных ситуаций в диалоговом окне работы с шариком, которое производится в момент попытки закрытия формы:

procedure TAddChangeForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

var

R : integer; begin

if ModalResult=mrOk then try

R := StrToInt(RadiusEdit.Text); if (R>MaxRadius) or (R<10) then

raise Exception.Create('Радиус должен быть в диапазоне

10..'+IntToStr(MaxRadius));

except

on E:EConvertError do begin

CanClose := False;

ShowMessage('Радиус должен быть целым числом'); end;

11

on E:Exception do begin

CanClose := False; ShowMessage(E.Message);

end;

end;

end;

Для хранения значения максимально возможного радиуса используется поле формы MaxRadius.

2.5 Обоснование выбора визуальных компонентов

Для отображения текущего состояния программы и управления ее поведением нам воспользуемся следующими компонентами:

компонент класса TListBox для отображения текущего списка шаров, обеспечивающий также выбор шара для удаления или редактирования. Для данной задачи наиболее удобен (по сравнению с такими компонентами отображения, как компоненты классов TMemo, TRadioGroup), поскольку совмещает в себе как свойства отображения, так и свойства выбора, занимая при этом фиксированный размер на экране независимо от количества отображаемых элементов. Вместо компонента класса TListBox возможным было также использование компонента класса TStringGrid;

компоненты класса TButton для активизации действий по удалению, добавлению шара и редактированию его свойств. Данные компоненты являются наиболее простыми и часто используемыми для выполнения действий подобного рода;

компонент класса TImage используется как поверхность для графического отображения задачи. По сравнению с компонентами, также имеющими поверхность рисования (например, сама форма) не требует описания полного отображения текущего состояния задачи, а самостоятельно сохраняет все изменения, вносимые в ходе работы программы.

2.6 Структура диалогов

Структура диалогов приведена на рисунке 1. Диалоговые окна «Добавление шара» () и «Редактирование шара» () физически являются одной и той же формой, поэтому их поведение одинаково. При работе с данной формой требуется ввод радиуса шара и установка его цвета. Для установки цвета используется стандартный диалог выбора цвета (). При вводе радиуса может произойти ошибка одного из двух типов:

12

1

1

2

3

2

3

4

5

6

Рисунок 1 – Структура диалогов программы, лист 1

13

7

1

2

3

8

9

Рисунок 1, лист 2

14