…ничего не слышу…
Получив примерное представление о том, что из себя должна будет представлять игра, я начал этап прототипирования. На первую играбельную версию ушло меньше недели работы по вечерам, и она включала в себя:
генерацию буквенного поля. Задача с вероятностью выпадения решилась проверенным годами балансом - игра Скрэббл сделала все за нас своим распределением количества букв.
-
отслеживание готовых слов по вертикали сверху вниз и по горизонтали слева направо. Причем сразу же всплыло несколько проблем:
во-первых, на случайно сгенерированном поле образовывались слова, и игра начинала играть сама в себя;
во-вторых, в линиях с буквами могло появиться несколько пересекающихся слов (какое игра должна выбрать?).
перемещение букв по полю. Вроде все просто, но и тут тоже не без проблем - задуманная изначально механика “как в матч-три” подразумевает перемещения элементов на соседние места, что в нашем случае превращает в ад попытку составить длинные слова, пытаясь переместить буквы из одного края поля в другой.
проверку поля на появление новых составленных слов после каждого хода. К проблемам предыдущего пункта прибавилась опасность того, что нужные буквы могут быть уничтожены пока ты делаешь несколько перемещений.
уничтожение составленных слов.
добавление новых букв на место уничтоженных. И опять проблема из второго пункта с тем, что игра проходит сама себя.
систему начисления очков за уничтоженные буквы. Опять же, спасибо Скрэббл за проверенную временем систему подсчета очков.
локальные лидерборды.
Даже со всеми появившимися проблемами и недочетами исходного дизайна, в прототип уже можно поиграть и получить какое-никакое удовольствие. Но проблемы есть, и их надо решать! Часть из них по сути была чисто техническая и превратилась в баги, а из-за других пришлось немного посидеть над дизайном.
Проблема с пересекающимися словами, на первый взгляд, не кажется и проблемой: выбирай всегда слова которые дают больше всего очков - и дело в шляпе. Но с тактической точки зрения игрок может копить буквы для следующего хода, откладывая нужные и уничтожая ненужные в составе более дешевых слов. Для этого введем дополнительный шаг, который позволяет игроку решать спорные ситуации на свое усмотрение, но также оставим в настройках возможность автоматически проходить эти моменты.
Проблема с перемещением букв представляется более серьезной, потому что классическая система матч-три в нашем случае не работает! Конечно, можно добавить какой-нибудь режим остановки времени, не дающий игре считывать слова, пока все перемещения не будут завершены. Но тогда проще было бы полностью отключить эту функцию и набирать слова из букв просто по всему полю.
Для нашей задумки как минимум нужна возможность перетаскивать буквы из одного края поля в другой. Да, это не решает проблему целиком, но сокращает количество перемещений для составления слов в несколько раз.
И как раз в процессе реализации, пощупав всё это руками, я осознал, что перемещая буквы из одного края поля в другой, мы же вместе с тем перемещаем и все остальные буквы. Т.е. при должной сноровке и стратегии мы можем за одно перемещение изменить вообще всё поле. И это решает нашу проблему полностью! Да, от матч-три остается гораздо меньше, но зато появляется куча других, более тактических элементов.
Но в словесной игре геймплей это, увы, далеко не всё. Это, можно сказать, половина дела. Основа игры - это слова, а значит нужен словарь, с которым мы будем работать. Для тестов было достаточно легко найти первую попавшуюся базу в интернете. Но в ней оказалось много слов, которые не являются “нарицательными существительными в единственном числе и именительном падеже”. Кроме того, там были еще и повторяющиеся слова, и с символами из разных языков, оставшимися после оцифровки. Возможно, сейчас можно было бы прибегнуть к помощи ChatGPT для решения этой задачи, но тогда все вопросы пришлось решать вручную.
Одной из задач, было сделать игру с поддержкой нескольких языков, однако мои знания не так обширны, увы. Поэтому для начала надо было добавить хотя бы два - русский и английский. Ну и поддержать возможность подключения новых языков в дальнейшем.
Для русского языка я посматривал в сторону двух словарей - толковых словарей Даля и Ожегова. Но между ними разница почти в сто лет, и у Даля слишком много устаревших слов. Так что ограничился только словарем Ожегова. Тем более, что все равно все слова необходимо было отбирать вручную - оставлять только существительные, убирать описания и т.д. и т.п. С этой работой мне помогали друзья в свободное время, с родной речью, поди, проще справиться и понять, что из предложенного “нарицательное существительное в единственном числе и именительном падеже”. А вот с английским словарем дела обстояли хуже. Да, я аналогично русскому нашел словарь с кучей слов и описаний к ним, но при разборе встретилось слишком много незнакомых мне слов, а за каждым в переводчик не набегаешься.
Время идет, а дела надо делать… Процесс продвигается очень медленно и начинает сильно надоедать. Что делать? Правильно - заставим машины работать на нас! Да, пусть ChatGPT еще загорает где-то на этапе прототипа в Сан-Франциско, но наша достаточно рутинная задача имеет определенную последовательность, а значит ее можно автоматизировать! Разбор словаря проходит по простому циклу:
взять строчку текста,
разбить ее на слова,
убрать уже добавленные в словарь слова,
убрать слова которые мы ранее уже посчитали неподходящими,
оставшиеся слова либо добавить в словарь, либо отметить как неподходящие,
взять следующую строчку текста.
Не выглядит как что-то очень сложное, но когда тебе нужно обработать несколько десятков тысяч строк, это кажется уже пыткой. Поэтому напишем программу, которая осуществляет этот цикл. Тогда вся работа человека будет заключаться в том, чтобы на экране выбирать слова и отправлять в одну из двух категорий - в словарь или в корзину.
И вроде бы уже хорошо, уже все идет в разы быстрее, но определение категории все еще занимает достаточно много времени. И тут сильно не автоматизируешь, конечный выбор все равно за человеком.
Чтобы еще облегчить себе работу, добавим в программе гиперссылки, по которым можно найти перевод в интернете и значение слова, если вдруг оно окажется незнакомым. Да, она просто открывает нужную ссылку в поисковике или переводчике, зато не нужно каждый раз копировать/вставлять текст/набирать вручную.
И вот теперь работа пошла! Все еще не мгновенно, но теперь она не кажется такой уж и невыполнимой - пару-тройку недель работы (всего-то) и готово - у нас есть словарик! А точнее даже два - для двух разных языков (про большее количество языков я пока больше не хочу ничего слышать)!
В процессе подготовки словариков я даже в этом увидел какой-то элемент игры и какую-то практическую пользу для себя - в изучении и понимании языка. И возникла мысль - а что, если в игру добавить небольшой образовательный элемент? Точно так же как у меня возникала необходимость понять, как переводится слово, или что же оно значит, так и у игрока после составления могут возникнуть такие вопросы. Порой ты помнишь какое-то слово, которое где-то когда-то услышал, но постоянно забывал посмотреть, что же оно значит.
Ну и чего греха таить, полностью избавиться от варианта автоматического уничтожения слов не удалось. Читать мысли пока мы не научились, увы, а проверка поля на составленные слова происходит после каждого хода. Добавлять полноценный образовательный режим, где можно будет прямо в игре посмотреть перевод на нужный язык и прочитать объяснение каждого составленного слова, я не стал - я не враг своему здоровью. Однако достаточно дешево можно использовать тот же механизм, что и в программе для составления словаря - гиперссылки. Да это будет не полноценное обучение, но уже не надо открывать браузер, вручную набирать текст - автоматизация! В настройки игры добавим варианты для выбора языка, на который хотим получить перевод, а также варианты переводчика и поисковика, которыми хотим пользоваться. Таким образом, всего пара десятков строк кода - и добро пожаловать в мир образовательных игр.
Далее пришло время нарастить немного мяса на проекте!
Во-первых, нужно поощрять игрока, тем более у нас уже есть система очков и лидербордов. Легкий мозговой штурм, и появляется простой список бонусов: за составление длинных слов, за количество слов за ход, за уничтоженные строчки, за уничтоженные столбцы, за этапы очистки поля, за всё уничтоженное поле. И в итоге все они и входят в игру, потому что чем больше тем лучше: игрока надо любить, игрока надо подталкивать, игрока надо хвалить.
Во-вторых, надо дать игроку возможность страдать - добавить разных режимов. Т.е. базовая механика есть, она работает, теперь можно добавить модификаторов и усложнений. В итоге, помимо имеющегося “медитативного” режима, когда тебя ничто не ограничивает и не подгоняет, добавим еще 2: пошаговый режим и режим на время. Тут всё следует из названия, простые механики ограничений для повышения разнообразия геймплея. Но получилось больше разнообразие ради разнообразия, потому что, как оказалось в итоге, игрокам меньше всего хотелось дополнительно напрягаться в игре, где и так нужно выискивать слова из кучи букв и двигать их по всему полю, продумывая траекторию перемещения! Стратегия в стратегии с таймером, нагнетающим обстановку, не сработала. Увы, популярности эти режимы не получили. Но если игроку очень хотелось страдать, то игра давала ему эту возможность!
Ну и в-третьих, игроку нужна прогрессия, задания. Но когда ты не знаешь - игрок учит язык или просто составляет слова, тяжело правильно оценивать его прогресс, если это вообще возможно. Появилась идея добавить в игру еще режимов, но которые будут работать на прогрессию - заставим игрока выучить что-нибудь новое (если он, конечно, захочет) и проконтролируем этот процесс (добро пожаловать обратно в образовательный режим). Сначала была идея добавить режим изучения азбуки Морзе, но от нее пришлось отказаться, т.к. отрисовывать в небольшом квадратике предназначенном для букв точки и тире не получится просто и эстетично. Но идея была настолько завораживающей, пусть и уводящей от изначальной концепции “усложненного буквами матч-три” к около образовательному проекту, что сразу за ней пришли еще две - язык Брайля (рельефно-точечный тактильный шрифт, предназначенный для письма и чтения незрячими и плохо видящими людьми) и язык жестов (в основном используется в культуре глухих и слабослышащих с целью коммуникации).
Изначально это был просто режим с полной заменой букв (как будто бы игра на другом языке). Но когда ты не знаешь языка, это превращается в непроходимую задачу. И тут мы вспоминаем, зачем мы все это задумали - прогрессия! И она сюда замечательно ложится - постепенное открытие букв в выбранном режиме после выполнения небольших мини квестов на составление слов с последней доступной буквой режима. Да, это вряд ли можно назвать полноценным обучающим режимом, но в процессе открытия новых букв формируются новые нейронные связи в мозгу, а это уже маленькая, но победа!
И вот теперь, когда игра обрела вес, пришло время определиться с тем, чтобы игра обрела лицо.