- •1 Задачи курсовой работы и требования к её выполнению
- •1.1 Требования, предъявляемые к программной реализации
- •1.2 Требования, предъявляемые к пояснительной записке
- •2 Пример выполнения курсовой работы
- •2.1 Постановка задачи
- •2.2 Выделение классов
- •2.3 Выделение перечня наиболее важных структур данных
- •2.4 Построение алгоритма реализации
- •2.5 Обоснование выбора визуальных компонентов
- •2.6 Структура диалогов
- •2.7 Инструкция по использованию программы
- •3 Варианты заданий курсовой работы
- •Список литературы
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