Генерация и решение кроссвордов "Судоку"

Разработка программного продукта на языке Delphi, предназначенного для решения японской головоломки "Судоку": ознакомление с правилами игры, выбор необходимых компонент, написание алгоритмов реализации задачи; описание пользовательского интерфейса.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 25.06.2011
Размер файла 3,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Челябинский Государственный Педагогический Университет

Кафедра информатики и методики преподавания информатики

Курсовая работа по программированию и программному обеспечению на тему:

ГЕНЕРАЦИЯ И РЕШЕНИЕ КРОССВОРДОВ "СУДОКУ"

Челябинск

Содержание

  • Введение
  • I. Описание программного продукта
    • Игра "СУДОКУ"
    • Пользовательский интерфейс
  • II. Реализация программного продукта
    • Общая схема форм
    • Описание алгоритма
  • Заключение
  • Список литературы

Введение

Родиной шахмат считается Индия, родиной футбола - Англия. У игры судоку (sudoku), быстро распространившейся по всему миру, родины как таковой нет. Прообразом судоку можно считать головоломку "Магический квадрат", которая появилась в Китае 2000 лет назад. Игра представляет собой квадрат размером 3?3 клетки. В каждую клетку помещается одно число от 1 до 9 причём так, чтобы сумма чисел в любом столбце, строке и по диагонали равнялась 15.

История судоку как игры восходит к имени знаменитого швейцарского математика, механика и физика Леонарда Эйлера (1707-1783). Исследуя различные варианты магического квадрата, Эйлер обратил внимание на проблему комбинации символов таким образом, чтобы не один из них не повторялся ни в одной строке и ни в одном столбце.

В современном виде головоломки судоку впервые были опубликованы в 1979 году в журнале Word Games magazine. Автором головоломки был Гарвард Гарис. Он использовал принцип латинского квадрата Эйлера, применил его в матрице размерностью 9?9 и добавил дополнительные ограничения, цифры не должны повторяться и во внутренних квадратах 3?3.

В названии Sudocu Su обозначает число, а doku-стоящая отдельно. Судоку называют кубиком Рубика 21 века, а также самой захватывающей головоломкой в мире.

Цель проекта: Разработать программное средство, реализующее генерацию и решение кроссвордов СУДОКУ.

Задачи проекта:

1) изучить литературу;

2)отобрать задачи судоку и разобрать алгоритм их решения;

3)отобрать компоненты и разобрать алгоритм для реализации программными средствами Delphi.

I. Описание программного продукта

Игра "СУДОКУ"

Судоку - это цифровая головоломка. В переводе с японского "су" означает "цифра", а "доку"- "стоящая отдельно". Не надо гадать или копаться в книгах - только логика и внимательность.

Правила простые: заполнить пустые клетки цифрами от 1 до 9 так, чтобы в любой строке, любом столбце и в каждом из девяти блоков 3?3 цифры не повторялись.

Пример решения:

Дана следующая головоломка, как показано на рисунке 1:

5

2

8

2

9

8

4

1

8

3

4

5

2

7

7

4

1

2

8

6

3

8

5

2

2

6

9

1

3

4

8

7

8

3

5

2

3

9

1

7

3

4

7

9

8

6

Рис. 1 Пример судоку 9?9

Шаг 1: Посмотрим на выделенный ряд. В нём не хватает только двух цифр: 5 и 9. Посмотрим на первую пустую клетку слева. Нельзя вписать 9, потому что в этой колонке цифра 9 уже есть, а повторяться цифры в колонке не могут. Значит, в эту клетку мы можем вписать лишь цифру 5. Теперь осталась вписать цифру 9 в последнюю пустую клетку чтобы этот ряд заполнился (рис. 2.).

Рис.2. Состояние судоку после первого шага

Шаг 2: Посмотрите на выделенную колонку: в ней не хватает всего двух цифр - 6 и 7. Цифру 6 мы не можем вписать в первую снизу клетку, потому что в пересекающем колонку ряду уже есть цифра 6. Впишем цифру 7. Цифру 6 впишем в оставшуюся клетку- вторая клетка снизу. Колонка заполнена(рис.3.).

Рис.3. Состояние судоку после второго шага

Шаг 3: Посмотрите на выделенный блок клеток: в нем осталась только одна пустая клетка. Впишем в неё цифру 1, так как все остальные цифры есть. После этого посмотрите: снова есть один ряд, в котором не хватает всего одной цифры (рис.4.).

Рис.4. Состояние судоку после третьего шага

Нужно повторять шаг1, шаг2, шаг3 пока все клетки не будут заполнены.

Если всё сделать правильно то получится (рис.5.).

Рис.5. Правильно решенный судоку

Пользовательский интерфейс

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

Рис.6. Форма

Выбрать уровень сложности можно в меню Игра > Уровень сложности "выпадет" подменю легкий, средний, сложный (рис.7.).

Рис.7. Выбор уровня

Уровень сложности определяется количеством пустых клеток в судоку.

При выборе легкого уровня появляется надпись "Вы выбрали уровень сложности легкий" Легкий уровень по умолчанию. (рис.8.).

Рис.8. Выбран легкий уровень

Аналогично, при выборе среднего уровня (рис.9.).

Рис.9. Выбран средний уровень

Аналогично, при выборе сложного уровня (рис.10.).

Рис.10. Выбран сложный уровень

При нажатии на кнопку "Генерация", появляется сам судоку (рис.12.).

Рис.11. Нажатие на кнопку "Генерация"

Можно решать судоку, ставить цифры в пустые ячейки от 1 до 9 (рис.12.).

Рис.12. Подстановка цифр

Проверку можно произвести, нажав на кнопку "Проверить" (рис.13.).

Рис.13. Проверка

При правильном решении судоку, появляется надпись "Молодец" (рис.14.).

Рис.14. Правильное решение судоку

При не правильном решении появится надпись "Попробуйте еще" (рис.15.).

Рис.15. Не правильное решение судоку

Для того, чтобы изменить размер шрифта, нужно зайти в меню Настройки >Шрифт и выберите мелкий, средний или крупный. По умолчанию стоит средний(рис.16.).

Рис.16. Изменение размера шрифта

Для того, чтобы сохранить игры, нужно зайти в меню Игра>запомнить (рис.17).

Рис.17. Сохранение игры

Открыть ранее сохраненную игру можно, если зайти в меню Игра>открыть (рис.18).

Рис.18. Открытие ранее сохраненной игры

Информация об авторе можно узнать в меню Помощь> Об авторе (рис.19.).

Рис.19. Информация об авторе

Правила игры можно узнать в меню Помощь> Об игре (рис.20.).

Рис.20. Правила игры

Для того, чтобы выйти из игры нужно зайти в меню Игра> Выход (рис.21.).

Рис.21.Выход из игры

II. Реализация программного продукта

Общая схема форм

Компоненты, размещенные на форме Form1 (рис.22.).

Рис.22. Компоненты, расположенные на Form1

1) Button1 - кнопка "Генерация" (для генерирования судоку);

2) Button2 - кнопка "Проверка" (для проверки решения);

3) Edit1 - для отображения выбранного уровня сложности;

4) Image1 - для отображения картинки (дизайн);

5) Label1 - отображение надписи "Вы выбрали уровень сложности";

6) Label2 -вывод результата проверки (или "Молодец" если правильно, или "Попробуй еще" если не правильно);

7) MainMenu1 - для меню;

8) OpenDialog1 - открытие ранее сохраненной игры;

9)Panel1 -панель, на которой размещаются динамически создаваемые Edit;

10) SaveDialog1 - для сохранения программы.

Компоненты, размещенные на форме AboutBox (рис.23.).

Рис.23. Компонент, расположенный на AboutBox

1) OKButton - кнопка для выхода из AboutBox;

2) Panel1 - панель, на которой размещена информация об авторе.

Компоненты, размещенные на форме AboutBox1 (рис.24.).

Рис.24. Компоненты, расположенные на AboutBox1

1) OKButton - кнопка для выхода из AboutBox1;

2)Panel1 - панель, на которой размещены правила игры.

Описание алгоритма

Цифровая головоломка судоку 9?9 состоит из 81 клеток, которые делятся на 9 блоков 3?3. В данной программе функции клеток будут выполнять Edit.

Для этого глобально опишем массив из Edit :

var

c9: array [1..81] of Tedit; //массив из Edit

c9o:string[81]; //строка, в которой хранятся ответы на судоку

filename:string; //имя файла, в котором хранятся судоку

ansfilename:string; // имя файла, в котором хранятся ответы на судоку из файла filename

f,g:TextFile; //текстовые файлы, в которых судоку

t:char;//символ из текстового файла

Еdit создаются динамически на панеле Panel1. Процедура Tform1.Ed_clean удаляет и заново создает Рanel1:

procedure TForm1.Ed_clean;

var

P:Tpanel; // панель

begin

Panel1.Free; // очищаем панель

P:=Tpanel.Create(self); // создаем "независимую панель"

p.Parent:=form1;

P.Width:=521; // задаем ширину

P.Height:=353; // задаем длину

p.Name:='Panel1';

p.Caption:='';

p.Top:=136; // задаем вершину

p.Left:=24; // отступ слева

end;

Процедура TForm1.NewGame создает Edit на панели:

procedure TForm1.NewGame;

var

i,j,n,l,k:byte;

begin

Ed_clean; // вызываем процедуру Tform1.Ed_clean, которая создает панель

n:=1; // счетчик

for i:=1 to 11 do // i - количество строк

for j:=1 to 11 do // j - количество столбцов

begin

if ((i<>4) and (j<>4)) and ((i<>8) and (j<>8))then

begin

c9[n]:=Tedit.Create(self); //создаем Edit

c9[n].Parent:=Panel1; // помещаем его на панель

c9[n].Width:=25; // ширина Edit

c9[n].Height:=25; // высота Edit

c9[n].Top:=i*25+5; // Вершина Edit

c9[n].Left:=j*25+5; // Отступ Tdit

c9[n].Text:=''; // Edit пустой

c9[n].OnKeyPress:=myKP9; // в них можно только вводить от "0" до "9"

n:=n+1; // прибавляем счетчик

end; end;

end;

Для того, чтобы ограничить ввод символов, существует процедура Tform1.myKP9:

procedure Tform1.myKP9(Sender: TObject; var Key: Char);

begin

If not (Key in ['0'..'9']) then Key:='0'; // если ввели цифры, отличные от множества 0..9, значение присваиваем "0"

if ((Sender as Tedit).Tag)<>1 then

(Sender as Tedit).Text:=Key; // присваиваем значению нажатой кнопки

Key:=#0;

end;

Начать новую игру инициирует процедура TForm1.Button1Click, которая запускается щелчком на кнопке Генерация.

procedure TForm1.Button1Click(Sender: TObject);

var

i:byte;

buf:string;

begin

randomize; // запускается генератор случайных чисел

NewGame; // вызывается процедура TForm1.NewGame, которая создает Edit на панели

buf:=IntToStr(random(9)+1); // случайное число от 1 до 10

If Edit1.Text='' then Edit1.Text:='легкий'; // по умолчанию уровень сложности легкий.

if Edit1.Text='легкий' then Если уровень сложности легкий

begin

filename:='eas/'+buf+'.txt'; // переменной присваиваем путь к файлу с судоку

ansfilename:='eas/ans/'+buf+'.txt'; // переменной присваиваем путь к файлу с ответами к судоку

end;

if Edit1.Text='средний' then

begin

filename:='sred/'+buf+'.txt'; // переменной присваиваем путь к файлу с судоку

ansfilename:='sred/ans/'+buf+'.txt'; // переменной присваиваем путь к файлу с ответами к судоку

end;

if Edit1.Text='сложный' then

begin

filename:='hard/'+buf+'.txt'; // переменной присваиваем путь к файлу с судоку

ansfilename:='hard/ans/'+buf+'.txt'; // переменной присваиваем путь к файлу с ответами к судоку

end;

AssignFile(f,filename); // связываем

reset(f); // открываем файл

i:=1;

while not EOF(f) do // пока не конец файла

begin

read(f,t); // считываем их файла f t

if (t<>#13) and (t<>#10) then // если не Enter и не признак конца строки

begin

c9[i].Text:=t; // присваиваем элементу массива (Edit) значение t

if t<>'0' then c9[i].Tag:=1

else c9[i].Tag:=0;

i:=i+1;

end;

end;

CloseFile(f);

for i:=1 to 81 do

if c9[i].Text='0' then

c9[i].Text:='';

AssignFile(g,ansfilename);

reset(g);

c9o:= '';

while not EOF(g) do

begin

readln(g,buf);

c9o:=c9o+buf;

end;

CloseFile(g);

end;

Проверку решения инициирует процедура TForm1.Button2Click, которая запускается щелчком на кнопке Проверка.

procedure TForm1.Button2Click(Sender: TObject);

var

ok:boolean;

i:byte;

begin

ok:=true;

for i:=1 to 81 do

if c9[i].Text<>c9o[i] then // сравнивает значение Edit со значением ответов

begin

ok:=false;

c9[i].Text:=''; // если ОК , тогда Edit =" "

end;

if ok then

Label2.caption:='Молодец'

else

Label2.caption:='Попробуйте ещё';

end;

Заключение

головоломка судоку алгоритм интерфейс

В ходе работы удалось реализовать все поставленные задачи и прийти к достойному решению. Литература изучена, отобраны задачи судоку и разобран алгоритм их решения, отобраны компоненты и разобран алгоритм для реализации программными средствами Delphi. Удалось создать программный продукт, являющийся красивым решением задачи, поставленной для выполнения данной курсовой работы. Работа может служить исходным материалом для последующей модернизации и совершенствования цифровой головоломки судоку.

Список литературы

1. Архангельский А.Я. "Программирование в Delphi 5 - 2-е изд., переработ. и дополн.", "Издательство БИНОМ", 2000г. -1072 с.;

2. Журнал "СУДОКУ" спецвыпуск газеты "Япончик" №5 февраль, "Нижполиграф": 2008 г. - 48с.;

3. Журнал "СУДОКУ" спецвыпуск газеты "Япончик" №9 март, "Нижполиграф": 2008 г. - 48 с.;

4. Википедия - "http://ru.wikipedia.org/wiki/%D0%A1%D1%83%D0%B4%D0%BE%D0%BA%D1%83";

Размещено на Allbest.ru


Подобные документы

  • История распространения "Судоку". Механизм решения и различия по уровню сложности в зависимости от размера квадрата данной головоломки. Освоение процесса создания программного продукта на Microsoft .NET Framework на языке C# на примере игры "Судоку".

    курсовая работа [398,8 K], добавлен 21.10.2011

  • История судоку, правила игры и цель головоломки. Разработка диаграммы классов. Реализация программы в объектно-ориентированном стиле по принципам модульности, иерархичности, ограничения доступа. Алгоритм генерации случайного игрового поля судоку.

    курсовая работа [315,9 K], добавлен 01.02.2013

  • Разработка и реализация демонстрационного многопоточного приложения. Выбор основных средств реализации. Описание логики работы приложения и разработка программного обеспечения. Описание пользовательского интерфейса. Реализация потоков в Delphi.

    курсовая работа [462,5 K], добавлен 10.08.2014

  • Разработка программы создания заметок в любом месте компьютера. Выбор технологии, языка и среды разработки приложения. Описание основных алгоритмов работы программного обеспечения. Проектирование пользовательского интерфейса. Выбор стратегии тестирования.

    отчет по практике [700,5 K], добавлен 24.11.2014

  • Анализ целевой аудитории. Функциональные характеристики пользовательского приложения. Разработка алгоритмов и интерфейса программного продукта, функций рабочей области. Написание скриптов на языке C#. Тестирование программы методом чёрного ящика.

    дипломная работа [1,5 M], добавлен 09.11.2016

  • Входные и выходные данные программы. Выбор языка программирования. Рабочая среда Delphi 7. Правила игры "Кости". Разработка пользовательского интерфейса. Экономическое обоснование программного продукта. Расчет расходов на содержание и эксплуатацию.

    дипломная работа [960,6 K], добавлен 07.02.2016

  • Особенности алгоритмов, критерии качества. Создание и применение программного продукта на языке Delphi. Тип операционной системы. Внутренняя структура программного продукта. Руководство пользователя и программиста, расчет себестоимости и цены программы.

    дипломная работа [1,5 M], добавлен 12.06.2009

  • Разработка программного продукта на языке Delphi 7.0. Матричный метод решения однородных и неоднородных систем линейных уравнений. Разработка интерфейса. Тестирование и описание объектов программы. Описание процесса вычисления определителей матриц.

    курсовая работа [366,1 K], добавлен 04.02.2015

  • Сущность симплекс-метода. Общая характеристика задачи о смесях. Разработка основных алгоритмов решения задачи. Решение задачи в среде визуального программирования Delphi. Проектирование интерфейса пользователя. Разработка форм ввода-вывода информации.

    курсовая работа [476,6 K], добавлен 22.05.2012

  • Общее описание разрабатываемого программного обеспечения, требования к его функциональности и сферы практического применения. Выбор инструментальных средств разработки. Проектирование структур баз данных и алгоритмов, пользовательского интерфейса.

    дипломная работа [3,1 M], добавлен 19.01.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.