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

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


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


Рекурсивные функции вызывают испуг, но на самом деле всё просто. Сначала в функцию передаётся параметр, равный 1. Если он меньше заданного числа (в данном случае 5 вопросам), то происходит перевод названий и добавление их в список стран и столиц. После этого параметр увеличивается на единицу и происходит вызов этой же функции. Когда значение параметра станет больше 5, то мы выводим список в области ListViewer для контроля и делаем кнопку для воспроизведения вопроса активной. Это гарантирует то, что викторину можно будет начать только после заполнения списка, а не в момент его формирования.

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

В викторину могут играть несколько человек, но как интегрировать в неё смартфон? Предположим, воспроизведение вопроса происходит при нажатии на полноэкранную кнопку. Общее количество вопросов должно быть кратно количеству игроков, чтобы они были в равных условиях. Для этого перед игрой нужно задать это количество. С вводом голосовых команд у “бобра” проблемы. Тогда что, нажимать второй раз на кнопку для озвучивания правильного ответа? Нет, для воспроизведения ответа можно использовать таймер, который включается после вопроса. Если игрок не успел ответить до срабатывания таймера, то ему засчитывается проигрыш. На обдумывания ответа можно дать определённое время, например, 3 секунды, или это время генерируется случайно, но не меньше 1-2 секунд. В этом случае смартфон будет напоминать таймер-бомбочку из настольной игры Тик Так Бумм, только в нашем случае она будет работать для каждого игрока. Идея понятна, распишем шаги.

1) Добавим в проект поле ввода TextInput для количества вопросов и переменную для него

2) Добавим в проект таймер и установим время срабатывания равным 1 секунде на время отладки

3) Добавим в проект условие окончания викторины когда счётчик вопросов станет равным количеству вопросов

4) Для воспроизведения вопроса и ответа пару "Страна,Сторица" разобьём на список по символу-разделителю "запятая".

5) Добавим уже известную нам возможность генерации случайного индекса и удаления по нему записи из списка после получения значения элемента

6) Добавим возможность рестарта игры.

Дополним проект компонентами и блоками согласно данным шагам.

Более или менее завершенный проект можно посмотреть по ссылке https://x.thunkable.com/copy/fadbc3e6ae79eb352bbb3640d13a4e75