Функционирует при финансовой поддержке Федерального агентства по печати и массовым коммуникациям (Роспечать)

Позовите менеджера!

Справитесь ли вы с управлением спортивным ритейлом?

Смогли бы вы управлять спортивным магазином, где покупателей генерируют алгоритмы? Для тех, кто думает, что справился бы, мы в N + 1 вместе со Sportmaster Lab сделали симулятор. Если сможете в игре заработать много денег и превратить небольшой магазин в огромный ТЦ, есть шанс получить работу и развивать сеть настоящих магазинов. Главное, не забывайте поглядывать в лог.

Как играть?

Если коротко

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

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

Важно: получить удовольствие от игры можно на любом уровне сложности, но приглашение на работу будет только при победе на уровне "ООО". Сразу предупреждаем - это непросто.

Мы постарались сделать игру максимально понятной, поэтому список действий довольно логичен:

  • * придумайте название вашего магазина
  • * купите или арендуйте отдел в торговом центре
  • * можете придумать название для каждого отдела
  • * во вкладке "Склад" закажите товары
  • * дождитесь доставки товара
  • * на этом этапе можно установить справедливую (на ваш взгляд) цену
  • * выберите нужный отдел и разместите там товар
  • * покупатели уже на пороге!

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


Тайминг

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

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


Особенности

Игра происходит в реальном времени, однако её можно поставить на паузу, если вам нужно принять важное решение.

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

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

Не забывайте, что когда вы выставляете товары на полки в отделе, они исчезают со склада. Многие забывают.


Покупатели

Покупатели в игре - обычные люди. У них свой характер, свои особенности восприятия и любовь к брендам. Некоторые покупатели могут довольно громко заявить об удачной или неудачной покупке, похвалить вас или посетовать на высокие цены. Даже если покупателю что-то не понравится, он немного подождёт, может быть, подкопит денег, после чего даст магазину ещё один шанс. А уж если покупатель будет доволен покупкой, будьте уверены, он ещё вернётся! В поведении покупателей есть ряд интересных особенностей, но мы предлагаем вам раскрыть их самостоятельно; кроме того, так как все примеры поведения мы взяли из реальной жизни, вы можете попробовать различные маркетинговые трюки - кто знает, возможно, мы это предусмотрели.

API

  • Мы же N+1, как мы можем не дать возможность автоматизировать процесс? Это может быть увлекательнее самой игры!

    Специально для самых хардкорных наших читателей мы сделали Javascript-API, которое можно использовать в Devtools. Важно: скрипты не сохраняются. Если вы обновили страницу, вам заново нужно применить код, благо в Devtools есть возможность сделать это. Поверьте, так лучше.

    Доступные методы

  • /** * Давайте определимся, что список товаров может представлять из себя такую структуру данных: * @typedef {string[]|string|{number}} ITEMS * * Она соответствует примерно таким вариантам: * * просто id товара: * items = 'ivan:volleyball-net'; * * массив из id товара: * items = ['ivan:volleyball-net', 'indigiir:volleyball-net']; * * объект, где ключом является id товара, а значением - количество или цена, * в общем, нужное в конкретной ситуации поле: * items = { * 'ivan:volleyball-net': 10, * 'indigiir:volleyball-net': 20 * }; * * В первом примере мы всё распишем подробно. */
  • /** * Произвести закупку * * Пример: * api.buyIn('rybak:baseball-cap', 10) * api.buyIn(['rybak:baseball-cap', 'bananas:baseball-bat'], 10) * api.buyIn({'rybak:baseball-cap': 10, 'bananas:baseball-bat': 10}) * * @param {ITEMS} items * @param {number} amount - если items - объект, то не указывать * @return {boolean} */ api.buyIn(items, amount)
  • /** * Купить отдел на определённой клетке поля. * * Пример: * api.buyStack({cell: 8}) * * @param {number|null} cell - если не указано, то используется первая свободная клетка */ api.buyStack({cell = null})
  • /** * Арендовать отдел на определённой клетке поля. * @param {number|null} cell - если не указано, то используется первая свободная клетка */ api.rentStack({cell = null})
  • /** * Выкупить отдел * * Пример: * api.redeemStack(7) * * @param {number} cell - обязательно */ api.redeemStack(cell)
  • /** * Посчитать цену закупки товара с учетом доставки * * @param {ITEMS} items * @param amount - если items - объект, то не указывать */ api.calculatePrice(items, amount)
  • /** * Установить формулу цены на продажу. * * @param {string} formula */ api.setPriceFormula(formula)
  • /** * Установить цену на товар/товары * * @param {ITEMS} items * @param {number} price - если items - объект, то не указывать */ api.setPriceForItems(items, price)
  • /** * Индексы всех купленных отделов * * @return {number[]} */ api.stacks()
  • /** * Индекс стека на клетке * * @return {number} */ api.stackAtCell(cell)
  • /** * Свободное место в стеке * * @param {number} stack - индекс стека * @return {number} */ api.stackFreeSpace(stack)
  • /** * Все вещи на вашем складе * @return {ITEMS} */ api.itemsAtStock()
  • /** * Все вещи в определенном отделе * @param {number|{cell:number}} stack - индекс отдела или клетка * @return {ITEMS} */ api.itemsAtStack(stack)
  • /** * Переместить вещи со склада на полку отдела. * Важно: если вы указали больше вещей, чем есть на складе, * мы переместим максимум из того что сможем. * * @param {number|{cell:number}} stack - индекс отдела или клетка * @param {ITEMS} items * @param {number} amount - если items - объект, то не указывать */ api.itemsToStack(stack, items, amount)
  • /** * События. Их у нас только два, но каких! * * в отделе всё раскуплено: * api.on('stack.empty', stack => {...}); * * в отделе раскуплен какой-то конкретный товар: * api.on('sold', ({stack, item}) => {...}); * * @param {string} event * @param {(*)} callback */ api.on(event, callback)

Нашли опечатку? Выделите фрагмент и нажмите Ctrl+Enter.