
- •Глава 1. Проектирование программы
- •1.1 Разработка внутренних структур данных и определение пользовательского интерфейса программного приложения
- •1.2 Выбор технологии, языка и среды программирования
- •1.3 Проектирование структуры программы и взаимодействия модулей
- •Глава 2. Описание и функциональные возможности программы
- •2.1 Особенности построения и работы алгоритма
- •Глава 3. Тестирование
- •3.1 Выбор стратегии тестирования и разработка тестов
- •5. Требования к программной документации
- •6. Технико-экономические показатели
- •7. Стадии и этапы разработки
- •8. Порядок контроля и приемки
Глава 2. Описание и функциональные возможности программы
2.1 Особенности построения и работы алгоритма
В разрабатываемом программном приложении мы использовали:
Класс TForm — это важнейший компонент Delphi, на котором основана вся работа этой системы по проектированию и разработке приложений. Форма (Класс TForm) содержит обширный набор свойств, методов и событий, позволяющих легко настраивать и организовывать самые сложные алгоритмы ее функционирования. Все свойства описаны в инспекторе объектов.
TGroupBox – группа элементов. Этот компонент используется для группировки нескольких связанных по смыслу компонентов.
TCheckBox - независимый переключатель. Щелчок мышью на этом компоненте в работающей программе изменяет его логическое свойство Checked.
TComboBox – комбинированный список. Комбинированный, или раскрывающийся, список TComboBox представляет собой комбинацию списка TListBox и текстового поля TEdit, и поэтому большая часть его свойств и методов заимствованы у этих компонентов.
TRadioGroup - группа зависимых переключателей. Содержит специальные свойства для обслуживания нескольких связанных зависимых переключателей.
TButton – кнопка. Компоненты TButton широко используются для управления программами
После запуска программы перед пользователем появляется основная форма с семью кнопками «новая игра», «решить», «сохранить», «загрузить», «применить», «выход» и «уровень», реализованные с помощью TButton.
При запуске программы появляется форма, изображенная на (Рис.3).
Рис.3 Основная форма
В качестве основных алгоритмов рассмотрим следующие примеры.
Изменение цвета фона
procedure TForm1.RadioGroup1Click(Sender: TObject); { выбор цвета фона формы }
begin
If RadioGroup1.ItemIndex=0 {если выбран первый элемент}
Then Form1.Color:=clSilver; {то меняем цвет на серый}
If RadioGroup1.ItemIndex=1{если второй элемент}
Then Form1.Color:=clWhite; {то меняем цвет фона на белый}
If RadioGroup1.ItemIndex=2{если третий элемент}
Then Form1.Color:=clLime; {то меняем цвет на зеленый}
end;
Изменение цвета текста, кроме цвета текста кнопок
procedure TForm1.Button6Click(Sender: TObject); {выбор цвета текста формы}
begin
If RadioButton1.Checked{если выбрано первое значение в поле «Цвет текста»}
Then begin
Form1.Font.Color:=clBlack; {изменяем цвет текста у формы на черный}
Form1.RadioGroup1.Font.Color:=clBlack; {изменяем цвет текста поля «Цвет фона» на черный}
grpAns.Font.Color:=clBlack; {изменяем цвет текста поля «Решения» на черный}
cmbMode.Font.Color:=clBlack;{изменяем цвет текста выпадающего меню «Исходное» на черный}
end;
If RadioButton2.Checked{если выбрано второе значение в поле «Цвет текста»}
Then begin
Form1.Font.Color:=clRed; {изменяем цвет текста формы на красный}
RadioGroup1.Font.Color:=clRed; {изменяем цвет текста поля «Цвет фона» на красный}
grpAns.Font.Color:=clRed; {изменяем цвет текста у поля «Решения» на красный}
cmbMode.Font.Color:=clRed; {изменяем цвет текста у выпадающего списка «исходное» на красное}
end;
If RadioButton3.Checked{если выбран третий элемент поля «Цвет текста»}
Then begin
Form1.Font.Color:=clBlue; {изменяем цвет текста формы на синий}
RadioGroup1.Font.Color:=clBlue; {изменяем цвет текста поля «Цвет фона» на синий}
grpAns.Font.Color:=clBlue; {изменяем цвет текста поля «Решения» на синий}
cmbMode.Font.Color:=clBlue; {изменяем цвет текста выпадающего списка «исходное» на синий}
end;
end;
Рисуем поле 9х9 элементов
procedure TForm1.FormPaint(Sender: TObject); {рисуем поле для судоку}
begin
Canvas.Pen.Width:=3;{толщина линий контура равная 3}
Canvas.MoveTo(2,2); {двигаем перо к точке с координатами 2,2}
Canvas.LineTo(272,2); {рисует линию из координат 2,2 в 272,2}
Canvas.LineTo(272,266); {рисует линию из координат 272,2 в 272,266}
Canvas.LineTo(2,266); {рисует линию из координат 272,266 в 2,266}
Canvas.LineTo(2,2); {рисует линию из координат 2,266 в 2,2}
Canvas.Pen.Width:=2; {толщина линий пера равное 2}
Canvas.MoveTo(2,88+2); {двигает перо к точке с координатами 2,88 увеличивая их на 2}
Canvas.LineTo(272,88+2); {рисует линию из координат 2,88 увеличенный на два в 272,88 увеличенных на два}
Canvas.MoveTo(2,88*2+2); {рисует линию из координат 272,88 увеличенных на два в 2,88 увеличенных в два раза и затем на два раза}
Canvas.LineTo(272,88*2+2); {аналогично выше описанным действиям}
Canvas.MoveTo(90+2,2); {аналогично выше описанным действиям}
Canvas.LineTo(90+2,266); {аналогично выше описанным действиям}
Canvas.MoveTo(90*2+2,2); {аналогично выше описанным действиям}
Canvas.LineTo(90*2+2,266); {аналогично выше описанным действиям}
end;
Ввод значений в ячейки с клавиатуры
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
var
ci:integer;
ix,iy:integer;
CEdit:TEdit;
begin
for iy:=1 to 9 do
for ix:=1 to 9 do
if Sender is TEdit then {определяем у какого элемента произошло событие, переходим на следующий}
if (Sender as TEdit)=CEdits[ix,iy] then
CEdit:=CEdits[ix,iy];
if (Sender as TEdit)=CEdits[9,9] then
Exit;
if Pos(Key,'0123456789'#8) = 0 then{если пользователь ввел не цифру и не backspace, не пропускаем}
Key:= #0;
if Key <> #8 then begin{если ввел не backspace то переходим на следующий}
ci:=CEdit.ComponentIndex;
(self.Components[ci+1] as TEdit).SetFocus;
end; // if
end;
Формирование «sudoku 9x9»
procedure TForm1.Button5Click(Sender: TObject);
var ix,iy,s:integer;
level:Textfile;
masfile:string;
begin
assignfile(level,'lev1.txt'); {чтение значений ячеек из файла (в данном примере для уровня 1)}
reset(level);
for iy := 1 to 9 do {формирование строки}
begin
readln(level,masfile);
for ix:=1 to 9 do {формирование столбца}
if masfile[ix]='#' then CEdits[ix,iy].Text:='' else CEdits[ix,iy].Text:=masfile[ix];
{проверка в файле если встречается символ «#» то ячейка заполняется как пустая}
end;
closefile(level);
Form3.Close;{закрывает форму выбора уровня}
newgame:=1;
end;
После нажатия на кнопку «уровень» появляется форма выбора уровня (Рис.4).
Рис.4 Окно выбора уровня игры
После выбора уровня сложности появляется панель, изображенная на (Рис.5)
Рис.5 Окно игры
Проверка заполненных чисел.
procedure TForm1.Button1Click(Sender: TObject);//решаем судоку автоматически
var
i:integer;
l:integer;
begin
ans:=nil;
ReadInSud;
if not IsValidSudoku(sud) then begin
ShowMessage('Повторение в исходном');
Exit;
end; // if
if grpAns.ItemIndex = 0 then
mlen:=1
else
mlen:=1000;
DoRec(sud);
l:=length(ans);
showmessage('Решений: '+IntToStr(l));
cmbMode.Clear;
cmbMode.Items.Add('Исходное');
for i:=1 to l do
cmbMode.Items.Add('Решение '+IntToStr(i));
cmbMode.ItemIndex:=0;
end;