Оглавление "Программирование для игр"

Переместимся ближе к тематике нашего интернет-магазина MitinoGame и создадим мобильное приложение для проверки знаний игровых консолей. Ваши друзья и знакомые считают себя большими знатоками данной области? Вы можете проверить это, и повеселиться вместе с ними. Перед продолжением чтения предлагаю вам проверить свои знания и ответить на 5 вопросов. Для этого запустите проект и перейдите на экран Шаблон викторины.

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

В самом простом случае викторина представляет собой список вопросов и ответов в текстовой форме, среди которых нужно выбрать один. Для её реализации потребуется два списка – вопросы и ответы. Наиболее функциональным и удобным в работе является список объектов, который несложно получить из данных в формате JSON. Этот формат удобен для обмена данными, а для редактирования лучше подходят табличные редакторы. В этом случае последовательность действий следующая:

  • Создать данные в Excel
  • Конвертировать эти данные в JSON
  • Получить объекты из JSON
  • Работать со свойствами объектов

Можно ли в тексте вариантов ответов закодировать правильный ответ так, чтобы пользователь его не видел? Можно. Для этого в текст правильного ответа добавляется невидимый символ, например, невидимый плюс. При этом нужно защитить поле от копирования. В противном случае особо талантливый и одарённый товарищ может скопировать строку, подсчитать число символов, выявить несоответствие и догадаться о секрете, открывающим двери для правильного ответа на все вопросы.

Более универсальным, наглядным, защищённым, но и более сложным вариантом является создание дополнительного свойства, которое будет содержать индекс правильного ответа.

Нужно ли ставить максимальную защиту от несанкционированного доступа к правильным ответам? Это зависит от ценности информации. Для развлекательного теста без получения материальной выгоды нет смысла городить базу данных и сложную систему защиты для доступа к правильным ответам. Маловероятно то, что какой-нибудь умник захочет декомпилировать приложение простого опросника для ковыряния в его коде и поиске правильных ответов. И в 99% случаев пользователям не придёт в голову анализировать строки ответов и искать в них скрытые символы.

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

Из определения викторины следует то, что нам нужны данные в таком формате, из которого несложно получить список. Для получения списка строк используется строка с разделителями, а для получения списка объектов – данные в формате JSON. Отсюда получаем решение: вся структура данных будет представлять собой список объектов, а ответы – список строк. Для получения такой структуры создадим данные в Excel.

question answer index
Для чего вытаскивали плату из картриджа Dendy? Для экономии места,Для перепограммирования,Для лучшего охлаждения,Для запуска незапускающихся игр 4
Какая портативная консоль была выпущена раньше? PlayStation Portable,Game Boy,Nintendo DS,Sega Game Gear 3
Что появилось раньше? Kinect,Wii Remote,Move 2
Какая игровая приставка имеет больше всего продаж? Game Boy,PlayStation 4,PlayStation 2,Nintendo DS,Xbox 360,PlayStation 1 3
В какой приставке впервые появился CD-ROM? TurboGrafx-16,Sega CD,PlayStation 1;Xbox 1

После этого производим преобразование CSV в JSON и далее в список объектов.



Правильный ответ получаем из списка, полученногго из строки с разделителями.


Блок обработки выбора ответа показан ниже.

Вначале производится проверка на то, что ответ даётся впервые. Это делается для того, чтобы пользователь мог выбрать ответ только один раз. Далее выбор пользователя сравнивается с правильным ответом и в случае совпадения в конец опции добавляется символ галочки. В противном случае, выбраннай опция помечается как неправильная, а правильный вариант отмечается галочкой, чтобы пользователь видел правильный ответ.


Осталось добавить обработчик нажатия на кнопку для перехода к правильному ответу и блоки для прохождения опроса заново. Окончательный вариант можно посмотреть в проекте.