- "да" - подтверждение действия
- "НОМЕР" - нажать на элемент #НОМЕР
- "НАЗВАНИЕ ТОВАРА" - поиск товара по названию и описанию
- "написать ФРАЗУ" - вводит ФРАЗУ в поле ввода
- "вниз | вверх | в начало | в конец" - прокрутка страницы
- "закрыть" - закрыть меню каталога
- "назад | вперед" - переход на предыдущую/следующую страницу
Гибридные игры: имитация или упрощение?
Оглавление "Программирование для игр"
До этого момента мы рассматривали приложения для имитации поведения реальных объектов – игрального кубика, ведущего лото и ассистента при игре в дартс. Но помимо этого можно придумать механику для настольной игры, которую при всей своей простоте будет затруднительно реализовать на практике. Например, вероятность выпадения числа очков в произвольном диапазоне.
Возьмём для примера сражение с использованием двух наборов домино, как предлагал Митя, когда сила атаки приравнивалась количеству точек на передней половине доминошки. На практике редко бывает так, что удар всегда происходит с одинаковой силой. Для большего разнообразия и приближения к реальности количество точек на домино следует считать максимально возможной силой атаки, а на практике подбрасывать кубик для получения случайного значения от 1 до количества точек на половинке. Сколько кубиков для этого потребуется?
Для доминошки x|1 кубик не нужен. Атака всегда = 1. Для доминошки x|2 используем кубик d6 и 2 интервала (от 1-3 = 1, а 4-6 =2) Для доминошки x|3 используем кубик d6 и 3 интервала (от 1-2 =1, 3-4 =2, 5-6 = 3) Для доминошки x|4 используем кубик d20 и 5 интервалов Для доминошки x|5 используем кубик d20 и 4 интервала Для доминошки x|6 используем кубик d6
Ответ: два кубика.
Но можно обойтись и одним кубиком d6, но ввести в правила игры ситуацию промаха, когда выпавшее количество очков на кости превышает количество точек на половинке. Обоснование этого может быть таким:
Количество точек на половинке также относится и к мастерству рыцаря. Рыцарь с шестью точками – это воин уровня мастер, который всегда наносит урон. Но не все являются мастерами. Больше рыцарей среднего уровня, а чем ниже уровень мастерства, тем больше вероятность промаха или нанесения минимального урона.
Как быть, если сила атаки находится в разных диапазонах 2-5, 8-15, 13-24? В этом случае можно подогнать диапазоны под диапазон игральных кубиков, например, 2-5 – состоит из 4-х возможных значений, для которых использовать кубик d20: 1-5 = 2 6-10 = 3 11-15 = 4 16-20 = 5
Несложно, но в случае произвольных и больших диапазонов игра превратится в занятие по математике. В этом случае можно использовать электронные средства для упрощения расчетов.
Но одновременно с имитацией можно и упростить игру, как в случае с викториной. ”Говорилка” на смартфоне может имитировать ведущего викторины, а упрощение состоит в исключении необходимости распечатывать карточки с вопросами. Для этого можно создать виртуальный список вопросов, а можно воспользоваться информацией из уже созданных баз данных.
Создадим для примера викторину по географии на знание столиц государств. За правильный ответ игроку даётся одна фишка. Выигрывает тот, у кого по окончании игры будет больше фишек.
На предыдущих занятиях мы познакомились с компонентами синтезатора речи и голосового ввода, функциями получения случайных целых чисел и алгоритмом работы с уменьшаемым размером списка элементов. Всё это пригодится и для данного приложения, но для начала создадим простой вариант при помощи блоков. Воспользуемся бесплатным сервисом restcountries.eu, который даёт возможность получить информацию по странам и столицам.
Создайте новый проект в Thunkable X, добавьте в него кнопку и компонент для работы с web-сервисами Web Api. Также добавим в приложение “говорилку” Text To Speech. Для контроля получения корректных данных добавьте в проект текстовую область Label и область просмотра списка List Viewer. Контроль данных можно производить и при помощи одной текстовой области, но компонент List Viewer позволяет выбрать опцию из списка и произвести с ней дополнительные действия, например, воспроизвести, что удобно при отладке.
Некоторые разработчики предпочитают сразу делать приложение в дизайне. Когда он сделан, то очень сложно морально заставить себя “портить его” выводом на экран отладочной информации. И может получиться так, что через 2 месяца работы приложение сделано на 90% и тут разработчик узнаёт, что используемая им платформа элементарно не имеет требуемую функциональность. Интересно, а наше приложение можно будет реализовать в полном объёме?
Выбранный web-сервис имеет очень простой и понятный интерфейс команд. Для получения всех данных по странам введите в адресную строку браузера запрос https://restcountries.eu/rest/v2/all. Только после проверки работоспособности сервиса следует переходить к взаимодействию с ним в приложении, а не наоборот.
Ниже показан базовый блок.
В обработчике нажатия на кнопку создаётся GET-запрос, после чего происходит отображение ответа от web-сервиса или текст ошибки. Для надёжности позже добавим проверку статуса ответа status. Чаще всего успешный запрос имеет статус 200, но бывают и исключения.
Для викторины нам не нужна полная информация по странам. Достаточно сохранить в списке пару - название страны и столицы. Существует разные способы хранить данные – в переменной с разделителями, в списке, в параллельных списках, в словаре и др. Каждый вариант имеет свои преимущества и недостатки. Для простоты воспользуемся списком строк.
Как правило, сервисы возвращают ответ в виде текста в формате JSON, который можно преобразовать в объект или список объектов. Из списка объектов и будет получен интересующий нас список строк, в котором название страны и столицы будут идти через разделитель. Для этого нужно в цикле пройтись по всему списку полученных объектов, указать названия свойств и добавить их значения в список, который затем отобразить для контроля на экране в компоненте ListViewer.
Распишем задачу по шагам.
1) Проверить статус ответа. Если он равен 200, то перейти к следующему шагу.
2) Из содержимого в формате JSON получить список объектов.
3) Создать пустой список строк.
4) Создать цикл по списку объектов и в нём добавлять в список строк пару ”Название страны,столица”.
5) Отобразить список строк на экране.
Теперь можно переходить к добавлению нужных блоков в функцию согласно этим понятным инструкциям.
Если кто-то скажет, что это не программирование, а Лего из разноцветных блоков, то предложите ему написать для Android и iOS аналогичное по функциональности приложение и не забудьте засечь время. Кто сказал, что программирование должно быть сложным? При помощи блоков можно реализовать не всё, но главный и основной недостаток визуального программирования всего один - надёжность. А какой главный недостаток программирования кодом? Сложность. В мире электроники уже давно перешли на компоненты для решения задач, в программировании до сих пор учат программированию.
Результат работы проекта показан ниже.
А это кто такой красивый? Это окно эмулятора BlueStacks 4 с версией Android 7. Отличный помощник при отладке.
Проект можно открыть по ссылке https://x.thunkable.com/copy/fadbc3e6ae79eb352bbb3640d13a4e75
На следующем занятии мы продолжим работу над викториной.