125 английских слов и мультиплеер
Казалось бы, составление кроссворда — простейшая задача, для самой младшей школоты. «Примитивная логика, за час можно запрограммировать» — думал я пару месяцев назад. Спустя выходные безудержного кодинга в гугл щитс и пол тетради в клетку оно все таки получилось. Не знаю зачем, назовем это хобби. Еще через пару дней, наигравшись составлением всевозможных кроссвордов, я скормил этому ИИ английский частотный словарь, подумал, что может получиться что-нибудь полезное и забросил.
А потом, началось СамиЗнаетеЧто и снова нашлось время на творчество. Представляю кроссворд из самых популярных английских слов с мультиплеером «Проверь свой инглиш, амиго». Юзер френдли интерфейс адаптирован под Full HD монитор, если у вас не влазит, поставьте масштаб 75%.
Как оно работает
Не уверен, что все нижеописанное вам пригодится, но как говорил мой профессор в универе: “Не было публикации — не было научной работы”. Словом это для тех, кто любит заглядывать под капот и разбираться, как оно работает, ну и для меня в старости, чтобы ворчать, что можно было и поинтересней прожить.
Скрипты использовались только для автоматического составления кроссворда из набора слов, весь геймплей реализован стандартными формулами.
Алгоритм составления кроссворда:
- Из словаря удаляются слова короче 4 букв и омонимы, всякие who the her и дубликаты нам не нужны.
- По середине поля вставляется случайное слово и начинаются итерации.
- Каждая вертикаль и горизонталь поля записывается в следующем виде: , _,, _,, _,, _,, _,, _,, D,, =,, =,, D,, _ где: _ клетка, в которую можно поставить любую букву; = клетка, в которую нельзя ставить буквы (будут неприятные касания с другими словами); D (или другие буквы) клетка, в которой уже стоит буква, нужно ее учитывать при подборе слов.
- Из каждой записи выкидываются = и остаются участки-шаблоны для подбора слов.
- Шаблоны преобразуются в примерно такие регулярные выражения [A-Z]{0,1}E[A-Z]{1}D[A-Z]{1}H[A-Z]{0,4} по которым подбираются слова из словаря. Причем сначала берутся шаблоны с наибольшим количеством букв, то есть слова подбираются так, чтобы они образовывали как можно больше пересечений с существующими словами. Если в словаре нашлось слово подходящее под данный шаблон, он вписывается в поле, удаляется из словаря и возвращаемся к п. 3. Если подходящего слова в словаре не нашлось, берется следующий шаблон и так пока не переберем все. Если не удалось подобрать слово ни под один шаблон, значит в словаре нет слов, которые можно вписать в поле, составление кроссворда закончено.
Для реализации геймплея потребовалось поле ввода слов и 3 игровых поля:
- поле 1: решенный кроссворд (в клетках стоят буквы);
- поле 2: этих же клетках стоят слова, проходящие через клетку (всего через каждую клетку может проходить 2 слова);
- поле 3: в нем высвечиваются слова. Единственное, которое видят игроки, поля 1 и 2 на скрытых листах.
То есть каждой клетке поля 3 есть соответствующая клетка с буквой в поле 1 и клетка со словами в поле 2. В каждой клетке поля 3 стоит формула, проверяющая, есть ли в поле ввода слово, которое указано в соответствующей клетке поля 2. Если есть, то в клетку поля 3 подтягивается буква из поля 1.
Если вы дочитали до сюда, то наверное вам и так понятно (или уже не важно), что визуальные эффекты подсветки найденного слова сделаны условным форматированием, а перевод введенных слов встроенной формулой googletranslate.
Вот собственно и всё. Все скрипты и скрытые листы в документе, будут доступны если сделаете копию.
P.S. Не стоит так ворчать, старина, это было не бесполезно. В конце концов в этом проекте ты разобрался с регулярными выражениями, наверняка ведь они пригодились в будущем.