Генерация и решение кроссвордов "Судоку"
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
решении появится надпись "Попробуйте еще" (рис.15.).
Рис.15. Не правильное решение судоку
Для того, чтобы изменить размер шрифта, нужно зайти в меню Настройки >Шрифт и выберите мелкий, средний или крупный. По умолчанию стоит средний(рис.16.).
Рис.16. Изменение размера шрифта
Для того, чтобы сохранить игры, нужно зайти в меню Игра>запомнить (рис.17).
Рис.17. Сохранение игры
Открыть ранее сохраненную игру можно, если зайти в меню Игра>открыть (рис.18).
Рис.18. Открытие ранее сохраненной игры
Информация об авторе можно узнать в меню Помощь> Об авторе (рис.19.).
Рис.19. Информация об авторе
Правила игры можно узнать в меню Помощь> Об игре (рис.20.).
Рис.20. Правила игры
Для того, чтобы выйти из игры нужно зайти в меню Игра> Выход (рис.21.).
Рис.21.Выход из игры
II. Реализация программного продукта
Общая схема форм
Компоненты, размещенные на форме Form1 (рис.22.).
Рис.22. Компоненты, расположенные на Form1
) Button1 - кнопка "Генерация" (для генерирования судоку);
) Button2 - кнопка "Проверка" (для проверки решения);
3) Edit1 - для отображения выбранного уровня сложности;
) Image1 - для отображения картинки (дизайн);
) Label1 - отображение надписи "Вы выбрали уровень сложности";
) Label2 -вывод результата проверки (или "Молодец" если правильно, или "Попробуй еще" если не правильно);
7) MainMenu1 - для меню;
8) OpenDialog1 - открытие ранее сохраненной игры;
)Panel1 -панель, на которой размещаются динамически создаваемые Edit;
) SaveDialog1 - для сохранения программы.
Компоненты, размещенные на форме AboutBox (рис.23.).
Рис.23. Компонент, расположенный на AboutBox
) OKButton - кнопка для выхода из AboutBox;
) Panel1 - панель, на которой размещена информация об авторе.
Компоненты, размещенные на форме AboutBox1 (рис.24.).
Рис.24. Компоненты, расположенные на AboutBox1
1) OKButton - кнопка для выхода из AboutBox1;
)Panel1 - панель, на которой размещены правила игры.
Описание алгоритма
Цифровая головоломка судоку 99 состоит из 81 клеток, которые делятся на 9 блоков 33. В данной программе функции клеток будут выполнять Edit.
Для этого глобально опишем массив из Edit :
: array [1..81] of Tedit; //массив из Edit9o:string[81]; //строка, в которой хранятся ответы на судоку
filename:string; //имя файла, в котором хранятся судоку
ansfilename:string; // имя файла, в котором хранятся ответы на судоку из файла filename,g:TextFile; //текстовые файлы, в которых судоку:char;//символ из текстового файла
Еdit создаются динамически на панеле Panel1. Процедура Tform1.Ed_clean удаляет и заново создает Рanel1:
TForm1.Ed_clean;:Tpanel; // панель
begin.Free; // очищаем панель:=Tpanel.Create(self); // создаем "независимую панель".Parent:=form1;.Width:=521; // задаем ширину.Height:=353; // задаем длину.Name:='Panel1';.Caption:='';.Top:=136; // задаем вершину.Left:=24; // отступ слева;
Процедура TForm1.NewGame создает Edit на панели:
TForm1.NewGame;,j,n,l,k:byte;
Ed_clean; // вызываем процедуру Tform1.Ed_clean, которая создает панель
n:=1; // счетчикi:=1 to 11 do // i - количество строк j:=1 to 11 do // j - количество столбцов
begin((i8))then[n]:=Tedit.Create(self); //создаем Edit9[n].Parent:=Panel1; // помещаем его на панель
c9[n].Width:=25; // ширина Edit[n].Height:=25; // высота Edit[n].Top:=i*25+5; // Вершина Edit[n].Left:=j*25+5; // Отступ Tdit[n].Text:=''; // Edit пустой9[n].OnKeyPress:=myKP9; // в них можно только вводить от "0" до "9"
n:=n+1; // прибавляем счетчик; end;;
Для того, чтобы ограничить ввод символов, существует процедура Tform1.myKP9:
Tform1.myKP9(Sender: TObject; var Key: Char); not (Key in ['0'..'9']) then Key:='0'; // если ввели цифры, отличные от множества 0..9, значение присваиваем "0"
if ((Sender as Tedit).Tag)<>1 then
(Sender as Tedit).Text:=Key; // присваиваем значению нажатой кнопки:=#0;;
Начать новую игру инициирует процедура TForm1.Button1Click, которая запускается щелчком на кнопке Генерация.
TForm1.Button1Click(Sender: TObject);:byte;:string;; // запускается генератор случайных чисел
NewGame; // вызывается процедура TForm1.NewGame, которая создает Edit на панели
buf:=IntToStr(random(9)+1); // случайное число от 1 до 10
If Edit1.Text='' then Edit1.Text:='легкий'; // по умолчанию уровень сложности легкий.
if Edit1.Text='легкий' then Если уровень сложности легкий
begin:='eas/'+buf+'.txt'; // переменной присваиваем путь к файлу с судоку
ansfilename:='eas/ans/'+buf+'.txt'; // переменной присваиваем путь к файлу с ответами к судоку
end;Edit1.Text='средний' then:='sred/'+buf+'.txt'; // переменной присваиваем путь к файлу с судоку
ansfilename:='sred/ans/'+buf+'.txt'; // переменной присваиваем путь к файлу с ответами к судоку
end;Edit1.Text='сложный' then:='hard/'+buf+'.txt'; // переменной присваиваем путь к файлу с судоку
ansfilename:='hard/ans/'+buf+'.txt'; // переменной присваиваем путь к файлу с ответами к судоку
end;(f,filename); // связываем(f); // открываем файл:=1; not EOF(f) do // пока не конец файла
begin(f,t); // считываем их файла f t
if (t#10) then // если не Enter и не признак конца строки
c9[i].Text:=t; // присваиваем элементу массива (Edit) значение t
if t<>'0' then c9[i].Tag:=1c9[i].Tag:=0;:=i+1;;;(f);i:=1 to 81 doc9[i].Text='0' then[i].Text:='';(g,ansfilename);(g);o:= '';not EOF(g) do(g,buf);o:=c9o+buf;
end;(g);;
Проверку решения инициирует процедура TForm1.Button2Click, которая запускается щелчком на кнопке Проверка.
TForm1.Button2Click(Sender: TObject);:boolean;:byte;:=true;i:=1 to 81 do c9[i].Text<>c9o[i] then // сравнивает значение Edit со значением ответов
begin:=false;[i].Text:=''; // если ОК , тогда Edit =" ";ok then.caption:='Молодец'.caption:='Попробуйте ещё';
end;
Заключение
головоломка судоку алгоритм интерфейс
В ходе работы удалось реализовать все поставленные задачи и прийти к