что значит idle игры

Ситуация на рынке айдлеров: исследование Андрея Чупри́на

Жанр idle-игр вырос из «кликеров». Сегодня он считается отдельной нишей. Как она живет, в своем исследовании для App2Top.ru рассказал инди-разработчик Андрей Чупри́на.

Методология

Я собрал данные за май 2020 года о 90 проектах в жанре idle. Было два условия попадание в выборку:

Иными словами, я искал актуальные проекты, на которые их издатели покупают трафик (т.е., они считают, что игры выгодно рекламировать).

Весь список доступен по этой ссылке. Возможно, он не является полным, поскольку собирался на основе Related Apps Sensor Tower и анализа игр известных издателей. Показатели игр также собирались при помощи сервиса Sensor Tower.

После подготовки выборки я подготовил четыре подборки:

Они представлены чуть ниже.

Пояснение к таблицам

Перед знакомством с таблицами/топами важно дать несколько пояснений к ним:

20 последних игр, которые вышли в этом жанре

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

К слову, на этот рынок обращают внимание и мировые лидеры, а не только нишевые компании. Айдлеры сегодня запускают в том числе такие крупные издатели, как Voodoo, Gismart, Fun+ и Lion Studios.

20 последних idle-релизов

Также хочу выделить следующее:

Топ-20 idle-игр по загрузкам (iOS, май, 2020-й)

Несмотря на то, что многие idle-проекты относят к гиперказуальному направлению, даже загрузки лидеров ниши редко достигают в месяц больше миллиона (напомним, речь исключительно про iOS-платформу).

Топ-20 самых скачиваемых игр в жанре idle (май 2020, iOS)

Также важно отметить следующее:

Топ-20 idle-игр по кассе (iOS, май, 2020-й)

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

Топ-20 самых кассовых (IAP + ads) игр в жанре idle (май 2020, iOS)

Также важно отметить:

Топ-20 idle-игр с самым высоким отношением выручки к загрузке

Топ-20 игр в жанре idle по отношению дохода к загрузкам (май 2020, iOS)

Что касается тайтлов, показывающих астрономически-высокие доходы с одной установки (до нескольких десятков долларов), то, возможно, все дело в том, что они теряют свою аудиторию и их выручка была получена с уже ранее привлеченной аудитории.

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

Источник

Секреты создания успешных idle-игр от Kolibri Games — авторов Idle Miner Tycoon

Как разработать idle-кликер по методу Kolibri Games, — рассказывает директор по развитию бизнеса студии Нейт Баркер (Nate Barker).

Оригинальный рассказ Баркера опубликовали GameAnalytics.

Что же такое idle-игра?

На этот вопрос существует множество разных ответов. Вот наш:

Idle-игра — это электронная таблица с игровым интерфейсом.

Звучит не слишком увлекательно, но точно отражает суть. Idle-игры почти всегда построены на схожих математических вычислениях.

В начале у вас есть очки или валюта, которые можно наращивать вручную. В Cookie Clicker, например, вы зарабатываете одно печенье одним кликом. Проще некуда. Как только вы соберете достаточно игровой валюты, то сможете купить инструмент, повышающий скорость и удобство кликов для получения все той же валюты.

Вот, практически, и все. Существуют более подробные описания idle-игр и причин, по которым они могут увлечь игроков. Но именно вышесказанное мы держали в уме, пока создавали Idle Miner Tycoon в 2016 году.

Вначале в нашей команде было 4 человека. Разработка игры велась в студенческой квартире неподалеку от Франкфурта. Начинали мы скромно, но со временем наш штат превысил 100 человек, и мы смогли запустить игровую франшизу в 100 млн инсталлов в сумме.

Вот какие приемы помогли нам этого добиться:

1. Начните с поиска неординарной идеи

Формат idle-игр хорошо сочетается с двумя поджанрами: бизнес-симуляторами и строительством башен. Поэтому большинство игр на рынке — это либо первое, либо второе.

Мы немного изменили исходную концепцию. Взяли идею строительства башни и сделали наоборот: вместо того, чтобы строить все выше, вы копаете все глубже.

Разница невелика, но благодаря ей Idle Miner Tycoon выделяется среди прочих игр.

2. Создайте простейший прототип

Девиз нашей студии может показаться вам странным: «Скажи “ нет” своим желаниям». Какие бы дерзкие и амбициозные идеи у нас ни возникли в ходе разработки, мы говорим им «нет» и упорно придерживаемся первоначальной концепции.

Мы создали базовый прототип для Idle Miner Tycoon. Он был примечателен не тем, что в нем было, а тем, как много в нем отсутствовало:

И такой прототип хорошо работал. У него был выдающийся ретеншен 1-го дня: от 63% до 81%. (У большинства игр этот показатель не превышает 40%.)

Такой прототип — это основа для хорошей idle-игры. Добавить в нее все остальное можно позже.

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

3. Не вымучивайте то, что и так не работает

Наш первый проект назывался Front Yard Wars. Он так и не увидел свет.

Думая о нем сейчас, мы видим три причины, почему игра не работала:

Поняли мы, что игра не работает, когда она была готова на 60%. Можно было вымучивать ее дальше и все же закончить, но вместо этого было решено свернуть разработку и заняться чем-то новым. И, судя по успеху нашего следующего проекта, мы сделали правильный выбор.

4. Разместите весь игровой цикл на одном экране

Игровой цикл Idle Miner Tycoon делится на четыре этапа:

1. Добыча
2. Транспортировка
3. Продажа
4. Апгрейд

Наш интерфейс демонстрирует все эти этапы на одном экране. Между ними указана «контрольная точка». Это переменная, определяющая быстроту вашего прогресса. Прокачка этой переменной позволяет добывать больше ресурсов, быстрее транспортировать и продавать их и т.д.

Такая прозрачность игрового процесса делает игру очень простой. Поэтому, чтобы сразу погрузиться в игровой процесс, вам хватит даже 10-минутной поездки на поезде. Та же прозрачность позволяет четко указать игроку все «контрольные точки», что и станет основой вашей монетизационной модели.

5. Стройте монетизацию на «плати или жди»

В idle-игре не бывает проигрыша. Здесь важно лишь то, как быстро вы хотите продвигаться по игре. Эта скорость прогрессии — именно то, за что будут платить игроки.

Например, если вы хотите открыть новый рудник в Idle Miner Tycoon, у вас есть два варианта:

Читайте также:  Что лучше oppo или vivo

На рекламе мы зарабатываем около 60% своего дохода. Наш крупнейший источник рекламной выручки — это игроки, которые смотрят рекламу в обмен на рост доходов с их шахт. В среднем игрок смотрит по восемь рекламных роликов в день.

Остальной доход поступает с внутриигровых покупок. Изначально в игре их не было. Но сами игроки просили дать им возможность потратить деньги, чтобы ускорить прогрессию. Если бы мы не прислушались к ним, то игра, вероятно, не была бы такой успешной.

6. Применяйте методы бережливой разработки

С выходом Idle Factory Tycoon в 2018-м наше портфолио выросло до двух idle-игр. К тому времени, в ходе разработки и издания нашей первой игры, мы многому научились. И свели весь процесс к пяти этапам:

Весь процесс основывается на идее «минимально рабочего продукта». Ее мы почерпнули в книге Эрика Риса «Бизнес с нуля» («The Lean Startup»), это наш главный источник вдохновения.

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

Разработка игр — это бизнес, где все решают хиты. Поэтому чем быстрее вы осознаете, что игра не работает, тем ниже будут ваши убытки.

7. Удерживайте игроков

Idle Miner Tycoon вышла в июле 2016-го, и с тех пор для нее было выпущено более 160 апдейтов.

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

За это время игра значительно расширилась. Мы добавили следующие функции:

Кроме того, мы исправляем баги и определяем недоработки апдейтов по особой схеме. Она занимает четыре дня:

И наконец: прислушивайтесь к игрокам

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

Если бы мы не слушали наше комьюнити, то, вероятно, не добились бы того, что имеем.

Я хочу, чтобы вы создавали не просто idle-игры, а хорошие idle-игры. И очень надеюсь, что наши советы помогут вам в этом.

Источник

[Туториал] Как создать вашу первую инкрементальную IDLE игру на JavaScript

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

Людям, знающим как делать такие игры, будет скучно; людям, знающим JS, рекомендую смотреть на код сквозь пальцы (во избежание травм) и читать только про механики. Под катом последовательная инструкция, ориентированная на новичков.

Инкрементальные игры — это игры, в основе которых лежит [бесконечный] основной цикл, состоящий из накопления ресурсов, их постоянных трат и ускорения дохода. Главная их особенность в постоянном росте чисел. Инструкция расскажет, как сделать IDLE (ленивую) игру, в которой ресурсы пополняются таймером, а не активным кликаньем.

Начнем с того, что создадим текстовый файл с именем index.html и напишем в него следующее:

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

Ссылка на игру в текущем состоянии: 0df7a27.

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

Давайте реализуем первый цикл.

В первую очередь, строка

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

Во-вторых, появился скрипт.

Создаем переменную coppers, и задаем её область видимости ключевым словом let. Аналогично объявлением copperGrowth, которая будет отвечать за скорость прироста медных монет.

Далее создаем объект, в который мы поместим наш таймер, который будет дергать функцию endOfTurnCalc каждые 2000 мс (2 секунды). Функция обеспечивает прирост медных монет и обновление интерфейса. Ура, половина игры сделана: у нас есть цикл накопления ресурсов. Следующая задача — научиться их тратить.

Ссылка на игру в текущем состоянии: e5d96e1.

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

Добавим код, который позволит кнопке апгрейда работать:

и код, который окажет влияние на скорость добычи новых монет:

Зададим цену улучшения шахты, определим уровень шахты по умолчанию, пропишем в функцию проверку достаточности монет на апгрейд шахты.

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

Ссылка на игру в текущем состоянии: c731ec5.

Ну что же, играть уже можно — можно копить, и, что приятнее, тратить накопленное. Но нам нужно подкрепление успеха — игрок не только вычислять прирост скорости накопления монет, методом вычитания от нового значения старого, но и, по-хорошему, сразу видеть текущую скорость накопления монет. Сделаем?

В интерфейс добавляем еще одну строчку:

Теперь наш интерфейс описан следующими строчками:

Вносим изменение в скрипт, в функцию upgCopperMine():

Ссылка на игру в текущем состоянии: 3ac06b6.

Отлично! У нас есть условно-бесконечная игра. Теперь надо остановится на секунду, и задуматься — части людей нравится, когда конечной цели нет, и можно играть, пока не надоест, другая часть считает, что условия конечности, достижимости игры должны быть. Игру для первых мы уже сделали, но что мешает нам сделать небольшое изменение, чтобы у игры была цель и условие победы? Давайте сделаем.

Добавили переменную, в которую положим значение, которое нам нужно достичь и изменим функцию из цикла, добавив проверку на достижение цели. При достижении цели мы очищаем интервал из нашего объекта с таймером и выводим всплывающее сообщение в браузере.

Есть небольшой момент: некоторые антивирусы не любят alert’ы и блокируют страницу за их использование.

Ссылка на игру в текущем состоянии: 8fa4041.

Следующая функциональность, которую ожидают люди от игры длиннее пяти минут — это возможность сохранять и загружать игру. Давайте же дадим им её!

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

и теперь расширим наши скрипты, чтобы кнопки заработали:

Читайте также:  чем лучше почистить краны

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

Ссылка на игру в текущем состоянии: 54b1ea0.

Все, основная часть игры готова.

К текущему моменту мы рассмотрели:

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

Продолжим? Перед тем как приступить к следующей теме, а именно добавлению второго ресурса в нашу систему (серебра), я предлагаю провести небольшой рефакторинг текущего кода.

Что нужно сделать в рамках рефакторинга?

Во-первых, давайте создадим один игровой объект, а медные монеты, уровень медных шахт и так далее поместим внутрь как свойства этого объекта. Это сильно поможет в будущем, когда мы будем расширять сохранение и загрузку на новые игровые сущности.

Во-вторых, сделаем расчет цены апгрейда динамическим.

В-третьих, избавимся от дублирования кода, который отвечает за обновление интерфейса.

Код, приобретет следующий вид:

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

Ссылка на игру в текущем состоянии: 8a07f4d.

Давайте теперь обновим систему сохранения и загрузки.

Теперь, вместо сохранения отдельных свойств, мы сохраняем весь объект целиком. Но будьте осторожны: если вы добавите в объект методы, то они не сохранятся таким образом, и последующая перезапись объекта из сохранения удалит все методы…

Ссылка на игру в текущем состоянии: 8eba059.

Давайте же удалим ненужное свойство — цену апгрейда шахты и создадим функцию расчета апгрейда и будем вызывать ее в необходимых местах.

Ссылка на игру в текущем состоянии: 4007924.

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

В свою очередь, во всех остальных местах, где мы обращались к тем или иным объектам DOM, теперь поставим вызов функции updateUI():

Ссылка на игру в текущем состоянии: 2245f97.

Теперь предлагаю ввести второй ресурс: серебро, строительство и улучшения серебряных шахт.

Что сделано? В интерфейсе добавлены поля для отображения серебряных монет, скорость их добычи, кнопка для постройки или улучшения серебряной шахты.

Внутрь игрового объекта продублированы свойства silvers, silverGrowth, silversUpgLevel, но для последнего установлено значение 0, потому что серебряной шахты у нас по умолчанию нет.
Добавлена переменная silverMineBasePriceCoppers, которая будет отражать цену постройки серебряной шахты в медных монетах (потому что мы не можем платить за серебряную шахту серебром, которого у нас пока нет).

Модифицирована функция coppersUpgCost и продублирована как silversUpgCost, чтобы цена апгрейда была отличной от нуля, в случае, если текущий уровень шахты равен 0.
Изменили функцию обсчета конца хода, добавив туда расчет дохода от серебряной шахты, а также изменив условие победы — теперь нам нужно сравнивать не количество медных монет, а количество серебряных монет.

Создали функцию upgSilverMine, в которой отразим логику списывания средств (если шахты еще нет, списываем медяки, если шахта уже построена, то списываем серебро для улучшения шахты).
В функцию updateUI добавили необходимые строчки для серебра, а также разделили логику вывода текста на кнопку для улучшения серебряной шахты, таким образом одна кнопка работает и для постройки и для улучшения шахты.

Функции сохранения и загрузки остались без изменений.

Ссылка на игру в текущем состоянии: 03eb0eb.

Может так случиться, что медных монет накопиться много больше, чем надо, в то время как серебро еще нужно заработать. Для этого в подобных играх, как правило, существует возможность обмена разных ресурсов друг на друга.

Давайте добавим в интерфейс пару кнопок:

И добавим пару функций к этим кнопкам:

Ссылка на игру в текущем состоянии: 92219b2.

Так, что еще можно добавить в инкрементальную игру? Механизм Престижа! Конечно, сейчас это скорее излишество, но в случае дальнейшего развития игры, он вам пригодится. Игроки любят его!

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

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

Что нам потребуется для этого? Нужен механизм перезапуска игры со значениями по умолчанию. В качестве постоянного бонуса, будем добавлять очки Престижа к ранее неизменяемым свойствам copperGrowth и silverGrowth.

Добавляем следующие функции winGame, restartGameDialog, restartGame, а также изменим endOfTurnCalc для вызова новых функций и обновим updateUI:

Функция winGame запускает таймер, по истечению которого вызывается диалог подтверждения. В случае подтверждения вызывается функция рестарта, которая сбрасывает все значения на умолчанию, но увеличивает свойства базового прироста монет.

В целом, игра готова:

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

Ссылка на игру в текущем состоянии: 92219b2.

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

Представьте себе, что вы разрабатываете игру, публикуете ее на веб-сервере (возможно, на github pages), а люди в нее играют. Со временем, вы вносите изменения в игру, которые добавляют новые свойства к игровому объекту game.

Теперь следите за руками.

Игрок заходит со старым сохранением, в котором есть все свойства coppers и silvers, но нет, скажем, свойства gold. Загружается наш game объект и перезаписывает тот, который был создан при загрузке веб-страницы, и теперь внутри объекта есть только те свойства, которые были в его сохранении. А код-то мы уже обновили! И этот код ссылается на обновленные свойства, которых нет. Таким образом, код начинает получить множественные ошибки, вплоть до полной неработоспособности игры. На удивление, чтобы исправить эту проблему, нужно переписать всего две строчки в функции загрузки игры:

Читайте также:  чем лечить порезанную кутикулу

Теперь, если добавите в game = < gold: 1, >и загрузитесь с вашего старого сохранения, где золота еще не было, то золото останется в объекте и игровая логика нигде не сломается.
Ссылка на игру в текущем состоянии: 83c258d.

Еще одно. Перенос сохранений между браузерами, давайте его тоже запилим.

Добавили две служебных переменных, обновили updateUI(), написали три функции — экспорта, импорта, и функцию, которая изменяет флаг отображения экспорта, таким образом «старый» экспорт через 30 секунд после его формирования будет скрыт.

Источник

Названия больших чисел в idle-играх

(Прим. пер.: приведённые в статье алгоритмы относятся к названиям степеней тысячи по короткой шкале.)

Некоторое время назад я получил возможность поучаствовать в разработке игры в жанре idle. Что же такое idle-игра? Если вы впервые слышите об этом быстро развивающемся жанре, попробуйте поиграть в Adventure Capitalist. На сайте Gamasutra также есть несколько статей (1, 2, 3, 4), позволяющих рассмотреть жанр немного глубже.

Одна из проблем, с которой разработчик idle-игры неизбежно столкнётся, — как разместить все эти огромные числа на экране, и, что более важно — как игроку разобраться в них. В этой статье мы посмотрим, как можно переписать очень длинные числа как строки, которые будут удобны для игроков. Можно разбить этот процесс на две основные части:

Скачивание исходного кода

Исходный код доступен для скачивания и готов к использованию в ваших idle-играх. Использовать его просто:

LargeNumber.ToString (12340000); // результатом будет «12.34 million»

Также в файлы загрузки включён небольшой пример программы, демонстрирующий, насколько большие числа конвертируются в игре в строки (с помощью скриптов кнопок, описанных в предыдущей статье):

Всё это часть набора примеров кода, который должен сопровождать некоторые мои статьи, написанные ранее, в основном из туториалов по работе с сетью в Unity (1, 2, 3). Скачивайте примеры кода, чтобы проверить, как они работают!

Строки стандартного числового формата

Числа меньше миллиона достаточно малы и не требуют серьёзной обработки. Можно положиться на встроенные возможности форматирования чисел C#, они сделают за нас бóльшую часть работы:

double x = 987654.321
x.ToString («N2»); // возвращает «987,654.32»

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

Латинские префиксы к не очень большим числам

При работе с большими числами, выражающимися в миллионах (millions), миллиардах (billions), триллионах (trillions) и так далее, мы знаем, что названия меняются через каждые три разряда. Имея число в экспоненциальной записи, мы знаем, что оно выражается в миллионах, если его порядок от 6 до 8, в миллиардах — от 9 до 11, и в триллионах, если показатель от 12 до 14, и т.д. В общем виде для числа с экспоненциальной записью:

Нам нужно выразить N следующим образом:

Тогда конечной строкой числа будет:

где Name(U) можно получить из этой таблицы латинских префиксов:

U Name(U)
1 mi
2 bi
3 tri
4 quadri
5 quinti
6 sexti
7 septi
8 octi
9 noni

Например, если мы обрабатываем число 123 000 000 000 000 000, можно выразить его в экспоненциальной записи так:

Переписывая N, мы получаем:

17 = 3*(4+1) + 2, откуда U = 4 и V = 2

Это значит, что наше число выглядит как:

1.23*(10 2 ) Name(4)+»llion»

Сочетания префиксов для больших чисел

В Википедии есть полезная статья, объясняющая, как даются названия большим числам. Я не буду повторять то, что там написано. Вместо этого я дам описание того, как можно подойти к алгоритму и представлю несколько примеров.

Получив значение U числа (прим. пер.: здесь и далее у автора написано N, но это явно неправильно), как мы делали это в числах с латинскими префиксами, нужно разбить его на разряды (единицы, десятки, сотни), а затем сформулировать название следующим образом:

(префикс единиц) + (модификатор) + (префикс десяток) + (префикс сотен) + (удаление «a» в конце) + «llion»

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

Если U = 12, то для единиц цифра будет равна 2, что соответствует «duo», а для десятков — 1, соответствующая «deci». При переходе от «duo» к «deci» модификатор не нужен. По приведённой выше формуле мы получаем «duodecillion».

Если U = 27, для единиц цифра равна 7 (соответствует «septe»), для десятков — 2 (соответствует «viginti»). Согласно таблице, переход от «septe» к «viginti» требует модификатора «m». Соединяя всё вместе, получаем «septemvigintillion».

И наконец, если U = 30, то цифра для десятков равна 3, что соответствует «triginta», которое имеет окончание «a». Поэтому мы отбрасываем её и получаем «trigintillion».

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

Файлы исходного кода содержат работающую реализацию, обрабатывающую все случаи до U = 999. Она была протестирована на всех названиях, включённых в список больших чисел. Я призываю вас скачать их, если вам нужен готовый к использованию код, который можно легко вставить в собственные проекты, или если вы хотите сравнить свою реализацию с работающей версией.

А если U = 1000?

Тогда число называется миллиллионом (прим. пер.: в длинной шкале — квингентиллиардом).

Большие числа недостаточно велики

Но прежде спросите себя, действительно ли вам это нужно. Бесконечность предоставляет нам достаточно простора для разработки игр, и нам не обязательно пытаться заполнить всё данное нам пространство. Перефразирую моего профессора из колледжа: «Подумайте о самом большом конечном числе, которое можете придумать. Теперь используйте то же число как его же показатель степени, и возведите это число в степень самого себя. Если теперь расположить это число на оси действительных чисел, то по сравнению с бесконечностью оно всё равно будет очень близко к нулю».

Станет ли ваша игра интереснее от выхода за пределы чисел двойной точности? Для некоторых игр ответ может быть положительным, но в большинстве случаев я советую вам подумать ещё раз о балансе и дизайне игры (1, 2, 3, 4).

Если вам понравилась статья, не забудьте скачать папку с проектом! Надеюсь, она будет полезна при разработке вашей собственной игры. Спасибо за прочтение!

Источник

Библиотека с советами