Развитие SIGame. Модель вопроса

Oct 16, 2022 01:08


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

(Небольшое дополненение к предыдущему тексту: мы считаем, что все участники начинают игру одновременно; мы не будем рассматривать ситуацию добавления игроков в процессе игры. В то же время допускается, что часть участником может в процессе игры выбывать из соревнований).

Розыгрыш каждого вопроса не зависит от розыгрыша предыдущего вопроса и определяется только типом вопроса и игровой конфигурацией. (В будущем возможны отходы от этого правила - например, допустима блокировка кнопки игрока на текущем вопросе из-за неверного ответа на предыдущий; но тогда эту информацию нужно вводить в состав конфигурации игры, и мы пока не будем этого делать).

Как я уже писал, мы не будем давать неограниченную гибкость в настраивании того, как разыгрывается вопрос игры. Сделаем расширяемую, но ограниченную модель: отыгрыш каждого вопроса - это сценарий, состоящий из набора шагов и переходов между ними (пока можем считать, что шаги отыгрываются строго последовательно). Будут иметься несколько типов шагов, которые можно комбинировать в составе сценария вопроса. За счёт этих комбинаций и можно будет получать новые правила игры. Добавление новых типов шагов позволит гибко расширять возможности игрового движка. А встроенный набор готовых шагов уже должен обеспечивать неплохую гибкость.



(В настоящий момент отыгрыш вопроса также представляет собой сценарий. Но его шагами могут быть лишь различные типы контента, отображаемые друг за другом. Мы расширяем эту модель).

Каждый шаг - это заранее запрограммированный алгоритм действия для движка игры. По некоторым правилам происходит какое-то действие; что-то изменяется. Шаги могут иметь параметры, за счёт чего заданные ими действия можно донастраивать.

У любого вопроса в целом имеется один встроенный параметр - его номинальная стоимость (N).

В процессе розыгрыша вопроса в игре помимо общей конфигурации существуют дополнительные параметры состояния, которые могут меняться внутри розыгрыша вопроса при выполнении шагов. К ним относятся:

  • множество игроков P, имеющих право ответа на вопрос (игроки, которые потенциально могут давать ответ, но не обязан это делать);
  • множество игроков A, фактически дающих ответ на вопрос (при попадании в эту категорию игроки уже становятся обязанными давать ответ);
  • стоимость позитивного (S+) и негативного (S-) ответа на вопрос (может отличаться для каждого из отвечающих участников).

По умолчанию считаем, что P - это все игроки в игре. Множество A пустое. А S+ = S- = N.

Шаги в процессе выполнения требуют от игры что-то отображать; менять значения параметров и конфигурации; что-то спрашивать у игроков и проверять их ответы.

Сценарий классического вопроса в SIGame при таком подходе можно представить как:

То есть мы просто указываем, что сначала на экране нужно выдать некий контент, затем - определить отвечающего при помощи нажатия кнопки (в процессе этого шага как раз и определяется игрок, фактически отвечающий на вопрос - значение множества A, состоящего из одного человека, - а затем выясняется его ответ и проверяется его валидность) и, наконец, на экран выдаётся правильный ответ. Шаг askAnswer сложный; он допускает обращение к другим участникам, если ответ текущего игрока оказался неверным (с постепенным исключением неверно ответивших из множства P). Но мы не будем пока раскрывать всю эту сложность в виде отдельных шагов и циклов, считая его просто таким атомарным способом розыгрыша вопроса.

Шаг типа content просто отображает различный контент (объекты типа atom) и не меняет состояние игры.

Но задавать для каждого вопроса в игре сценарий его отыгрыша неудобно. Для большинства вопросов сценарии будут типичными. Поэтому логично определить сценарий для вопроса где-то отдельно и сослаться на него в самом вопросе. А тип вопроса тогда и будет определяться общим сценарием.

Тип вопроса может иметь дополнительные параметры, которые будут определяться в конкретном вопросе.

В этом случае сценарий для нашего классического вопроса начинает выглядеть так:

Этот сценарий больше не привязан к конкректным текстм вопроса и ответа, и теперь он содержит ссылки на фрагменты question и answer, которые будут определены в конкретном вопросе:

Текст вопроса

Текст ответа

Таким образом, можно определить сценарии для всех типов вопросов, использующихся в SIGame. Эти сценарии будут встроены в игру; их не потребуется задавать явно. А если захочется создать какие-то специфические правила, всегда можно будет разработать и внедрить собственный сценарий.

Опишем словесно сценарии для существующих типов вопросов SIGame.

  1. Классический вопрос мы уже описали. Он состоит из отображения контента вопроса, затем определения отвечающего при помощи кнопки с постепенным сужением списка потенциальных отвечающих и отображения контента ответа.
  2. Вопрос со ставкой: мы сначала определяем отвечающего при помощи выставления ставок по очереди и выбора игрока с наибольшей ставкой. Далее отображем вопрос; спрашиваем ответ у отвечающего и отображаем ответ.
  3. Вопрос с секретом: определяем отвечающего на основании решения выбирающего. Задаём новую стоимость вопроса. Далее отображем вопрос; спрашиваем ответ у отвечающего и отображаем ответ.
  4. Вопрос без риска: задаём отвечающего равным выбирающему. Задаём удвоенную положительную стоимость вопроса и нулевую отрицательную. Далее отображем вопрос; спрашиваем ответ у отвечающего и отображаем ответ.
  5. Финальный вопрос: определяем отвечающих как всех игроков, имеющих положительную сумму. Задаём новую стоимость вопроса для каждого игрока на основании его скрытой ставки. Отображем вопрос; в закрытом режиме собираем ответы у отвечающих; проверяем ответы игроков; отображаем правильный ответ.

Таким образом, в рамках перехода на новую модель первым делом нужно будет реализовать новый движок для отыгрыша вопроса; поддержать в нём шаги, встречающиеся в SIGame; и заложить в игру встроенные типы сценариев. После этого можно уже будет поддержать возможность создания собственных сценариев из набора шагов.

Уже этот подход со встроенными типами позволит расширить возможности игры: можно будет отыграть "финальный" вопрос где-то в середине обычного раунда. Заметьте, что отыгрыш финального вопроса никак не привязан к удалению тем из раунда. Это совершенно разные вещи; за счёт разрубания таких связей мы и обеспечим гибкость правил игры.

На втором этапе в игру будут добавлены новые типы вопросов, которые позволят проводить на базе SIGame аналоги других интеллектуальных соревнований.

Существующие пакеты вопросов должны продолжать работать; они будут конвертироваться в новый формат на лету.

Интеллектуальные игры, СИ

Previous post Next post
Up