Trivia — различия между версиями
Denisov (обсуждение | вклад) (→Пример) |
Denisov (обсуждение | вклад) (→Пример) |
||
Строка 83: | Строка 83: | ||
[[Файл:Trivia pict db2.png|left|300px]]Обратите внимание на содержимое полей таблицы. Используйте те же названия, ту же последовательность полей. Следует учитывать типы данных (INT, TEXT). Для избегания ошибок заполнения лучше отметить необходимые поля, как UNIQUE, AUTOINCREMENT, PRIMARY KEY. Это обеспечит автоматическое увеличение значений, где это необходимо и позволит не ошибиться в уникальности введенных параметров. С созданием БД сложностей возникнуть не должно, поскольку конструктор значительно облегчит работу. Не забывайте время от времени нажимать "Записать изменения", чтобы не потерять данные при закрытии.<br><br> | [[Файл:Trivia pict db2.png|left|300px]]Обратите внимание на содержимое полей таблицы. Используйте те же названия, ту же последовательность полей. Следует учитывать типы данных (INT, TEXT). Для избегания ошибок заполнения лучше отметить необходимые поля, как UNIQUE, AUTOINCREMENT, PRIMARY KEY. Это обеспечит автоматическое увеличение значений, где это необходимо и позволит не ошибиться в уникальности введенных параметров. С созданием БД сложностей возникнуть не должно, поскольку конструктор значительно облегчит работу. Не забывайте время от времени нажимать "Записать изменения", чтобы не потерять данные при закрытии.<br><br> | ||
[[Файл:Trivia pict db3.png|right|300px]]Приступим к заполнению содержимого. Вверху экрана выберем вкладку "Данные". В верхней части вкладки найдем список всех созданных таблиц. Выбрав конкретную таблицу, получим доступ к просмотру и редактированию содержимого. В первой таблице необходимо указать названия категорий. Строгость соблюдения названий (вплоть до пробелов) особенно важна, если планируется взаимодействие с сервером. Однако, в данном случае, наша БД локальна, поэтому допустимы произвольные названия, но стоит следить за соответствием количества категорий в базе и в объекте Trivia.<br><br> | [[Файл:Trivia pict db3.png|right|300px]]Приступим к заполнению содержимого. Вверху экрана выберем вкладку "Данные". В верхней части вкладки найдем список всех созданных таблиц. Выбрав конкретную таблицу, получим доступ к просмотру и редактированию содержимого. В первой таблице необходимо указать названия категорий. Строгость соблюдения названий (вплоть до пробелов) особенно важна, если планируется взаимодействие с сервером. Однако, в данном случае, наша БД локальна, поэтому допустимы произвольные названия, но стоит следить за соответствием количества категорий в базе и в объекте Trivia.<br><br> | ||
− | [[Файл:Trivia pict db4.png|left|300px]]Следующая таблица GTrivia_Localization, она будет самой простой и содержать лишь одно поле и два кортежа: en и ru. Перейдем сразу к 5-й и 6-й таблицам, содержащим наши вопросы и ответы. Здесь стоит быть внимательней при заполнении. Поле ID заполнится автоматически, поэтому на него не обращаем пока внимания. ExternalID при загрузке БД через сервер также заполнится автоматически уникальными значениями, но, в случае локальной базы, его значения можно указать и | + | [[Файл:Trivia pict db4.png|left|300px]]Следующая таблица GTrivia_Localization, она будет самой простой и содержать лишь одно поле и два кортежа: en и ru. Перейдем сразу к 5-й и 6-й таблицам, содержащим наши вопросы и ответы. Здесь стоит быть внимательней при заполнении. Поле ID заполнится автоматически, поэтому на него не обращаем пока внимания. ExternalID при загрузке БД через сервер также заполнится автоматически уникальными значениями, но, в случае локальной базы, его значения можно указать и вручную. Следите за их уникальностью в пределах поля, используйте комбинации букв и цифр. В поле Question вносим вопросы для нашей игры. Для примера внесено 15 уникальных вопросов и дальше значения повторяются. Естественно, что в реальной игре все вопросы должны быть уникальны, но, в качестве тренировочного примера, такой способ также подойдет. Почему нельзя было ограничиться лишь 15-ю вопросами? Вспомним, что в игровом примере есть кнопка ''replace''. Она подбрасывает новый вопрос той же категории. В случае, если бы база была заполнена впритык, то при нажатии ''replace'' Вьюер выдал бы ошибку, что не нашел дополнительный вопрос этой категории. Поэтому нужен запас. Создавая свой пример можете покреативить и придумать свои категории и много уникальных вопросов к каждой из них.<br><br> |
Взгляните на поле "Answers". Перечислим его уникальные особенности: | Взгляните на поле "Answers". Перечислим его уникальные особенности: | ||
*состоит из четырех слов | *состоит из четырех слов |
Версия 09:55, 26 ноября 2015
Основные сведения
Trivia - объект, реализующий логику игр по типу "Кто хочет стать миллионером?".
Особенности
- содержит поле для вопроса
- содержит поля для 4-х ответов. Число этих полей изменять нельзя
- может иметь связь с объектом типа economics
- вопросам можно установить сложность
Параметры
Кроме стандартных параметров, свойственных всем объектам, Trivia имеет дополнительные поля для настройки.
- количество категорий (catNum) - указываем число категорий для вопросов. Примеры категорий: страны, животные, музыка.
- вопрос (textQuest) - указываем текстовый объект , в котором будут отображаться вопросы.
- ответ 1 текст (txtA1) - указываем текстовый объект для отображения ответа
- ответ 2 текст, ответ 3 текст, ответ 4 текст (txtA2, txtA3, txtA4) - здесь размещены поля для текстовых объектов остальных ответов
Текстовые объекты для вопроса и ответов необходимы для визуализации подгружаемого текста. Сами они не содержат ссылок
на текстовый редактор и текст в них для этих целей не прописывается (хотя можно внести вручную значения по умолчанию)
- ответ 1 индикатор (objA1) - здесь указывается машина состояний для индикации верного или неверного ответа. Машина состояний отдельно создается в проекте, ей указывают состояния off, wrong, right (не обязательно называть их именно так, однако рекомендуется в целях унификации). Если сложность машины трудно уместить в эти состояния, то добавляются дополнительные. Здесь можно задать изменение цвета, прозрачности, масштаба для ответа, указать изменения других объектов.
- ответ 2 индикатор, ответ 3 индикатор, ответ 4 индикатор (objA2, objA3, objA4) - аналогично для всех остальных ответов создаем и описываем собственные машины состояний
- текущий вопрос (objCurrent) - машина состояний для индикации текущего вопроса
- количество вопросов (qNum) - количество вопросов в раунде. Следует учитывать, что для каждого вопроса необходимо использовать "индикатор для миллионера", добавляемый правой кнопкой мыши в свойствах Trivia. Таким образом qNum не может превышать число "индикаторов для миллионера"
- хранить последних (usedlistsize) - сколько последних заданных вопросов нужно хранить
- current_question - номер последнего вопроса, записывается при выигрыше или проигрыше ( при проигрыше сбрасывается вниз до первой несгораемой суммы);
- correct - номер правильного ответа для текущего вопроса ( начиная с 0);
Добавляемые параметры
индикатор для миллионера (indicator) - используется для настройки свойств конкретного вопроса в дереве вопросов,
имеет несколько настраиваемых параметров:
- объект (obj) - здесь указывается машина с состояниями on и off, в которых настраиваются свойства отвеченных и не отвеченных вопросов
- несгораемый (fixed) - является ли несгораемой заработанная сумма
- монеты (res1) - размер награды за правильный ответ
- min сложность (min) - минимальная сложность вопроса
- max сложность (max) - максимальная сложность вопроса
- объект (obj) - машина состояний, запускаемая в случае победы
- состояние (st) - состояние, назначаемое машине
- объект (obj) - машина состояний, запускаемая в случае поражения
- состояние (st) - состояние, назначаемое машине
Состояния
Основные состояния:
- choose_category - генерируем категорию ( объект _категория_ (catMachine) должна иметь состояния cat0,cat1 ...);
- start_single - начать игру, передавать после выбора категории;
- answer_1 - передаём при нажатии на первый ответ;
- answer_2 - передаём при нажатии на второй ответ;
- answer_3 - передаём при нажатии на третий ответ;
- answer_4 - передаём при нажатии на четвёртый ответ;
- replace - заменить один вопрос;
- fiftyfifty - убрать два неправильных ответа ( у 'кнопок' должно быть состояние hide );
- load - загрузить игру с последней несгораемой суммы;
- question - сгенерить следующий вопрос ( после ответа на предыдущий);
Обратная связь ( важно - отправлять только перед переходом на новый вопрос или выходе из игры - не отправлять статистику по нажатию на кнопку, пользователь может раз 5-6 кликать like и dislike):
- like - лайкнуть текущий вопрос, отправляется на сервер;
- dislike - дизлайкнуть текущий вопрос, отправляется на сервер;
- resetlike - сбросить лайк на текущий вопрос, отправляется на сервер;
Пример
Загрузим проект и откроем с помощью нашего редактора файл с именем project и типом документа seproj. Проект содержит всего
лишь две сцены, одна из которых не имеет визуального представления и хранит объект типа options с настройками. Все взаимодействие с пользователем происходит через сцену Main_stg. Запустим ее и убедимся, что проект работает. Появилось колесо, предлагающее выбор категории. От выбранной категории будет зависеть тематика задаваемых вопросов.
Нажмем кнопку choose_category. После вращения колеса случайным образом выберется категория, ее название появится внизу. Вместе
с надписью появится также кнопка play_category, которая отобразит номер предстоящей категории. Соглашаемся с выбором системы
и нажимаем на кнопку. Открывается знакомый экран "кто хочет стать миллионером?" с вопросом и 4-мя ответами, слева показан прогресс игрока и заработанные монеты. Желтым определены обычные вопросы, а белым цветом выделены 3 вопроса, ответ на которые устанавливает несгораемую сумму.
Логика игры достаточно известна. Задается вопрос и предлагается выбрать лишь один из 4-х возможных ответов. Каждому вопросу соответствует своя стоимость - количество монет, которые можно получить за правильный ответ. Для простоты число подсказок ограничено. Есть подсказка 50/50, убирающая два неверных ответа. Дополнительно установлены кнопки replace для обновления текущего вопроса и кнопка up для продвижения по вопросам вверх. В реальной игре можно их убрать, либо наоборот - расширить за их счет функционал игры. Давая правильные ответы, игрок увеличивает свой заработок. Если же он делает ошибку, то остается ни с чем (если отвечал на вопросы от 1 до 5) или остается с последней заработанной несгораемой суммой.
В случае верного ответа появляется кнопка next, нажав на которую попадаем в следующий вопрос. Она аналогична кнопке up, нажатой один раз. Кнопка cheat включает отображение варианта с верным ответом. При смене вопроса кнопками next, replace или up поле отобразит актуальный верный вариант.
Прогресс с информацией о том, сколько игрок заработал и на какие вопросы уже ответил, располагается в левой части экрана. Основой является таблица шириной в одну и высотой в 15 ячеек в соответствии с 15-ю вопросами. Вопросы, на которые еще не дан ответ, имеют более тусклый оттенок. По мере правильных ответов они становятся ярко окрашенными. Поскольку поле "текущий вопрос" в объекте Trivia мы оставили пустым, то в левой панели он не имеет индикации. Но можно добавить в это поле дополнительную машину состояний, чтобы различать будущие вопросы, пройденные и текущий.
Внизу экрана располагается два поля с информацией о заработанных на данный момент монетах и номере последнего правильно отвеченного вопроса. Данные поля актуальны и при использовании кнопкой up.
Рассмотрим подробнее связь между элементами проекта. Откроем свойства объекта Trivia. В разделе "категории" используется машина category_set. Посмотрим на ее состояния. В начальном состоянии эта машина делает невидимой кнопку start_single, запускающую игру после выбора категории. Как только категория выбрана - запускается одно из 16-ти состояний category_set. Состояния похожи между собой. Они блокируют кнопку choose_category, присваивая ее видимости нулевое значение vis=0. Поскольку в Trivia указаны только 7 категорий, а на колесе их 16, то возможны повторы.
Поля questions_text и years_1 (2, 3 и 4) не содержат текста непосредственно. Через них идет отображение текстовых ресурсов, передаваемых объекту Trivia. Поля с индикаторами ответа (indicate_answer1,2,3,4) с помощью машин состояний определяют, как будет изменяться поле ответа, если он был верным или не верным. Здесь мы используем мигание зеленым для верного выбора и красным для ошибки.
Если проверить несколько разных полей "индикатор для миллионера", то видно, что вопросы различаются по сложности и значению поля "монеты". Последними полями указаны "все отвечено" и "проигрыш". Здесь была использована одна небольшая машина состояний. Ее состояние win запускается в случае победы и активирует объект типа flyer (патикл, или летун), который создает эффект победного фейерверка. Состояние lose включится в случае неверного ответа. Откроем машину win_lose и посмотрим не ее состояния внимательно. Состояние lose изменяет состояние другой машины - side_panel, которая управляет отображением прогресса. Через 4000 ms после поражения таблица с прогрессом и заработанными баллами становится красной. Возврат в состояние выбора категории и начала нового раунда происходит кнопкой reload_btn, запускающей машину reload. На игровом экране она имеет вид красного крестика в правом верхнем углу.
Возникает вопрос. От куда же Trivia берет содержимое новых вопросов и ответов на них. Для этого еще раз заглянем в папку с нашим проектом. Обратим внимание на файл с названием viewer и расширением .db (data base). Для просмотра его содержимого можно установить DB Browser for SQLite или любую похожую программу. С помощью этой же программы можно будет создавать свой вариант вопросов и ответов для игры "Кто хочет стать миллионером?".
Создадим свою базу данных с вопросами и ответами. Зайдем в DB Browser for SQLite откроем Файл -> Новая база данных или просто нажимаем Ctrl+N. В поле "Имя файла" указываем viewer.db. Жмем на кнопку "Создать таблицу", название у нее будет "GTrivia_Category". Эта таблица содержит два поля с ID категорий и уникальными названиями конкретных категорий. Подробнее можно видеть на рисунке.
Обратите внимание на содержимое полей таблицы. Используйте те же названия, ту же последовательность полей. Следует учитывать типы данных (INT, TEXT). Для избегания ошибок заполнения лучше отметить необходимые поля, как UNIQUE, AUTOINCREMENT, PRIMARY KEY. Это обеспечит автоматическое увеличение значений, где это необходимо и позволит не ошибиться в уникальности введенных параметров. С созданием БД сложностей возникнуть не должно, поскольку конструктор значительно облегчит работу. Не забывайте время от времени нажимать "Записать изменения", чтобы не потерять данные при закрытии.
Приступим к заполнению содержимого. Вверху экрана выберем вкладку "Данные". В верхней части вкладки найдем список всех созданных таблиц. Выбрав конкретную таблицу, получим доступ к просмотру и редактированию содержимого. В первой таблице необходимо указать названия категорий. Строгость соблюдения названий (вплоть до пробелов) особенно важна, если планируется взаимодействие с сервером. Однако, в данном случае, наша БД локальна, поэтому допустимы произвольные названия, но стоит следить за соответствием количества категорий в базе и в объекте Trivia.
Следующая таблица GTrivia_Localization, она будет самой простой и содержать лишь одно поле и два кортежа: en и ru. Перейдем сразу к 5-й и 6-й таблицам, содержащим наши вопросы и ответы. Здесь стоит быть внимательней при заполнении. Поле ID заполнится автоматически, поэтому на него не обращаем пока внимания. ExternalID при загрузке БД через сервер также заполнится автоматически уникальными значениями, но, в случае локальной базы, его значения можно указать и вручную. Следите за их уникальностью в пределах поля, используйте комбинации букв и цифр. В поле Question вносим вопросы для нашей игры. Для примера внесено 15 уникальных вопросов и дальше значения повторяются. Естественно, что в реальной игре все вопросы должны быть уникальны, но, в качестве тренировочного примера, такой способ также подойдет. Почему нельзя было ограничиться лишь 15-ю вопросами? Вспомним, что в игровом примере есть кнопка replace. Она подбрасывает новый вопрос той же категории. В случае, если бы база была заполнена впритык, то при нажатии replace Вьюер выдал бы ошибку, что не нашел дополнительный вопрос этой категории. Поэтому нужен запас. Создавая свой пример можете покреативить и придумать свои категории и много уникальных вопросов к каждой из них.
Взгляните на поле "Answers". Перечислим его уникальные особенности:
- состоит из четырех слов
- слова разделены точкой с запятой без пробелов
- правильный вариант ответа находится на первом месте
Trivia сама раскидает варианты ответа по нужным ячейкам, перемешивая каждый раз, однако внутри таблицы GTrivia_Question ответы должны лежать в строгой последовательности: сначала верный ответ, а потом все остальные.
Поле "Difficulty", как ясно из названия, хранит сложность каждого вопроса. Это позволяет задавать в игре сначала простые вопросы, а уже в процессе делать их все сложнее. Вспомните, что поля min сложность и max сложность заполняются для каждого вопроса в объекте Trivia.
Не стоит беспокоиться, что пока не заполнены таблицы 3 и 4 (GTrivia_QuestionCategory). Они являются связующими между категориями и таблицами с вопросами/ответами. В первом поле указываются ID вопросов. Все верно, значения в этом поле повторяются. В данном случае это сделано намеренно, чтобы, одни и те же вопросы могли попасть сразу в несколько категорий. Действительно, вопрос о том, в каком году была написана песня, можно внести в категории История, Музыка, Искусство. Во втором поле указываем к какой категории можно отнести вопрос. В примере это сделано случайно, в реальной игре стоит следить за соответствием.
Не забудем нажать кнопку "Записать изменения" и запустим игру повторно. Попробуйте разные категории, подсказки ответов и 50/50. При желании расширьте пример за счет ограничения количества подсказок, добавив дополнительные монеты (кристаллы) для их покупок.
S:\!MOBILE\!!!EditorGames\TRIVIA_TEST