ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
Рекомендовать документы
ˇ ENI’ TECHNICKE’ V BRNOˇ ВЫСОКЕ’ UC BRNO ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ
ˇ ИХ ТЕХНОЛОГИЯ’ ФАКУЛЬТЕТ ИНФОРМАЦИИ ˇ «ИТАК ˇ ОВЕ’ ГРАФИКА И МУЛЬТИМЕДИА» ´ СТАТУС ТОЦ НА ФАКУЛЬТЕТЕ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ КАФЕДРА КОМПЬЮТЕРНОЙ ГРАФИКИ И МУЛЬТИМЕДИА
ˇ ´IZˇOVEK ´ TOR KR GENERA CROSSWORD GENERATOR
ˇ SKA´ PRA´CE ´R BAKALA BACHELOR’S THESIS
ГЛАВНЫЙ РУКОВОДИТЕЛЬ
Инж. РУДОЛЬФ КАЯН,
Аннотация Эта бакалаврская работа посвящена разработке веб-приложения для создания шведских кроссвордов. Здесь описана и объяснена технология Silverlight от Microsoft, в которой разработано приложение, дизайн пользовательского интерфейса и реализация генератора. Полученное приложение может быть запущено в веб-браузере и позволяет пользователю создавать новые кроссворды из шаблона, например газеты, или генерировать их (почти без участия пользователя). Решения, удаления и различные типы подсказок являются частью приложения.
Аннотация Эта бакалаврская работа посвящена разработке веб-приложения для шведского генератора кроссвордов. Описана и объяснена технология Microsoft Silverlight, в которой разработано приложение, концепция пользовательского интерфейса и реализация генератора кроссвордов. Окончательное приложение может запускаться в веб-браузере и позволяет создавать новый кроссворд из копии, например, газеты или непосредственно генерировать (почти без участия пользователя). Решение, удаление и другие виды помощи также являются частью приложения.
Ключевые слова Silverlight, генератор, кроссворд,реализация, веб.
Ключевые слова Silverlight, генератор, кроссворд, реализация, веб-сайт.
Цитирование Мартин Похнер: Генератор кроссвордов, бакалаврская работа, Брно, FIT BUT, Брно, 2010 г.
Генератор кроссвордов Декларация Я заявляю, что разработал эту бакалаврскую диссертацию самостоятельно под руководством г-на инж. Рудольф Каян. . Мартин Понер, 18 мая 2011 г.
Благодарности Я хотел бы поблагодарить супервайзера за его отличное сотрудничество и время, которое он уделил мне во время консультаций.
с Мартин Похнер, 2010.
Эта работа была создана как школьная работа в Технологическом университете в Брно, факультет информационных технологий. Произведение охраняется законом об авторском праве, и его использование без разрешения автора является незаконным, за исключением случаев, определенных законом.
2 Шведский кроссворд 2.1 Структура кроссворда. . . . . 2.2 Правила построения кроссворда 2.3 Определение строк кроссворда . . 2.4 Точки кроссовера. . . . . . . . 2.5 Список строк. . . . . . .
3 Требования к приложениям 3.1 Анализ генераторов тока . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Требования к нашему приложению. . . . . . . . . . . . . . . . . . . . .
4 Предложение решения генератора 4.1 Возврат . . . . . . . . 4.2 Метод переноса слов. . . 4.3 Организация данных в словаре 4.4 Поиск в словаре. . 4.5 Псевдогенератор. . . . . .
11 11 12 13 14 14
5 Средства и технологии разработки 5.1 .NET Framework . . . . . . . . 5.2 Microsoft Visual Studio 2010. 5.3 Смесь Microsoft Expression 4 . 5.4 Microsoft SQL Server. . . . .
7 Реализация приложения 7.1 Пользовательский интерфейс. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Блок-схема занятий. . . . . . . . . . .. . . . . . . . . . . . . . . . . . . 7.3 Реализация функциональности. . . . . . . . . . . . . . . . . . . . . . . . . . .
6 История Silverlight 6.1 . . . . . . . 6.2 Сильверлайт. . . . . . 6.3 Инструментарий Silverlight . 6.4 Схема архитектуры
8 Тестирование приложений 8.1 Тест скорости генератора. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B Внешний вид приложения
C создан кроссворд
D Пустой кроссворд
Создан электронный кроссворд
F Пустой кроссворд
Список изображений 2.1 2.2 2.3 2.4
Кроссворд с сеткой 4 × 4. . . . . . . . . . . . . . Дизайн кроссворда. . . . . . . . . . . . . . . . . . . . Определение кроссворда в виде динамического массива. . . Список точек пересечения в виде динамического массива.
Принцип переноса слов. . . . . . . . . . . . . . . . . . . . . . . . . . Принцип словарной индексации. . . . . . . . . . . . . . . . . . . . . . . . . .
Схема архитектуры .NET Framework взята из [3]. . . . . . . . . . . . .
Схема архитектуры Silverlight взята из [1]. . . . . . . . . . . . . . . . . .
B.1 Пользовательский интерфейс приложения. . . . . . . . . . . . . . . . . . . . . . . . . . .
D.1 Кроссворд готов к решению. . . . . . . . . . . . . . . . . . . . . . . . . . .
F.1 Кроссворд готов к решению. . . . . . . . . . . . . . . . . . . . . . . . . . .
Введение Решение кроссвордов очень популярно в наши дни. С кроссвордами мы сталкиваемся практически в каждом журнале или газете, но вариант разгадывания кроссворда в Интернете пока не очень распространен. Кроме того, в существующих интернет-приложениях для решения кроссвордов отсутствует такой пользовательский интерфейс, который максимально напоминал бы пользователям решение кроссвордов в обычном печатном виде. Это озарение привело меня к идее создания приложения,что позволит не только чистое решение, но и сложный дизайн кроссвордов и их генерации с использованием информационных технологий. Первые кроссворды появились в 1920-х годах, а поскольку информационные технологии в то время все еще находились в стадии замерзания, кроссворды были созданы людьми. С постепенным распространением информационных технологий компьютеры стали использоваться вместо человеческого мышления для решения различных задач. Этот новый вариант решения задач привел к необходимости перенести человеческое мышление на компьютер, чтобы он мог правильно решить поставленную задачу. Раздел науки, который занимается этой деятельностью, называется искусственным интеллектом. Искусственный интеллект также можно использовать для решения различных головоломок и кроссвордов и поиска нужного решения соответствующими методами. Этой работой я хотел бы показать возможности искусственного интеллекта для генерации шведских кроссвордов и применить их для создания веб-приложения, позволяющего не только генерировать сами кроссворды, но и их наиболее реалистичные решения, какими мы их знаем из обычной газеты. кроссворды. На основе уже созданных приложений для генерации кроссвордов я изучу принципы и алгоритмы, используемые для этого вопроса. С точки зрения алгоритмов будет изучен и реализован алгоритм возврата из области искусственного интеллекта, а из принципов будет выбран принцип переноса слов. В конце этой работы я хотел бы остановиться на пользовательской среде приложения, на его эффективности, удобстве использования по отношению к пользователю и оценить достигнутые результаты и предложить дальнейшее расширение этого приложения.
Шведский кроссворд В этой главе мы узнаем больше о шведских кроссвордах и уточним их структуру, см. 2.1 и 2.2. Далее будет объяснено представление кроссворда на основе генетических алгоритмов [2], где мы постепенно опишем определения строк кроссворда 2.3, массива точек пересечения 2.4 исписок строк 2.5. Шведский кроссворд — это головоломка, головоломка, в которой буквы складываются по определенным правилам. Кроссворд состоит из взаимно пересекающихся (пересекающихся) строк и столбцов, которые разбиты на отдельные квадраты (ячейки), в которые складываются буквы. Найденные слова или звуки добавляются в строки или столбцы, чтобы все слова в вертикальном и горизонтальном направлениях имели смысл. Слова и звуки завершаются согласно подсказке, данной в легенде. Легенда шведского кроссворда должна быть его частью. Цель кроссворда — разгадать секрет (скрытый текст), который появляется только после завершения всех остальных слов по легенде, и только от создателя кроссворда зависит, какой секрет он зашифрует. Это может быть, например, цитата.
Структура кроссворда состоит из нескольких основных частей, которые будут проанализированы в следующем списке. Описание частей кроссворда: • Сетка – место, где находится запись кроссворда. Размер сетки обычно ограничивается размером бумаги, на которой напечатан кроссворд, а также удобством чтения. Форма кроссворда может быть прямоугольной, квадратной или другой. Однако минимальный размер сетки составляет 3 × 3. Сетка состоит из ячеек. • Ячейка – краеугольный камень сетки. Размер ячейки выбирается таким образом, чтобы содержимое, вставленное внутрь, было легко читаемым. Существует четыре типа клеток, перечисленных ниже. • Буквенная ячейка – особый тип ячейки, которая остается пустой. Решатель заполняет эти ячейки буквами при разгадывании кроссворда. Буквы, написанные в этих ячейках, обозначают слова в отдельных столбцах и строках. • Ячейка для секрета — практически идентичная ячейке для письма, с той лишь разницей, что имеет, например, другую окраску. Эти поля откроют секрет при разгадывании кроссворда. • Легенда – особый тип ячейки, которая содержит справку по искомому слову в заданной строке или столбце. Он тоже можетопределить, какой столбец или строка является секретом. 5
• Помощь – специальная ячейка, обычно расположенная в одном из углов сетки. Он содержит теоретически самые сложные части кроссворда, примерно от трех до пяти слов, и решатель должен правильно разместить их в кроссворде.
(a) Решение кроссворда
(b) Пустой кроссворд
Рисунок 2.1: Кроссворд с сеткой 4 × 4.
Правила построения кроссворда
При составлении кроссворда необходимо следовать заранее установленным правилам. Несоблюдение их усложнило бы всю конструкцию и генерацию решений. Размеры кроссворда были кратко упомянуты в предыдущем пункте, но необходимо пояснение. Минимальный размер сетки кроссворда 3 × 3, потому что самые короткие слова, используемые в кроссвордах, сгенерированных из чешского словаря, имеют длину 2. Максимальный размер теоретически не ограничен, а форма кроссворда не фиксирована. Размещение легенды в кроссворде должно быть выполнено таким образом, чтобы нигде в сетке не было больших неразделенных блоков ячеек, а также чтобы нигде в кроссворде не было отдельной легенды. Мы не должны забывать, что самая короткая строка имеет длину 2, и поэтому мы не можем поместить легенду в сетку, чтобы создать строку длины 1. Несоблюдение этих правил может вызвать проблемы при генерации решения. Оптимальная длина строк, которые мы создаем, размещая легенды, должна быть 5 — 6, потому что эти слова являются наиболее часто встречающимися в словаре.
Определение строк кроссворда
Для разработанного кроссворда, готового к созданию решения, мы не можем обойтись без его полного определения строки. Для будущего генератора удобно иметь информацию обо всех строках, которые будут искаться в кроссворде. Это начальное положение каждой цепочки, которая будет размещена в кроссворде, в каком направлении она будет ориентирована (горизонтально или вертикально) и ее длина. Для наглядного примераопределения простых строк кроссворда, мы будем использовать следующую таблицу 2.1 и дизайн изображения 2.2. Отсортируем записи в таблице по их длине в порядке возрастания, а для направления выберем 0 — по горизонтали, 1 — по вертикали. В кроссворде мы будем иметь дело только с белыми клетками, где идем по вспомогательным стрелкам.
Рисунок 2.2: Дизайн кроссворда. Порядок 1. 2. 3. 4. 5. 6. 7. 8.
Строка 1 4 1 2 2 2 3 1
Столбец 3 1 4 1 2 1 1 3
Длина 2 3 3 3 3 4 4 4
Направление 0 0 1 1 1 0 0 1
Таблица 2.1: Определение строк кроссворда. На основе представленного выше принципа получения определений из конструкции кроссворда будет разработан алгоритм, который анализирует построенный кроссворд и таким образом создает динамическое поле, каждый элемент которого будет содержать номер строки, номер столбца, длину цепочки и направление, в котором цепочка ориентирована. Массив будет отсортирован по длине строки в порядке возрастания. Принцип динамического поля показан на рис. 2.3.
Рисунок 2.3: Определение кроссворда в виде динамического поля.
Точки пересечения соответствуют ячейкам для букв и секрета, значение которых было объяснено в 2.1. Точка пересечения должна нести информацию о том, в какой позиции в строке она находится и какое определение строки включает ее. Мы всегда должны рассматривать оба типа информации в горизонтальном и вертикальном направлениях. Для наглядного примера списка точек пересечения будем использовать таблицу 2.1 и первые 7
две строки кроссворда на рис. 2.2, в которых нам важны белые клетки. Позиция h.” ” и Определение h.” соответствуют горизонтальному направлению согласно букве h”. Эти пункты вместе со списком определений дают важную информацию, которая точно характеризует данный кроссворд. Порядок 1. 2. 3. 4. 5. 6.
Позиция ч. 0 1 0 1 2 3
Позиция v. 0 0 0 0 1 1
Определение ч. 1 1 6 6 6 6
Определение в версии 8 3 4 5 8 3
Таблица 2.2: Список пунктов пропуска. На основе балловПереходя от дизайна кроссворда, который был продемонстрирован выше, будет разработан алгоритм, который анализирует построенный кроссворд и таким образом создает динамический массив, каждый элемент которого будет содержать позиции точек в строках и соответствующие индексы в массиве определений строк кроссворда. . Необходимо отметить тот факт, что в области пересечения зданий нам понадобится возможность перемещения по отдельным элементам, как в матрице. Поэтому при создании списка точек пересечения мы также включим ячейки для легенд, которые будут иметь нулевой рейтинг. Принцип динамического поля показан на рис. 2.4.
Рисунок 2.4: Список точек пересечения в виде динамического массива.
Если у нас есть решенный кроссворд и мы создали все определения строк в соответствии с правилами 2.3, мы можем построить список строк, просматривая список определений. Важно, чтобы порядок строк в списке точно соответствовал порядку их определений. Если у нас есть списки определений строк, точек пересечения и строк, мы можем реконструировать весь кроссворд, что является нашей будущей целью, за исключением того, что список строк будет сгенерирован.
Требования к приложению В настоящее время существуют приложения как для создания, так и для решения кроссвордов. На основе проведенных исследований, какие приложения доступны в Интернете, было обнаружено, что если нам нужно программное обеспечение для создания и создания кроссвордов, для нас доступны платные приложения для настольных компьютеров. Это приложения, которые благодаря своей надежности способны генерировать высококачественные кроссворды, которые мы встречаем в печати. Кроссворды, созданные человеком, дороги из-за того, что они требуют много времени, поэтому понятно, что организации, составляющие, например, журнал кроссвордов, вкладывают средства в покупку этого программного обеспечения, которое дает им гораздо больше гибкости. В основном все кроссворды, будь то классические шведские кроссворды,восьмисторонние головоломки, судоку, генерируются с использованием компьютерных технологий. Разработчики этих приложений должны сосредоточиться на трех основных требованиях, которым должно отвечать приложение: • База данных выражений, из которых будет составляться кроссворд, включая большой набор выражений (не менее 500 000 выражений). • Алгоритм, надежно и быстро генерирующий кроссворд. Наиболее распространенным алгоритмом создания кроссворда является поиск с возвратом (4.1) с использованием эвристики. • Интуитивно понятный пользовательский интерфейс, упрощающий работу пользователей с приложением. В ходе исследования мы также рассмотрели приложения, которые полностью основаны на веб-технологиях и позволяют посетителям разгадывать кроссворды. Результат не очень интересный. При поиске таких приложений был найден только сервер www.lusk.cz, предоставляющий как платное создание кроссвордов, так и бесплатные решения с их сайта. Разгадывать шведские кроссворды как-то неинтересно на первый взгляд. Вопросы к отдельным словам представлены списком рядом с кроссвордом, что не производит такого впечатления, как когда перед нами газета с кроссвордом.
Анализ генераторов тока
В настоящее время доступно несколько настольных программ для создания кроссвордов. Чешские представители включают CwdStudio, Křižák. Помимо шведских кроссвордов, CwdStudio позволяет создавать классические кроссворды и восьмисторонние головоломки — при этом пользователь может выбирать сложность генерации (в приложении есть словарь из 40 000 выражений). Программа кроссворда используется издательством SAGAX, на сайте которого представлена основная информация о генераторе, который основан на алгоритмах искусственного интеллекта — программа использует сложные алгоритмы, основанные на слепом переборе пространства состояний в модификации с возвратом и использует эвристика. 9
Для зарубежных приложений можно упомянуть FineCrosses. Большинство приложений,которые обычно можно найти в Интернете, являются платными и предоставляют только демо-версии для опробования с ограниченной функциональностью.
После проведения исследования можно было уточнить, какие инструменты и технологии мы будем использовать для разработки нашего приложения, а также какие требования мы будем предъявлять к приложению. Мы не могли пойти по пути разработки приложения с использованием HTML и JavaScript, как это было решено на www.lusk.cz, потому что нашей главной целью было удовлетворить пользователя при решении кроссворда удобным пользовательским интерфейсом. Для нас были предложены две технологии: Adobe Flash и Silverlight. Для приложения мы выбрали технологию Silverlight, которая будет описана в главе 6. На основе этой технологии были выбраны средства разработки, которые описаны в главе 5. Мы учились на настольных приложениях для проектирования кроссвордов и вдохновлялись правильным подходом к созданию пользовательского интерфейса, например, какие варианты пользователь может иметь при создании кроссворда и что он не должен нарушать. Поскольку это веб-приложение, было решено, что максимальный размер генерируемого кроссворда будет 15×15 квадратов. Это для того, чтобы кроссворд можно было отобразить целиком, а пользователю, у которого нет монитора с высоким разрешением, не нужно использовать ползунки для его решения.
Обязательные требования для нашего приложения
• веб-приложение • возможность решения и составления кроссворда • создание кроссворда с использованием алгоритма поиска с возвратом • создание кроссворда на основе шаблона, например, из газетного кроссворда • размер созданного кроссворда 3 × 3 – 15 × 15 полей • сохранение созданного кроссворда в базу • сохранение созданного кроссворда в формат png, pdf • прямая печать кроссворда из браузера • отображение правильного решения кроссворда при разгадывании • отображение ошибок при разгадывании кроссворда
Дизайн решения для генератора В этой главе будет объяснена конструкция генератора, работающего с методом переноса слов [12].который использует алгоритм поиска с возвратом, см. 4.1. Перед началом генерации необходимо собрать всю необходимую информацию, характеризующую пропорции кроссворда см. 2.3, 2.4, и подготовить исходные данные так, чтобы генератор мог найти решение в кратчайшие сроки. Метод организации данных будет описан в 4.3, а принцип поиска слов в словаре будет объяснен в 4.4. В конце этой главы будет описано упрощенное решение генератора без обратной связи, описанное псевдокодом 2.
Алгоритм поиска с возвратом — слепой поиск с возвратом — это алгоритм глубокого поиска, относящийся к группе неинформированных методов, см. [13]. Цель поиска с возвратом — найти решение в пространстве состояний, где можно исключить большое количество потенциальных решений, не проверяя их напрямую. Перед началом поиска решения определяется начальное состояние, из которого последовательно генерируются новые состояния до тех пор, пока не будет найдено конечное состояние, когда алгоритм завершается успешно. Если алгоритм оказывается в ситуации, когда невозможно сгенерировать новое состояние из текущего состояния, он всегда возвращается в предыдущее состояние и продолжает генерацию. Если возникает ситуация, когда невозможно сгенерировать новое состояние из начального состояния, это означает, что в пространстве состояний нет решения для конкретного начального состояния. В нашем случае это случай, когда пользователь вводит бессмысленный секрет, из которого алгоритм не в состоянии сгенерировать кроссворд. Временная сложность алгоритма экспоненциальна. Например, с помощью поиска с возвратом решается задача о восьми ферзях. Алгоритм: 1. Инициализировать стек Open и поместить в него начальное состояние. 2. Если стек Open пуст, завершить поиск как неуспешный. 3. Если первый/следующий оператор можно применить к состоянию на вершине стека, примените его. В противном случае удалить состояние из стека и вернуться кпункт 2. 4. Если вновь созданное состояние является целевым состоянием, пропишите путь к решению и завершите поиск как успешный. В противном случае сохраните состояние в стек Open и вернитесь к пункту 2.
Алгоритм 1: Возврат — псевдокод InitStack(Open); Нажмите (Открыть, первое состояние); пока Open не пуст, do Top(Open, ExpandState); новое состояние = применить следующую операцию (расширенное состояние); если newState == NULL, то Pop(Open); иначе, если цель (новое состояние), то PrintResult (новое состояние); вернуть истину; иначе Push(Open, newState); конец вернуть ложь; InitStack — инициализирует открытый стек. Top/Pop/Push — показывает/извлекает/сохраняет состояние из/в открытый стек. ApplyNextOperator — применяет первый/следующий оператор и возвращает указатель на новое состояние. Goal — возвращает true, если мы попали в целевой узел. PrintResult — печатает путь от целевого до начального узла.
Метод переноса слов
Предположим, что имеется кроссворд размером 10 × 10 ячеек с легендами, распределенными согласно рисунку 4.1. Выбираем начальное слово — секретное слово, которое обычно выбирается как самое длинное слово в кроссворде. Генерация решения кроссворда начинается с первой буквы секрета, когда создается перпендикулярная маска, по которой в дальнейшем составляется список соответствующих строк. Отдельные строки созданного списка последовательно вставляются в кроссворд, и снова проверяется перпендикулярная маска для каждой буквы вставленной строки, чтобы предотвратить создание слов, не фигурирующих в словаре. Найденная подходящая строка вставляется в кроссворд и будет следующей заворачиваться после разгадывания букв секрета. Для того, чтобы генерация продолжалась после обертывания секрета этой строкой, мы храним все ее позиции пересечения (точки пересечения) в структуре типа очереди. Каждый раз, когда в очередь добавляются новые позиции, необходимо проверять, не находится ли новая позиция уже в очереди. Мы будем действовать так, пока он не будет заполненвесь кроссворд. Сокращенная процедура генерации по принципу переноса слов показана на рисунке 4.1.
Рисунок 4.1: Принцип метода переноса слов.
Организация данных в словаре
При генерации кроссворда нам необходимо как можно быстрее найти необходимый список строк, соответствующий введенной маске. Поиск по всему словарю был бы слишком трудоемким и неэффективным, поэтому мы индексируем весь словарь в соответствии с длиной слов и букв в отдельных позициях в словах. Таким образом, мы можем подойти, например, к списку слов длины 3 дюйма со второй «буквой B» или третьей буквой «R» в слове. Наглядный пример индексации словаря « » показан на рисунке 4.2.
Рисунок 4.2: Принцип индексации словаря.
Поиск по словарю
Индексированный словарь значительно упрощает поиск строк, соответствующих основной маске. По маске, определяющей, какие буквы встречаются на заданных позициях в искомом слове, будем постепенно выбирать все списки слов из словаря и сравнивать их с маской. Вставляем выражения, соответствующие маске, в новый список, который будет для нас ключевым списком, из которого мы будем выбирать слово для кроссворда. Если слово удовлетворяет условию, что все его ортогональные маски имеют представителей в словаре, оно вставляется в кроссворд. Снова проверяем ортогональные маски по принципу поиска строк по основной маске.
Алгоритм 2: Генератор — псевдокод без обратного вызова InitQueue(CrossPointQueue); пока CrossPointQueue не пуста, выполните Get(CrossPointQueue, CrossPoint); ОсновнаяМаска = СоздатьОсновнуюМаску(Точка пересечения); СписокСлов = ПолучитьСписокПо(Словарь,ОсновнаяМаска); в то время как все ортогональные маски не подходят do InsertWord(WordList.Item); конец Вставить (пройденоCrossPoints, CrossPoint); InsertNewCrossPoints(CrossPointQueue, CrossPoint); end InitQueue — инициализирует очередь точекпересечение и вставляет в него начальную точку. Вставить — вставляет точку пересечения в список решенных точек. Get – удаляет точку пересечения из очереди. InsertNewCrossPoints — вставляет в очередь новые точки пересечения. GetList — находит в словаре список строк, соответствующих маске. InsertWord – вставляет новое слово в кроссворд.
Инструменты и технологии разработки Основным требованием к приложению было то, что оно должно быть веб-ориентированным. Поэтому для разработки приложения были предложены две конкурирующие технологии Flash от Adobe и Silverlight от Microsoft, которые позволяют пользователю интерактивно работать с приложением. Технология Silverlight была выбрана для разработки из-за бесплатного доступа к платным средствам разработки, а также для того, чтобы научиться работать с этой пока неизвестной мне технологией. В этой главе будут кратко рассмотрены технологии и средства разработки от Microsoft, см. Visual Studio 5.2, Microsoft Expression Blend 5.3 и Microsoft SQL Server 5.4. Технология Silverlight будет посвящена отдельной главе 6. Эта глава опирается на [4], [7], [8], [10], [11].
.NET Framework — обширная программная платформа, первая версия которой появилась в 2002 году. Платформа в основном предназначена для разработки различных типов приложений. Используя эту платформу, мы можем создавать классические настольные приложения для Windows, веб-приложения или приложения для мобильных устройств.
Архитектура Ядро платформы .NET, называемое .NET framework, представляет собой надстройку над операционной системой. На данный момент существует в версиях 1.0, 1.1, 2.0, 3.0, 3.5, 4.0. Последняя версия 4.0 была представлена в 2010 году. Архитектура .NET Framework состоит из трех основных уровней. Первый уровень на самом низком уровне — это Common Language Runtime (CLR), который реализует базовую инфраструктуру, на которой построена вся платформа .NET Framework. Выше CLR находится базовый уровень.Библиотека классов BCL — системная библиотека классов. На самом высоком уровне есть два слоя, которые облегчают разработку не только веб-приложений, но и классических настольных приложений с пользовательским интерфейсом. Схема архитектуры каркаса показана на рис. 5.1. Более подробное описание двух основных слоев: • CLR — исполняющая система, которую мы можем представить как виртуальную машину, в которой работают прикладные функции платформы .NET, где для всех языков доступна системная библиотека классов. То есть на компьютере работает другая система, управляющая приложениями для .NET. Для этой системы существует эквивалент исходного кода Microsoft Intermediate Language MSIL. Приложения, написанные для .NET, ограничены производительностью среды, в которой они работают, поскольку код компилируется не непосредственно в исходный код, а в MSIL. Настоящим 15
однако многие преимущества становятся недостатками, например, управляемый код, система унифицированных типов и управление памятью. • BCL — стандартная библиотека, доступная для всех языков .NET. BCL инкапсулирует большое количество функций, таких как чтение и запись в файл, отображение графики, взаимодействие с базой данных и манипулирование XML-документами, которые облегчают работу разработчиков. Базовые классы включают ADO.NET, XML.
Рисунок 5.1: Схема архитектуры .NET Framework взята из [3].
Развитие платформы В этом разделе будет описано развитие платформы, начиная с версии 2.0, на основе появления новых технологий, которые постепенно внедрялись. Версия 2.0 • ASP.NET – технология разработки веб-приложений. Версии 3.0 и 3.5 были дополнены следующими библиотеками: • Windows Communication Foundation (WCF) — технология, используемая для взаимного обмена данными между коммуникационными протоколами и технологиями. • Windows Presentation Foundation (WPF) — используется для создания пользовательского интерфейса с аппаратным ускорением. • Windows Sync Framework — набор объектов длясинхронизация различных источников. 16
• Windows Workflow Foundation (WF) — технология определения разнородных последовательных процессов. • Windows CardSpace – содержит реализацию стандарта информационных карточек. • LINQ (Language INtegrated Query) — используется для объектно-ориентированного доступа к данным в базе данных. Версия 4.0 • Managed Extensibility Framework — облегчает создание расширяемых и компонуемых приложений. • PLINQ — параллельная реализация LINQ to Objects.
ASP.NET Технология ASP.NET — это унифицированная модель веб-разработки, включающая службы, необходимые для создания крупномасштабных веб-приложений с минимальным объемом кода. При создании приложений разработчик имеет доступ к классам .NET Framework, а также может писать приложения на любом языке, совместимом с модулем CRL. К таким языкам относятся, например, Visual Basic и C#. Microsoft предлагает бесплатную среду разработки Visual Web Developer Express для разработки приложений с использованием этой технологии. Используя Visual Studio 2010, мы можем создавать различные типы проектов этой технологии. Это проекты, включающие веб-сайты, веб-приложения, веб-службы и серверные элементы управления AJAX. Если мы хотим создать приложение MVC (модель-представление-контроллер), нам нужно использовать проект веб-приложения. Основные различия между веб-проектами и проектами веб-приложений можно найти в [9]. Веб-страницы ASP.NET можно запрашивать из любого браузера или мобильного устройства. Это полностью объектно-ориентированный подход. На веб-страницах мы можем работать с элементами языка HTML, используя свойства, методы, события. Весь технологический код компилируется, что обеспечивает строгую типизацию, оптимизацию производительности и статическую привязку. Также имеется инфраструктура расширенной безопасности для аутентификации и авторизации доступа пользователей,или выполнение других операций, связанных с безопасностью.
Windows Communication Foundation WCF ориентирована на создание сервис-ориентированных приложений. WCF позволяет отправлять данные в виде асинхронных сообщений из одной конечной точки службы в другую. Конечной точкой может быть, например, другая служба внутри приложения или часть общедоступной службы, размещенной в IIS. Модель WCF делит приложения на клиентов и службы, где клиент — это приложение, которое инициирует обмен данными, а служба — это приложение, ожидающее клиентских запросов. Службы Службы являются основным строительным блоком. Это система, предоставляющая одну или несколько конечных точек, которые используются для получения и отправки сообщений SOAP (Simple Object Access Protocol). Он состоит из трех основных частей: • класс службы (его реализация), • хост-среда (место), в которой будет работать служба,
• одна или несколько конечных точек. Конечная точка Конечная точка — это место внутри службы, которое используется для приема и отправки сообщений и состоит из трех частей: • адрес — место, куда будут отправляться сообщения, • привязка — определение связи службы (протокол связи, кодировка, тип безопасности), • контракт – спецификация интерфейса, который предоставляет служба (например, методы).
Windows Presentation Foundation Подсистема WPF представляет собой новый подход к созданию клиентских приложений Windows. С помощью WPF можно создать широкий спектр настольных и веб-приложений. Ядро WPF основано на механизме рендеринга независимого разрешения1 и вектора2, который использует преимущества современных графических движков. Подсистема расширяет базовый всеобъемлющий набор функций с помощью XAML (расширяемый язык разметки), элементов управления, привязок данных, макетов, 2D- и 3D-графики, анимации, стилей, шаблонов, документов, мультимедиа, текста и типографики. XAML — это язык разметки, основанный наязыка XML, что позволяет использовать декларативный подход к реализации внешнего вида приложений. Обычно он используется для создания окон, всплывающих окон, страниц, элементов управления средой и графики в целом. Пользовательский интерфейс состоит из древовидной иерархии вложенных элементов. Главной особенностью приложения является реализация функционала, отвечающего за взаимодействие с пользователем, включая обработку событий (например, нажатие на меню, клавиатуру) и вызов логики доступа к данным. Такое поведение обычно реализуется на языке .NET, таком как c#, а тип кода обозначается code-behind3 .
Язык C# C# предназначен для создания приложений на платформе .NET Framework. Первая версия была выпущена вместе с NET. Framework 1.0 в 2002 году и содержал только базовую поддержку объектно-ориентированного программирования. В настоящее время C# 4.0 уже доступен на рынке. Разработчики, которые программируют на C, C++ или Java, обычно могут начать эффективно работать на этом языке за очень короткое время. Синтаксис C# упрощает многие сложности C++ и предоставляет мощные функции, такие как перечисления, делегаты, лямбда-выражения, прямой доступ к памяти, которые недоступны в Java. Он поддерживает универсальные методы, типы, повышающие безопасность и производительность, и итераторы, позволяющие разработчикам коллекций классов определять собственное поведение. Инкапсуляция, полиморфизм и наследование, несомненно, являются обычным явлением. Все переменные и методы инкапсулированы в определение класса. Классы могут наследоваться только от одного суперкласса, но могут реализовывать любое количество интерфейсов. Методы, переопределяющие виртуальные методы родительского класса, требуют ключевого слова override во избежание случайного переопределения. C# упрощает разработку программных компонентов благодаря таким инновационным конструкциям, как LINQ. 1
Элементы GUI могут отображаться в размеренезависимо от пиксельной сетки. Тип графического интерфейса, элементы которого визуализируются векторно. 3 Отделение реализации поведения от реализации внешнего вида, код работает в фоновом режиме. 2
Microsoft Visual Studio 2010
Visual Studio 2010 Professional — это интегрированная среда, упрощающая создание, отладку и развертывание приложений. Написание кода происходит быстрее, вы можете использовать имеющиеся навыки и настраивать среду в соответствии со своими привычками. Разработка с использованием технологии Silverlight важна для нашего приложения. Visual Studio содержит множество функций, некоторые из которых описаны ниже. • Редактор кода. Подсветка синтаксиса и автодополнение являются стандартными функциями редактора. Элементы навигации редактора включают установку закладок, свертывание блоков кода, поиск с поддержкой регулярных выражений. • Debbuger — позволяет запускать приложение в режиме отладки, в котором можно пошагово пройтись по программе и проверить содержимое переменных. • Конструктор WPF. Конструктор упрощает проектирование приложений с помощью пользовательского интерфейса без знания языка XAML, который создается автоматически. • Дизайнер данных — этот конструктор данных предназначен для графического редактирования схем базы данных, включая записанные таблицы, первичные и внешние ключи и ограничения. • Mapping Designer — Mapping Designer используется LINQ to SQL для отображения сопоставления между схемами базы данных и классами, которые упаковывают данные.
Microsoft Expression Blend 4
Microsoft Expression Blend версии 4 — это гибкая и производительная графическая среда разработки. Это помогает в создании современных и графически сложных приложений. Он позволяет создавать и редактировать файлы XAML, описывающие уровень представления веб-приложений. Поэтому разработчику не нужно изучать весь язык XAML и он может с комфортом создать внешний вид приложения в этом инструменте. язык XAMLоснован на языке XML. При разработке макета презентации можно использовать предустановленные элементы, например, рамку, кнопку, блок для текста. . . , где каждый элемент имеет свои настройки. Если, конечно, мы не можем изменить элемент до нужной нам формы, есть еще один вариант — создать стиль, который затем можно применить к нескольким элементам одного типа. Это облегчит создание, например, графически продуманного предложения меню. Мы можем в дальнейшем использовать эти стили при создании динамических элементов с помощью языка C#, где необходимо только назначить стиль, а внешний вид элемента не нужно дополнительно определять. Инструмент позволяет разрабатывать стиль двумя способами: создавать их с помощью пользовательского интерфейса или писать на чистом XAML. Еще одна сложная часть инструмента — назначение действий различным типам событий. Пользователь может просто и быстро назначить действие (например, кнопке) при наведении указателя мыши и, таким образом, установить изменение фона или другую анимацию в соответствии со своим воображением.
Microsoft SQL Server
Microsoft SQL Server 2008 — это продукт, разработанный в соответствии с видением Microsoft платформы данных. Затем организации могут управлять любыми данными из любого места в любое время. Данные могут храниться из структурированных, полуструктурированных и неструктурированных документов, таких как изображения, мультимедийные файлы, непосредственно в
база данных. Этот продукт предлагает широкий спектр интегрированных служб, которые позволяют выполнять другие операции с данными, такие как поиск, запросы, синхронизация, создание отчетов и проведение анализа. SQL Server также обеспечивает высокий уровень безопасности, надежности и масштабируемости. Он позволяет использовать данные из ваших собственных приложений, разработанных на платформах Microsoft .NET и Visual Studio.
Silverlight В последние несколько лет мы наблюдаем отход от веб-приложений, использующихJavaScript для максимальной совместимости браузера. Однако сегодня ожидается, что большинство новых приложений будут включать технологию AJAX, основанную на JavaScript, и, таким образом, создавать так называемые приложения RIA (Rich Internet application). Каждый день мы видим множество приложений WEB 2.0″. Отказ от создания так называемых «бедных приложений», лишенных «какой-либо интерактивности с пользователем», привел к неизбежному переходу на так называемые «богатые приложения». В настоящее время пользовательский интерфейс веб-приложений достигает такого высокого уровня, что превосходит некоторые настольные приложения по сложности. Появление долгожданной подсистемы WPF (Windows Presentation Foundation) позволило использовать единый подход к пользовательскому интерфейсу настольных приложений Microsoft. Эта подсистема основана на технологиях, которые давно используются в Интернете (например, объявление пользовательского интерфейса с помощью разметки), объединяет программирование пользовательского интерфейса с его графическим дизайном и предоставляет новые возможности для оконных приложений. На основе приложений WPF и RIA родилась технология Silverlight, которую мы знаем сегодня в ее последней версии 4. Упрощенно приложение Silverlight можно сравнить с интерактивным дисплеем и рабочим пространством, которое отображается на стороне клиента ( веб-браузер или отдельное окно), а логика приложения работает на стороне сервера. Эта глава основывается на [1], [5] и [6].
В сентябре 2007 года появилась первая версия технологии Silverlight с поддержкой одного языка программирования JavaScript. JavaScript используется для взаимодействия между объектами Silverlight, которые выполняются с помощью подключаемого модуля в веб-браузере. Позже, в 2008 году, последовала версия 2, которая принесла с собой возможность создания уже многофункциональных приложений и полное использование языков .NET. Вв середине 2009 года была выпущена еще одна версия Silverlight 3, которая содержит некоторые важные новости и улучшения. Одним из наиболее значимых нововведений является возможность запуска приложения на клиентском компьютере вне веб-браузера. Мы также находим здесь расширенную поддержку данных, поддержку бизнес-объектов и возможность воспроизведения аудио и видео в высоком качестве. На данный момент уже выпущена последняя версия Silverlight 4, о которой будет рассказано в 6.2.
Эта платформа предназначена для создания и работы интернет-приложений RIA. Для запуска приложения в веб-браузере необходимо установить специальный плагин, который очень похож на плагин Adobe Flash и устанавливается таким же образом. Подключаемый модуль Silverlight поддерживает векторную графику, аудио, видео и HD-видео, защищенные системой управления цифровыми правами (DRM). Характеристики технологии описаны в следующих пунктах: • Silverlight — это кроссплатформенная технология, поддерживаемая всеми веб-браузерами для создания многофункциональных интерактивных приложений. • Приложения Silverlight 4 можно создавать с помощью Expression Blend, Microsoft Visual Studio и Eclipse. • Silverlight поддерживает воспроизведение Windows Media VC-1/WMA и полноэкранного HD-видео с разрешением 720p+. • Используя XAML, HTML, JavaScript, C# или VB, Silverlight обеспечивает богатое мультимедиа, векторную графику, анимацию и интерактивность. • Библиотеки BCL обеспечивают доступ к общим классам коллекций, шаблонов и потоков, которые являются общими для разработки клиентских приложений Windows. • Любое приложение Silverlight может работать как классическое настольное приложение, т. е. вне браузера. • Включение новых бизнес-элементов – структура навигации, тиксы, поддержка перетаскивания, событие щелчка правой кнопкой мыши и т. д. • Шаблоны бизнес-приложений. • Вся логика приложения и код XAMLсозданные в Silverlight, можно использовать в приложениях WPF.
Инструментарий Silverlight можно использовать для расширения элементов управления и новых утилит, которые содержат другие элементы (например, графики), которые могут быть полезны разработчикам. Набор инструментов не является частью среды выполнения Silverlight из-за размера установочного пакета Silverlight. Отделение набора инструментов от базовой версии позволяет Microsoft обновлять инструменты вне цикла выпуска Silverlight.
Полную архитектуру технологии Silverlight можно увидеть на рис. 6.1.
Рисунок 6.1: Схема архитектуры Silverlight взята из [1].
Реализация приложения Приложение сначала разрабатывалось с использованием технологии Silverlight 3, так как инструмент Expression Blend для реализации скинов не был доступен для тогдашней версии 4. Когда разработка приложения подходила к концу и были реализованы последние части, проявились недостатки этой версии. Версия 3 не позволяла напрямую печатать из браузера, что дало толчок к переходу на версию 4 уже с доступным Expression Blend. В этой главе во введении будет представлена блок-схема классов 7.1, которые вместе со своими методами образуют ядро функциональности приложения. Реализация пользовательского интерфейса, реализованная на языке XAML, будет описана в 7.1. Реализация функционала приложения будет описана в 7.3.
Внешний вид пользовательского интерфейса был полностью разработан в Expression Blend, который автоматически генерирует код XAML. Во-первых, стартовый вид был разработан таким образом, чтобы можно было постоянно работать над функционалом приложения. В ходе постепенного ознакомления с инструментом и изучения туториалов был разработан оригинальный современный вид пользовательского интерфейса, см. Б.1. Каждая страница приложения или всплывающее окно — это класс, имеющий собственное определение внешнего вида в виде кода XAML.
Шаблон страницы Внешний вид приложенияможно разделить на динамическую и статическую части. Статические части — это те, которые не меняются во время выполнения приложения. В нашем случае это шапка приложения с главным меню и футер приложения. Тело приложения — это динамическая часть, которая меняется каждый раз (переход на другую страницу). Внешний вид класса MainWindow был реализован так, чтобы включать статический верхний и нижний колонтитулы, а в тело был помещен объект ContentFrame, который может отображать содержимое других страниц на основе URL-адреса.
Эффекты Если мы запустим приложение, мы можем заметить кнопки с отражениями или изменением цвета, когда мышь перемещается по кнопке. Expression Blend — это мощный инструмент, в котором эти эффекты создаются быстро и легко. При производстве светоотражающих кнопок использовались стандартные инструментальные элементы, где необходимо было правильно настроить их свойства (градиенты цвета, рамки, подкрашивание, скругление рамки и т.д.). Было 24
при назначении эффекта изменения подцветки при наведении.
использовали специальный редактор инструментов, в котором мы назначали тип события и эффект, который будет выполняться для кнопки. При создании приложения мы можем использовать предопределенные элементы, но если мы хотим создать собственную графику, нам придется начинать с нуля.
Стили элементов При создании кнопок и меню были созданы пользовательские стили графики, которые были применены к нескольким элементам. Это сделало работу более эффективной и легкой. Стили элементов также используются при создании динамических элементов, которым мы хотим придать современный графический вид (создание поля кроссворда). Определения стилей являются частью кода XAML.
Диаграмма развития класса
Рисунок 7.1: Блок-схема классов
Классы были реализованы в Microsoft Visual Studio. Каждая страница с оформленным внешним видом имеет свой функционал.
Движение вкласс MainWindow управляет переходом между отдельными страницами и динамическим изменением тела. В конструкторе класса для объекта ContentFrame задается адрес начальной страницы, которая отображается при запуске приложения, а также устанавливаются ползунки так, чтобы они реагировали на поворот колесика мыши. Методы, реагирующие на событие нажатия кнопки в главном меню, » » организуют изменение адреса объекта ContentFrame на адрес нужной страницы, которую мы хотим отобразить.
Оформление кроссворда При нажатии на кнопку «Создать кроссворд» в главном меню создается экземпляр класса «StartCross», что вызывает в диалоговом окне ввод размеров вызываемого кроссворда. Методы класса проверяют правильность ввода. Если значения введены правильно, он сохраняет их в публичных переменных (высота, ширина) и возвращает управление методу класса MainWindow, вызвавшего окно. Этот метод считывает значения общедоступных переменных из экземпляра окна и создает URL-адрес, содержащий измерения, которые он устанавливает для объекта ContentFrame для перенаправления на страницу дизайна кроссворда. Когда страница дизайна кроссворда, управляемая классом Create, загружается, первый метод, который нужно запустить, — это определить параметры URL, и, поскольку размеры кроссворда есть, он обрабатывает их и сохраняет в частных переменных. Затем вызывается метод для построения пустого поля кроссворда. Метод создает объект Grid с размерами, указанными пользователем, который заполняет объекты TextBox. Каждому TextBox назначается стиль, определенный в файле кода XAML. Остальные методы класса Create управляют взаимодействием с пользователем при разработке кроссворда. При нажатии на кнопку запуска генерации создается рабочая матрица, содержащая форму кроссворда. Далее создается generate экземпляр класса CrossGenerate, в котором мы инициализируем размерности кроссворда, рабочую матрицу, объекты вывода(решетка, буси-короб). Наконец, мы создаем новый поток, которому мы назначаем метод запуска prepareGenerating instance generate и запускаем поток. Теперь процесс генерации управляется методами объекта generate и будет подробно описан в 7.3.
Генерация кроссворда Как уже упоминалось в 7.3, генерация выполняется в отдельном потоке, который сначала запускает метод prepareGenerating, который по очереди выполняет следующие части: 1. Создание определений строк кроссворда 2.3. 2. Создание массива длин строк, которые встречаются в кроссворде. 3. Создание массива точек пересечения 2.4. 4. Инициализация списка строк (только секретная строка). 5. Создание экземпляра класса CrossDictionary и индексация словаря.
6. Установка захвата события «индексированный словарем» и последующий запуск генерации «кроссворда» — метод generateCrossWordHandler. Метод generateCrossWordHandler — это метод управления процессом генерации, который инициализирует стек состояний (хранение состояний кроссворда) и очередь точек пересечения. Вначале в очередь вставляются точки пересечения, принадлежащие секрету. Затем циклически вызывается метод generateCrossWord для генерации кроссворда. Если возникает ситуация, когда невозможно сгенерировать новое состояние кроссворда, метод управления останавливает генерацию, загружает предыдущее состояние и запускает его заново. Метод generateCrossword выполняет генерацию самого кроссворда. Тело этого метода генерирует строки до тех пор, пока очередь точек пересечения не станет пустой (генерация завершена). Генерация происходит последовательно в следующих точках: 1. Создание нового состояния (резервное копирование очереди точек пересечения, списка строк и списка уже разрешенных точек пересечения). 2. Удаление первого пункта пропуска из очереди. 3. По точке пересечения вычисляется ортогональная маска, по которой из словаря выбирается список соответствующих адептов. 4. Пошаговая вставка адептов в список цепочек, контрольортогональные маски каждой буквы вставляемой строки и оригинальность строки. 5. Остальной непроверенный список строк добавляется в новое состояние (строка успешно найдена). 6. Помещение состояния в стек состояний. 7. Внесение пересечения боу в список решаемых точек. 8. Вставка новых пунктов пропуска в очередь. 9. В случае, если при генерации произошла ошибка, вернуться в предыдущее состояние. После завершения работы метода генерации generateCrossWord управление возвращается методу контроллера, который запускает методы для генерации легенд для отдельных строк. Наконец, управление возвращается основному потоку, где сгенерированные строки и легенды копируются в сетку текстовых блоков. На этом генерация кроссворда завершена. Также может возникнуть ситуация, когда кроссворд не может быть сгенерирован (плохой дизайн кроссворда). Затем генерация прерывается с сообщением об ошибке.
Словарь выражений Создание индексированного словаря выражений обеспечивается классом CrossDictionary, который инициализирует список длин строк в конструкторе. Поэтому нам нужно указать параметр списка длин при создании экземпляра этого класса. Индексации словаря предшествует общедоступный метод createVocabulary, который запрашивает у базы данных все строки, длина которых соответствует записи в списке длин. После того, как база данных сделала необходимые выборки и завершила их, она отправляет данные в метод gen createVocabularyCompleted, который начинает индексацию словаря. Метод индексации работает по принципу 4.3, о котором говорилось в тексте выше. Другие общедоступные методы, которые реализует этот класс, включают: 27
• Поиск слов в словаре по регулярному выражению (маске) и составление списка. • Контроль ортогональных масок (используя предыдущий метод). • Создание списка легенд по выражению, найденному в кроссворде.
Список кроссвордов Страница со спискомкроссворд управляется классом ListOfCrosses. Конструктор этого класса вызывает метод для извлечения сохраненных кроссвордов из базы данных. Как только данные доступны, методы запускаются для создания графического списка кроссвордов, где каждый кроссворд имеет описание и кнопки «Перейти к задаче», «Удалить». Нажав на кнопку Удалить, вы перейдете к методу » » , который отправит запрос на удаление определенного кроссворда. Нажав на кнопку «Перейти к разгадке», вы будете перенаправлены на страницу с решением кроссворда. В URL-адресе передается параметр, содержащий идентификатор кроссворда в базе данных.
Решение кроссворда Страница решения кроссворда управляется классом DoCrossWord. Сначала запускается метод определения параметров URL. Этот метод обрабатывает идентификатор кроссворда в параметре и вызывает метод loadCrossWord для загрузки кроссворда из базы данных. Выполняется анализ кроссворда и на основе найденной информации создается графическая форма кроссворда. Опять же, кроссворд состоит из сетки и текстовых блоков. Ячейки легенд, тайн и пустых полок выделены цветом. При решении кроссворда пользователь может воспользоваться опцией просмотра всего решения или просмотра ошибок в кроссворде. При отображении решения делается резервная копия выполненного кроссворда и кроссворд заполняется решением, при возврате выполняется обратная процедура. При отображении ошибок неправильно заполненные поля окрашиваются в красный цвет. Для того, чтобы узнать, есть ли ошибки в кроссворде, мы поэтапно сравниваем оригинал с решением пользователя и раскрашиваем ошибочные клетки.
Публикация кроссворда Приложение предлагает три варианта публикации кроссворда: • прямая печать, • изображение в формате png, • документ в формате pdf. Нажатие кнопки «печать» обрабатывается методом, который вызывает диалоговое окно для выбора принтера «и параметров печати». Сохранение кроссворда в виде изображения или документа в формате PDF управляет методами, вызывающими диалоговое окно дляуказав расположение и имя файла. Для того, чтобы добиться того, что будет напечатан только кроссворд, а не внешний вид приложения, мы должны использовать объект Canvas на языке XAML, который будет родительским объектом сетки с текстовыми блоками и в дальнейшем работать только с ним. Далее мы конвертируем этот объект в изображение, которое либо сохраняем в файл, либо вставляем в сгенерированный pdf. Дополнительные библиотеки ImageTools и SilverPDF используются для преобразования объекта Canvas в изображение и создания PDF-файла.
Работа с базой данных Не удалось напрямую связаться с базой данных в приложении. Поэтому было необходимо создать сервис, который будет реализовывать запросы и запросы, направленные к базе данных. Это ограничение в целях безопасности при работе с базой данных. В сервисе реализованы следующие методы: • createVocabulary – для выбора слов выражений из базы данных. • LoadCrosses – загрузка кроссвордов из базы данных. • SaveCross – сохранение кроссворда в базе данных. • DeleteCross – удалить кроссворд из базы данных. • TakeCross — выбирает конкретный кроссворд из базы данных.
Тестирование приложения В этой главе описываются тесты, которым подверглось приложение после завершения реализации.
Тест скорости генератора
Последовательно были протестированы все размеры квадратных кроссвордов с разными секретами. Каждое измерение состояло из десяти частичных измерений, где каждый раз генерировался кроссворд с другим секретом. Все время было измерено, а результаты занесены в таблицу. Все тринадцать серий измерений прошли успешно. Время генерации можно увидеть в таблице 8.1. Трудно определить точное время генерации и тем самым уведомить пользователя о том, сколько времени займет создание кроссворда. Время генерации зависит от дизайна кроссворда и правильно выбранного секрета. Если при составлении кроссворда расположить легенды так, чтобы в кроссворде встречались все возможные длины строк, то время генерациисильно увеличится! Если мы добавим в кроссворд неподходящий секрет, может случиться так, что решение кроссворда не будет найдено. Номер измерения 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Размер кроссворда 3×3 4×4 5×5 6×6 7×7 8×8 9×9 10×10 11×11 12×12 13×13 14×14 15×15
Лучшее время 3,3 с 23,5 с 1 мин 33 с 4 мин 4 мин 29 с 5 мин 7 с 6 мин 25 с 7 мин 15 с 8 мин 25 с 11 мин 6 с 9 мин 38 с 9 мин 23 с 13 мин 30 с
Худшее время 4,1 с 27,1 с 2 мин 13 с 6 мин 41 с 6 мин 37 с 7 мин 2 с 12 мин 12 мин 59 с 13 мин 55 с 14 мин 31 с 16 мин 54 с 17 мин 11 с 20 мин 42 с
Таблица 8.1: Тест скорости генератора.
Среднее время 3,76 с 25,05 с 1 мин 42 с 4 мин 28 с 5 мин 40 с 5 мин 51 с 9 мин 15 с 10 мин 11 с 9 мин 34 с 12 мин 22 с 13 мин 30 с 12 мин 45 с 15 мин. 32 с
Заключение Целью данной работы было создание веб-приложения для генерации и решения кроссвордов. В настоящее время решение кроссвордов является очень популярным времяпрепровождением, особенно среди старшего поколения. Это интернет-приложение может помочь людям, которые нашли любовь в разгадывании кроссвордов, внести свой вклад в обогащение своей жизни. Для лучшего использования можно распечатать кроссворд, и если мы решим решить кроссворд онлайн, изменчивость размера кроссворда может быть использована для лучшего решения. Для создания кроссворда использовался алгоритм обратного отслеживания искусственного интеллекта и принцип переноса слов. Приложение было создано с использованием технологии Silverlight 4 и языка C#. При проектировании и реализации пользовательского интерфейса упор был сделан на его удобство использования, эффективность и интерактивность. Поэтому был создан и современный графический дизайн. Изучение технологии Silverlight дало мне новый взгляд на веб-приложения, а бесплатные материалы облегчили знакомство с проблемой. Продолжая разработку приложения, можно было бы сосредоточиться на оптимизации генератора сболее глубокая теоретическая база. Кроме того, было бы целесообразно реализовать в приложении функцию, которая позволяла бы генерировать кроссворды с заданной сложностью, генерируемые пока кроссворды достаточно сложны. Связь с базой данных проблематична при передаче больших объемов данных, дальнейшее развитие также могло бы пойти в этом направлении и, таким образом, сделать скорость передачи данных более эффективной. После того, как приложение было завершено, был установлен веб-хостинг, где приложение было размещено и свободно доступно для тестирования (http://www.crossword.asp2.cz). Только вот генерировать приложение не позволяет, потому что хостинг предоставляет слишком мало места для базы данных, а при малом количестве выражений не получается сгенерировать кроссворд. Пользователь может предложить кроссворд на основе, например, газеты и, таким образом, скопировать легендарные выражения, даже кроссворды могут быть созданы в этом приложении. Работа над этим проектом позволила получить новые знания и опыт работы с технологией, которую я еще не пробовал.
Содержимое DVD Все файлы, созданные во время разработки приложения (исходные файлы, изображения и т. д.), были записаны на прилагаемый диск. В корневом каталоге данные четко разделены на специально названные папки. Обзор содержимого диска: • Проект Silverlight, созданный в Visual Studio 2010. • Проект базы данных, созданный в Visual Studio 2010. • SQL-скрипт, содержащий словарь выражений. • Исходные файлы текстовой части бакалаврской работы. • Текстовая часть бакалаврской работы в формате pdf.
Рисунок B.1: Пользовательский интерфейс приложения.