-
Notifications
You must be signed in to change notification settings - Fork 0
Глава 2. Проектирование системы игры «Судоку»
В данной главе будут рассмотрены вопросы того, как будет реализован алгоритм генерации полей судоку, алгоритм хранения и показа статистических данных. Так же в этой главе будет рассмотрено каждое игровое окно.
Для того чтобы игра имела хорошо проработанные вопросы usability, необходимо отработать интерфейс приложения – сделать его интуитивно понятным. В данном разделе будет рассмотрена каждое окно приложения.
Когда пользователь заходит в игру, первое что его встречает – это главное меню. В данном окне должно быть все интуитивно понятно, чтобы пользователь не запутался, что ему делать. Посередине экрана должна находиться большая кнопка «Играть», при нажатии на которую откроется новое окно, в котором и будет реализован процесс решения головоломки. Чуть ниже кнопки «Играть», пользователь может выбрать уровень сложности: один кулак – легкий уровень, два кулака – нормальный уровень и три кулака – сложный. Игрок не будет знать, сколько клеток ему будет скрыто, а сколько показано. Посередине экрана, необходимо поместить кнопку перехода к статистическим данным. В правом вернем углу, должна быть иконка информации, при нажатии на которую, появиться диалоговое окно, в котором пользователь сможет получить всю информацию о том, как начать игру, выбрать уровень сложности и узнать о своем прогрессе.
В данном окне будет представлена вся собранная информация о последних восьми играх, сыгранных пользователем. Основную часть экрана будет занимать таблица размером пять на девять клеток. В первой строке таблицы будут заголовки статистических данных: номер игры, сложность, затраченное время, количество совершенных ошибок и дата игры. В остальных строках будет информация о каждой из игр. Если пользователь не сыграл ни одну игру, то таблица остается пустой. Так же в данном окне в левом верхнем углу необходимо добавить кнопку возращения назад, при нажатии на которую пользователь сможет вернуться обратно в главное меню.
Данное окно является наиболее важным, так как основной процесс приложения будет происходить именно здесь. Основную часть экрана будет занимать игровое поле, в котором будут отображены пустые и заполненные клетки. Изначально пустые поля будут являться некликабельными, но при нажатии на одну из пустых клеток будет выделяться выбранный «маленький квадрат», строка и столбец. Правее от игрового поля необходимо добавить кнопки выбора цифры от одного до девяти. Так же необходимо добавить кнопку «пустого» ответа, для того, чтобы пользователь мог менять свой ответ или исправить ошибку. Над кнопками выбора ответа следует расположить таймер для отсчета времени от начала игры. Он необходим для того, чтобы игрок смог отслеживать время, проведенное за решением головоломки. Ниже кнопок выбора ответа необходимо добавить кнопки «Проверить» и «Быстрая проверка решений». При нажатии на них, пользователь сможет сразу проверить свои ответы или проверять их по мере заполнения пустых клеток. Посередине экрана сверху необходимо расположить значок уровня сложности: легкий уровень, нормальный уровень и сложный уровнь.
Быстрая проверка прогресса, это функция приложения, которая необходима для того, чтобы пользователь мог сразу отслеживать свои решения. Пользователь может включать и выключать данную функцию. Если данная функция включена, при выборе правильно ответа поле, в которое была вставлена цифра, будет загораться зеленым цветом, при неправильном выборе – красным. Если пользователь ошибся и удалил свой ответ, клетка теряет цвет и становиться прозрачной.
Как уже было сказано, статистические данные играют важную роль в качестве всего проекта. После каждой завершенной игры программа будет создавать пять текстовых файлов (если еще не были созданы): static_date, static_level, static_minute, static_second, static_mistake. В каждый текстовый документ будет записываться день, в который была совершенна игра, уровень сложности, количество затраченных минут, секунд и ошибок соответственно. Когда пользователь захочет посмотреть на свои статистические данные, из всех выше перечисленных файлов будет выгружаться вся нужная информация и отображаться в таблицу, которая была описана в разделе 2.1.2.
Алгоритм генерации клеток судоку – это очень важная часть всего проекта. Как уже говорилось выше, необходимо сделать так, чтобы программа выдавала каждый раз новую головоломку, которая отличается от предыдущих вариантов. Алгоритм, который описан ниже, поможет реализовать это. Первым шагом данного алгоритма будет создание базовой сетки судоку, которая должна подчиняться правилам головоломки: в строке, столбце и «маленьком» квадрате должны быть все цифры от одного до девяти. Для того чтобы это реализовать необходимо разместить в первую строку цифры от одного до девяти, затем, в следующей строке сместить цифры на три позиции, то есть во второй строке должны разместиться цифры 4,5,6,7,8,9,1,2,3. В итоге должна получиться сетка, которая изображена на рисунке 1.
Рисунок 1. Сетка Судоку, которая подчиняется правилам головоломки После того, как сетка головоломки готова необходимо перетасовать всю сетку. Для этого необходимо сделать следующие действия:
- транспонировать таблицу (столбцы становятся строками, а строки – столбцами) – рисунок 2;
- произвести обмен двух строк в пределах одного района (одним районом являются три «маленьких квадрата» по горизонтали или вертикали) – рисунок 3;
- произвести обмен двух столбцов в пределах одного района – рисунок 3;
- произвести обмен двух районов по вертикали – рисунок 4;
- произвести обмен двух районов по горизонтали – рисунок 4. Данные действия следует произвести несколько раз. В результате, получиться сетка, которая отличается от изначальной, но которая подчиняется правилам судоку.
Рисунок 2. Сетка Судоку, после транспонирования
Рисунок 3. Обмен двух строк и столбцов в пределах одного района
Рисунок 4. Обмен двух строк районов по вертикали и горизонтали
Когда создана сетка, необходимо удалить ненужные клетки в зависимости от уровня сложности. Для этого следует использовать случайный подход: программа будет выбирать клетку и решать удалять ли цифру в ней или нет. О том, сколько необходимо убрать клеток для каждого из уровней сложности, описано в разделе 1.3.