Один сервис, чтобы коннектиться со всеми, или как я интегрировал игру с VK и немного увлекся
В начале 2020 года я только начинал разрабатывать HTML-игры, и коллега посоветовал выложить что-нибудь на Яндекс Играх — эта площадка недавно открылась. Первым делом нужно было подключиться к SDK Яндекса. Я разрабатываю игры на Construct. Он поддерживает JavaScript, так что я написал небольшой фрагмент кода, который позволял получать игроков и показывать рекламу, и подключиться к SDK. Потом добавил добавил поддержку Яндекс Метрики, просмотр видео за вознаграждение, и постепенно собралась маленькая библиотечка. Тогда я еще не предполагал, что за полтора года эта идея вырастет в целый сервис-посредник для интеграции с разными игровыми площадками. Под катом расскажу, как так получилось, и что под капотом у этой разработки.
class YandexSDK < constructor () < this.ready = new Promise(resolve =>this.init = resolve); > setSDK (ysdk) < this.ysdk = ysdk; >showFullscreen () < this.ready.then(() =>this.ysdk.adv.showFullscreenAdv(>)); > > const Yandex = new YandexSDK(); (function(d) < var t = d.getElementsByTagName('script')[0]; var s = d.createElement('script'); s.src = 'https://yandex.ru/games/sdk/v2'; s.async = true; t.parentNode.insertBefore(s, t); s.onload = initSDK; >)(document); function initSDK () < YaGames.init(< adv: < onAdvClose: wasShown =>console.info('adv closed! was shown: ', wasShown) >, screen: < fullscreen: true, orientation: < value: 'portrait', lock: true >> >).then(ysdk => < Yandex.setSDK(ysdk); Yandex.init(); >); >
Тот самый первый скрипт для работы с Яндекс SDK
Сперва я просто делился библиотекой с друзьями и знакомыми, разрабатывающими в Construct — давал им готовый скрипт, который подключал игру к Яндекс Играм. Но в Construct с JS работать не очень удобно, и я решил переписать все в формате плагина, — чтобы можно было добавлять нужные функции с помощью визуального программирования.
Собрал прототип за три дня и выложил в открытый доступ, чтобы им могли пользоваться все желающие. Он до сих пор висит в списке плагинов Яндекса. Возможно, им кто-то еще пользуется, хотя обновлений давно не было.
Функций плагина хватало для простых проектов, но потом я увлекся разработкой игры-филворда и решил, что в ней просто необходим рейтинг игроков. В Яндекс Играх тогда не было собсвенных лидербордов, так что я написал сервер на NodeJS, подключил MongoDB как базу данных, и стал складывать туда рекорды игроков. Опять же, все это завернул в плагин для Construct и благополучно о нем забыл, потому что переключился на другой проект.
Следующей игрой была несложная карточная стратегия. В Яндекс Играх она вряд ли хорошо бы зашла — не та аудитория, так что я направился в VK. Делать такой же плагин как для Яндекс совсем не хотелось. Тогда и появилась мысль, что нужен универсальный плагин, который будет править всеми проверять, на какой площадке игра, и подключать местный SDK. Это должен был быть посредник, который выступает универсальной оберткой под разные SDK популярных площадок.
Как работает SDK
Construct довольно удобный, но это все таки нишевое решение, его используют далеко не все, так что я вынес логику плагина в отдельный скрипт. Теперь основную работу выполнял Javascript SDK, а плагин дергал за ручки. Проще говоря: если в плагине вызвали «показать рекламу», то он вызывает мой SDK, а SDK обращается к игровой площадке и запрашивает показ рекламы. Такое решение можно масштабировать на все движки, которые поддерживают экспорт в HTML, везде можно подключить JS SDK и все это завести.
Как SDK определяет площадку
На словах все звучит просто, но создание собственного SDK оказалось связано с кучей тонкостей. Например, не хотелось тащить бандлы всех площадок в один SDK.
Во-первых, такое решение будет много весить, а во-вторых, площадки просят затачивать игры под свою платформу и, например, Яндекс Игры не допустят до релиза проект, в коде которого есть строки, которые обращаются к VK и наоборот.
Из-за этого HTML-разработчикам, которые хотят публиковаться в разных местах, приходится поддерживать сразу несколько версий одной и той же игры. В идеале, скрипт должен снимать эту боль, определять, к какой площадке его подключают, и самостоятельно подгружать нужный бандл.
Я выбрал путь косвенного автоопределения площадки через URL адрес фрейма, в который вшита игра. Каждая площадка передает условно какой-то ID в параметрах ссылки, и по ним можно определить, например, Яндекс это или VK.
Для Яндекс Игр индикатором служит хост — games.s3.yandex.net. Дополнительно из него можно забрать ID площадки — 148868.
Для VK игру нужно размещать на своем хостинге, так что метод определения по хосту не подходит. Зато VK прокидывает в URL фрейма свои параметры: api_id, viewer_id и auth_key — для игр и vk_user_id, sign, vk_app_id для приложений. Их наличия хватает, чтобы удостовериться, что перед нами площадка VK. Этот метод косвенный, даже костыльный, но он работает.
Единственная площадка, где определение по URL фрейма оказывается бесполезным — это Smart Market. Фрейм здесь чистый, URL пустой, никакие параметры дополнительно не передает — не за что уцепиться. В этом случае я определяю площадку через явное прокидывание get-параметра _platform — ?_platform=SMARTMARKET
Как SDK загружает конфигурацию и подключается к площадке
После того как сервис определил площадку, для нее нужно загрузить определенную конфигурацию. В нее входят настройки баннеров (частота показа и автообновления, ID и размеры блоков), информация об игре, ID счетчиков метрик, поля игрока, серверное время и много другой полезной информации.
За ней SDK обращается к серверу и параллельно начинает загружать инструменты для работы с SDK площадки и саму библиотеку площадки — например Яндекс SDK или VK Bridge.
Я решил разбить инструменты для работы с площадками на отдельные чанки через Webpack — каждый чанк — отдельная площадка. Это решило проблему веса при масштабировании, потому что у под площадку грузится только нужный чанк.
const toolsBundles: Record = < [PlatformType.YANDEX]: () =>import(/* webpackChunkName: 'platforms/platform.yandex' */ './tools/getYandexTools'), [PlatformType.VK]: () => import(/* webpackChunkName: 'platforms/platform.vk' */ './tools/getVKTools'), [PlatformType.OK]: () => import(/* webpackChunkName: 'platforms/platform.ok' */ './tools/getOKTools'), // . >;
Пример списка чанков
У всех площадок разная логика, код, названия методов и результаты, так что я держу в бандле обертку, которая вернет в основной SDK то, что мне нужно. Вот пример инициализации инструментов для работы с площадкой:
export default async function getYandexTools(tools: PlatformBootupTools) < const sdk = new YandexSDK(tools.gp, <>); // Инициализируем SDK const [, , projectConfig] = await Promise.all([ // Начинаем загружать SDK sdk.init(), // Настраиваем дополнительные локальные хранилища tools.setupStorage([new YandexStorage(sdk), new YandexPlayerStorage(sdk)]), // Получаем конфиг с сервера с учетом языка игрока tools.fetchConfig(sdk.lang), ]); // Создаем адаптеры под SDK const adsAdapter = new YandexAdsAdapter(sdk, projectConfig.platformConfig); const appAdapter = new YandexAppAdapter(sdk); const playerAdapter = new YandexPlayerAdapter(sdk); const platformAdapter = new YandexPlatformAdapter(sdk); const socialsAdapter = new YandexSocialsAdapter(sdk); const paymentsAdapter = new YandexPaymentsAdapter(sdk); return < adsAdapter, appAdapter, playerAdapter, platformAdapter, socialsAdapter, paymentsAdapter, projectConfig, >; >
Затем я получаю нужные адаптеры от площадки и скармливаю их в модули моего SDK.
const platformTools = await getToolsByPlatform(< platformType, tools >); const < adsAdapter, playerAdapter, platformAdapter, socialsAdapter, paymentsAdapter, projectConfig, appAdapter, >= platformTools; const platform = new Platform(platformAdapter); const ads = new Ads(adsAdapter, projectConfig.asdConfig); const app = new App(appAdapter, projectConfig.project); const socials = new Socials(socialsAdapter); const player = new Player(playerAdapter, projectConfig.playerFields); const payments = new Payments(paymentsAdapter); const variables = new GameVariables(projectConfig.gameVariables); const achievements = new Achievements(projectConfig.achievements);
Работая с единым интерфейсом, я, например, указываю, что нужно показать рекламу, а обертка знает, как это вызвать, например, в Яндекс SDK или в VK Bridge. В результате не важно, к какой площадке подключена игра, потому что результат придет одинаковый.
export default abstract class AbstractAdsAdapter < isStickyAvailable: boolean; isFullscreenAvailable: boolean; isRewardedAvailable: boolean; isPreloaderAvailable: boolean; async showPreloader(banner: Banner): Promise < return Promise.resolve(true); >async showFullscreen(banner: Banner): Promise < return Promise.resolve(true); >async showRewardedVideo(banner: Banner): Promise < return Promise.resolve(true); >async showSticky(banner: Banner): Promise < return Promise.resolve(true); >async refreshSticky(banner: Banner): Promise < return Promise.resolve(true); >async closeSticky() <> >
Пример интерфейса для рекламного адаптера, который должна удовлетворить имплементация конкретного рекламного адаптера площадки
Чего еще не хватало в первой версии сервиса
На бэкенде нужно было сделать какую-то авторизацию. Я решил не париться, и воспользовался готовым решением от Google. Иначе пришлось бы хранить у себя логины и пароли, возиться с восстановлением данных, бороться с социальной инженерией и так далее. А так эти моменты за меня решает Google-авторизация. Некоторые разработчики шутят, что пора делать авторизацию через Яндекс, но я еще надеюсь, что Google в России не забанят.
Мой сервис сохранял данные игроков на сервере — по сути, в любом необходимом формате. Можно было добавлять список полей, типизировать и таким образом настраивать его под нужды конкретной игры.
Например, можно построить лидерборд по уровню игрока и по опыту — нужно просто изменить соответствующие параметры. Кстати, впоследствии гибкость построения лидербордов сыграла злую шутку, потому что когда у тебя не 100 тысяч игроков, а 100 миллионов, сортировать их становится сложновато.
С этим минимальным набором фич я пришел к знакомым разработчикам HTML-игр и предложил протестировать сервис. Аналоги тогда работали только с иностранными площадками, например, GameArter, а у меня поддерживались Яндекс Игры, VK и Одноклассники, так что идею подхватили с энтузиазмом. Уже через неделю у меня был длиннющий бэклог с разными хотелками от бета-тестеров, так что я стал развивать архитектуру и прикручивать новые фичи.
Что под капотом
В начале у меня был довольно простой набор сервисов. Прежде всего это API на Node.js, база данных MongoDB, Nginx и админка на Nuxt 2 / TypeScript, SDK только TypeScript. Плюс игровой оверлей на Preact.
Deploy
Все эти сервисы завернуты в Docker контейнеры и оркестрируются через Docker Compose.
Я сразу настроил CI/CD через GitlabCI. Как только пушу сервис в мастер, собирается билд с контейнером и затем выливается на продакшен сервер. По сути, это стандартный CI/CD pipeline. Я решил вкрутить его с самого начала, чтобы не приходилось выливать что-то вручную.
Поначалу это была просто сборка билда сервиса и раскатка на сервер. Есть много статей про настройку CI/CD в gitlab, например, GitLab CI: Учимся деплоить — в ней собраны основные возможности GitlabCI.
Пример моего конфига .gitlab-ci.ym для деплоя на прод:
variables: IMAGE: gamepush/api:latest deploy: image: docker:19 services: - docker:19-dind stage: deploy only: - master before_script: - docker login -u $CI_DOCKERHUB_LOGIN -p $CI_DOCKERHUB_PASSWORD - docker build --pull --cache-from $IMAGE -t $IMAGE . - docker push $IMAGE - apk add --update openssh - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null - mkdir -p ~/.ssh - chmod 700 ~/.ssh - ssh-keyscan $CI_DEPLOY_PROD_HOST >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts script: - ssh root@$CI_DEPLOY_PROD_HOST "cd /var/www/gamepush-deploy/; \ sudo docker pull $IMAGE; \ sudo docker-compose up -d --no-deps --build api; \ docker image prune -a -f;"
- Логинимся в докер, собираем билд и пушим образ;
- Устанавливаем модуль openssh прямо в раннере, чтобы подключиться к нашей удаленной машине;
- Добавляем приватный ключ с которым пойдем на сервер. Добавляем сервер в доверенные хосты;
- Подключаемся к серверу, пулим образ, через docker-compose пересоздаем контейнер с новым билдом и чистим старые билды через docker image prune, чтобы сэкономить место.
SDK
Поскольку SDK — это обычная JS-библиотека, ее нужно где-то положить, чтобы потом к ней можно было обращаться. Сначала я просто поместил ее в папку на сервере, чтобы поддержать работоспособность старых версий при релизе новой, я хранил там все сборки SDK.
Конечно, можно было сделать версионирование SDK, но я отказался от этой идеи, чтобы в любой момент можно было пофиксить баги или добавить полезный функционал без пересборки билда с обновлением версии SDK.
С этим связана проблема. Если я выложил новую версию SDK, а у игрока, например в VK, закешировалась и загрузилась старая версия основного модуля, то он может загрузить новый чанк с инструментами, которые не совместимы с новым SDK. Эта проблема решается Webpack из коробки. Он генерирует хэши при сборке, и при загрузке старой версии SDK, тянется старая версия VK-адаптера. Так можно хранить все версии сразу.
Количество сборок SDK со всеми чанками росло, какие билды уже не актуальны, а какие еще могли быть в кеше, — неизвестно. Не хотелось периодически подчищать старые сборки, более того, не хотелось вообще об этом беспокоиться. Так что я перезалил это все на S3. Теперь новые билды выливаются сразу туда, и я не переживаю о переполнении и каком-либо контроле. Правда, чтение с S3 происходит не быстро, поэтому я спрятал S3 за Nginx и кэширую основной SDK и чанки, а затем и вовсе закрыл все CDN от Cloudflare.
Пример конфига для получения файлов SDK из S3 хранилища:
server < server_name s3.gamepush.com; add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always; proxy_ssl_name gp.s3provider.com; proxy_ssl_server_name on; proxy_http_version 1.1; proxy_set_header Host gp.s3provider.com; proxy_intercept_errors on; proxy_cache off; proxy_read_timeout 300s; proxy_connect_timeout 75s; # gzip из коробки в Cloudflare gzip off; location /files/ < proxy_pass https://gp.s3provider.com/files/; >>
И затем получение SDKпроксируется на свой S3 домен с дополнительным кешированием в Nginx на минуту.
server < server_name gamepush.com; location ^~ /sdk/ < set $args ''; # gzip из коробки в Cloudflare gzip off; proxy_ignore_headers Expires Cache-Control; proxy_cache sdk; proxy_cache_valid 200 302 1m; proxy_ssl_server_name on; proxy_pass https://s3.gamepush.com/files/gs/sdk/; >>
S3 хост закрыт CDN от Cloudflare и обмазан его кешами. Это нужно из-за того, что S3 сервер долго извлекает файлы из хранилища, и бонусом CDN дополнительно сжимает их в gzip и brotli.
Дополнительное проксирование решает проблему очистки кэша Cloudflare. Если не куплен Enterprise план, скинуть кэш можно только явно передавая список источников на которых нужно очистить кэш, например iframe в Яндексе. Домены все разные, и лучше если источник будет один, в моем случае — корневой домен.
Сам корневой домен не закрыт CDN. На нем API и файлы SDK, которые весят не много и раздаются напрямую. Возможно в будущем имеет смысл раздавать SDK напрямую из S3, закрытого CDN. Но в случае выкатки SDK с критическим багом, откатить такое не получится, пока не протухнут кеши CDN и браузеров.
API
Сам сервис API сделан с использованием GraphQL — это язык запросов для API поверх HTTP. Идея GraphQL в том, что один сервис собирает в себе все остальные сервисы и возвращает только те данные, которые нужны клиенту. Например, тебе нужен список достижений игрока и список покупок, но за это отвечают разные сервисы. GraphQL-сервис сам опрашивает эти сервисы и отдает то, что запросил пользователь. Из самой схемы можно генерировать типизированный серверный и клиентский код. Я использую gqlgen для генерации из схемы на Go (API теперь на Go, но об этом в следующий раз) и graphql-codegen для генерации типов и клиента на фронте.
Все запросы в БД за проектом, достижениями, покупками или описанием структуры игрока кешируются на некоторое время, и это позволяет отвечать довольно быстро, особенно в пиковые нагрузки. Кэши сбрасываются при обновлении сущности, и следующий запрос пойдет в БД и обновит кэш.
Собирать эти данные помогает prometheus client, образец которого взят здесь (для Go).
Для NodeJS в проекте использовался Apollo Server. Плагин для сбора метрик — @bmatei/apollo-prometheus-exporter. Из-за использования GraphQL-схемы было достаточно просто переехать на Go, так как схема строго типизирует и входящие, и исходящие данные, а также отвечает за валидацию данных согласно схеме. Значит все что мне нужно переписать, — это запись и чтение в БД. Все остальное, даже список резолверов, генерируется фреймворком.
База данных
MongoDB, как многие говорят, — идеальный выбор для стартапа. Когда еще нет устоявшейся схемы и постоянно все переписывается, отсутствие типизации спасает. Сейчас, конечно, и в MongoDB можно задать жесткую схему. Но мой выбор пал на нее в том числе и из-за гибкости.
Вот несколько преимуществ и недостатков, которые я отметил за время работы с MongoDB:
+ Очень хорошо заточена под индексы. В том числе под индексирование сложных объектов и массивов. В моем проекте нет сложных индексов, но часто используются составные, например по номеру проекта и тегу достижения. Также все чаще нужны TTL-индексы, скажем на отслеживание игроков онлайн или хранение сессий в течение месяца, с автоочисткой.
Моя самая любимая фича с индексами, которая очень спасает — Index Intersection. Она позволяет на основе двух даже составных индексов использовать поиск по индексу, когда запрос затрагивает эти два индекса. Это выручает при построении рейтинга игроков.
Даже когда в базе более 100 млн записей, поиск по индексам все равно ничего не стоит. Главное только, чтобы серверу хватало памяти на хранение индексов. По-умолчанию база забирает себе половину ОЗУ сервера, а остальную рекомендует оставить под кеширование системой файлов БД.
— Индексы получаются очень объемными. Так, на хранение ObjectID индекса, который тебе не нужен, но обязателен для БД, уходит 2.2GB для коллекции в 100 млн. записей. В среднем хранение остальных составных индексов для этой коллекции занимает ~3.6GB.
+ Синтаксис запросов. За все свои годы я так и не привык к работе с SQL, поэтому работа с JSON для меня, как фронтендера более привычная и удобная.
— Пока не поработаешь с агрегациями. Но желательно проектировать так, чтобы они не понадобились. В этом как раз помогает GraphQL и подход дата-лоадеров. У меня агрегации используются в основном только в расчете статистики.
+ Репликация и шардирование из коробки, настраивается и синхронизируется автоматически, достаточно только указать список реплик. Они сами синканутся и распределят роли.
— Но есть нюансы. Есть много возникающих проблем с настройкой реплик, но они обычно инфраструктурные, например факт того, что БД находится в контейнере и даже не знает своего хоста.
Также не хватает обычного автоинкрементящегося числового ID, так что приходится подкостыливать.
Панель управления
Она достаточно простая. Из фреймворков был выбран Vue, тогда еще Vue2. В помощь ему Nuxt. Препроцессоры: SASS и Pug. Из библиотек компонентов остановился на Vuetify из-за его большого функционала, который помимо компонентов предоставляет еще и сетки, хелперы для стилей, темизацию. В общем css почти не пишу.
Оверлей
Оверлей — окна поверх игры, например, со списком достижений или лидеров. Нет ничего нуднее, чем делать скролл на движках игр. Такое решение позволяет переиспользовать во всех играх основные удерживающие игрока фишки.
Для него был выбран Preact, так как он достаточно легковесный, всего 7kb. Для сравнения, Vue 40-50kb, React около 500kb. Основным критерием выбора был именно вес, но еще мне хотелось пощупать реакт и tsx. Тем более все равно пет-проект.
Preact полностью может заменить React, что было очень нужно при работе с VK и их рекламными компонентами, которые работают только в реакт-экосистеме. Можно настроить сборку совместимую с Preact в два флажка в tsconfig:
Как работает сервис
Опишу, как происходит самое распространенный запрос к GamePush — сохранение игрока.
Прежде всего нам нужно как-то понять, с кем мы имеем дело, особенно если игрок не авторизован. Можно использовать какой-нибудь local storage, либо IndexedDB. Туда мы можем поместить ID / токен игрока, чтобы потом, при обращении на сервер, его идентифицировать.
Перед синхронизацией с сервером первым делом нужно получить у игровой площадки информацию об игроке — ID, ник и аватар. В это же время можно параллельно пойти и загрузить локальное сохранение игрока. Оно пригодится для перестраховки, если на сервере что-то вдруг случилось, или нам нужно сохранить прогресс именно с этого браузера.
Дальше SDK обращается на сервер, авторизовывается на нем и сохраняет игрока в базу. А потом от сервера возвращается ответ, и новый стейт записывается локально вместе с секретным кодом, чтобы можно было авторизовать игрока.
Как обеспечить локальное сохранение игрока? Самое простое решение — записать в local storage. Но есть iOS, которая упорно не хочет туда ничего сохранять. На этой платформе внутри iframe local storage работает как session storage, данные хранятся пока не закроешь браузер, а потом данные удаляются.
Чтобы это победить, я сохранял стейт везде, где только можно, — в localstorage, в IndexedDB, и если позволяла площадка, — на ней. Я пробовал записывать данные в куки, но со временем политика безопасности браузеров, особенно Safari — начала блокировать third-party куки. В конце концов Яндекс сделал обертку над localstorage — через общение с помощью post message между iFrame и верхнеуровневым доменом, и я начал дополнительно сохранять все через него. Из остальных площадок только GamePix пришли к такому же решению. В итоге для Яндекса данные сохраняются параллельно в 4 хранилища: LocalStorage, IndexedDB, обертку Яндекса над LocalStorage и, если игрок авторизован, в данные игрока на площадке.
Была еще одна интересная проблема, связанная с тем, что если пользователь заходит в браузер в режиме инкогнито, его нужно предупредить, что он потеряет прогресс, когда закроет вкладку. В какой то момент я реализовал через GamePush создание секретного кода сохранения и показывал игроку этот код, когда нужно было сохраниться. Как в играх на старых приставках, его можно было записать, ввести потом и продолжить с того же уровня игры.
Вот только разработчики браузеров специально делают так, чтобы со стороны сайта не было заметно, что браузер работает в режиме инкогнито. Раньше можно было, например, проверить существует ли local storage, можно ли записать в IndexedDB. Долгое время я определял режим инкогнито через установку Third-Party Cookies в стороннем iframe, но сейчас это эти лазейки прикрыли.
Новые фичи
Разобравшись с хранением данных игроков, авторизацией и вызовом разных функций платформы через универсальный SDK, я начал прикручивать дополнительные модули.
Например, в VK или Одноклассниках можно отправить пост на свою страничку и пригласить людей в игру, а на площадке Яндекс этого нет. Если выводишь игру сразу на несколько площадок, это очень неудобно. Чтобы как то уравнять их в возможностях, я начал писать адаптеры, которые показывают окно с нужной функцией поверх обычного интерфейса игры, подобно тому, как это происходит с лидербордами. То есть, если площадка не поддерживает какие-то действия, их нарисует мой сервис.
Кстати, с окнами связан еще один важный момент. Как оверлей может влиять на стили сайта и движки на которых разработчики пишут игры, так и стили игры могут влиять на оверлей. Что-то пойдет не так, и вся верстка поплывет. Поэтому я проставляю специальный префикс gp-overlay ко всем своим классам. Отказываясь от базовых имен классов, которые может как-то использовать движок игры, я изолирую свой код.
Рост нагрузки и польза проекта
В итоге я сделал интеграции со всеми основными игровыми площадками. Заработал сарафан, сервис набирал популярность, но проект еще воспринимался, как хобби. Первое время дохода от моих игр с лихвой хватало, чтобы покрывать расходы на сервер. О монетизации я не задумывался, но нагрузка росла.
Моя первая виртуалка работала на одном ядре и гигабайте оперативной памяти. Ее мне хватило надолго, потому что вся база данных составляла всего 25 мегабайт, а игроков было около ста тысяч. Поначалу у меня было всего 40 запросов в минуту, и долгое время Grafana была настроена именно на RPM.
В начале мая я открыл доступ к GamePush для всех желающих и тут понеслась. Сначала RPM превратились в RPS — нагрузка выросла до 3-4 запросов в секунду. Это было по-прежнему немного, но в июне я увидел цифру в 1 миллион игровых аккаунтов. Grafana показывала уже 9-10 RPS. Тогда я перешел на двухядерный сервер.
Месяц за месяцем счетчик неуклонно шел к 20-30 RPS. Сервер начал скрипеть и окончательно сдался в районе 60 запросов в секунду. На 1 RPS уходило примерно 2% ЦПУ, и двух ядер уже не хватало.
Естественным ответом на рост нагрузки стало вертикальное масштабирование. Сначала я выделил 4 ядра, потом 6, далее — 8. Чтобы как-то контролировать процесс роста и поддерживать сервер, я ввел монетизацию по запросам к серверу для новых пользователей. Оплата за запросы к серверу показалась мне более справедливой — сколько запросов сгенерировал, за столько и заплатит. Такой подход дает контроль нагрузки для меня и осознанное потребление для клиента. И все равно я уперся в потолок.
У моего хостера это это высокочастотный сервер на 5 ГГц, 8 ядер, 16 ГБ ОЗУ. Масштабироваться больше некуда, только если горизонтально (в случае базы данных это слишком сложный путь) или переезжать.
Не хочется этого делать, так что пока я придумываю всякие оптимизации, но об этом в следующий раз. Сейчас хочется сказать, что нет никаких гарантий, что из проекта получится бизнес, но я определенно не жалею, что заварил эту кашу. Я тут по сути и девопсер, и бэкендер, и фронтендер — прокачался во всем и получил кучу ачивок. Пет-проджекты действительно сильно развивают скиллы, но, предупреждаю: есть риск, что они сожрут все ваше время и заменят основную работу — тогда точно будет не до скуки — в хорошем смысле этих слов.
Надеюсь, вам было интересно. Пока что мы не глубоко заглянули под капот моего сервиса [ссылка удалена модератором] . Про какие аспекты его работы рассказать в следующий раз?
- разработка игр
- HTML-игры
- интеграция сервисов
- реклама в играх
- продвижение игр
- gamedev
- игры вконтакте
- яндекс игры
- одноклассники игры
- геймдев
- Программирование
- Разработка игр
- Монетизация мобильных приложений
- Монетизация игр
- Игры и игровые консоли
Яндекс Игры, в помощь начинающему разработчику!
Всем привет! Решил сделать небольшое обзорное видео платформы Яндекс Игры.
Любой начинающий разработчик, который считает что ему еще рано совать свой нос в Google Play, может попробовать свои силы на Яндекс Играх
6.2K поста 21.9K подписчиков
Подписаться Добавить пост
Правила сообщества
ОБЩИЕ ПРАВИЛА:
— Уважайте чужой труд и используйте конструктивную критику
— Не занимайтесь саморекламой, пишите качественные и интересные посты
СТОИТ ПУБЛИКОВАТЬ:
— Посты о Вашей игре с историей её разработки и описанием полученного опыта
— Обучающие материалы, туториалы
— Интервью с опытными разработчиками
— Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
— Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
— Посты, содержащие только вопрос или просьбу помочь
— Посты, содержащие только идею игры
— Посты, единственная цель которых — набор команды для разработки игры
— Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
— Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
— Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
— Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
— Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
— Cсылка размещается в формате: «Страница игры в Steam: URL»
2 года назад
раскрыть ветку
2 года назад
Жаль, что я рукожоп. Для меня и Яндекс какие-то дебри. А хотелось просто карточную игру создать (чисто, чтобы посмотреть, на что способна).
Похожие посты
2 дня назад
Месяц моей работы, а вышло полторы минуты)
Ох уж эта анимация, как же я её ненавижу, и люблю одновременно.
Сколько же сил она отнимает.
Я таки смог! Я закончил полноценный мульт трейлер! Теперь могу считать что у меня стальная задница)
В общем дело было так:
Хотелось нарисовать прикольный анимационный трейлер для своей игры, да тут еще и критика о том, что совершенно непонятно что за игра, симулятор алхимика да и бог с ним.
Но у меня то не симулятор. Вот и надо показать это.
Начал с раскадровке, что-то детально рисовал, что-то нет)
моя раскадровка, считаю что она идеальна 😀
Ну а дальше черновая анимация, которая выглядела так.
Эээх, а ведь я хотел нарисовать полностью ручную анимацию, но когда сел, то быстро понял, что один я её не вывезу, ибо времени туда надо огого.
В общем решил оптимизировать процесс и сделал всю анимацию в Spine, он сэкономил мне сотни часов.
А дабы придать живости трейлеру я попросил дядю Серёжу Чихачёва озвучить мне нарратора )
Получилось как то так в итоге!
Показать полностью 2 2
4 дня назад
Раздается пиксельный ужастик Far Away, Pixel Horror на Itch.io
Far Away, Pixel Horror — пиксельный хоррор для меня что-то новенькое. Кому интересно насколько удалось автору сделать задуманное.
Far Away — это короткая приключенческая игра ужасов в пиксельной графике. Вам предстоит пережить странное приключение молодого человека.
После завершения игры вы можете загружать сцены, чтобы выполнить дополнительные задания или переиграть главу.
ВНИМАНИЕ: на некоторых устройствах браузер может работать медленно. Если вы видите задержку, скачайте и играйте в игру самостоятельно.
- Двигайтесь с помощью [AD] или [<>]
- Взаимодействовать с [E]
- Стреляйте с помощью [Левой мыши]
- Прыгайте с помощью [Пробела]
Любой отчет об ошибке будет оценен по достоинству
- Обновлено : 5 дней назад
- Опубликовано : 10 ноября 2020 г.
- Статус : выпущен
- Платформы : Windows, macOS, Linux
- Оценка: 4,3 из 5 звезд
- Автор : qLes
- Жанр : приключения, платформер, шутер, симулятор
- Сделано с помощью FL Studio, Unity, Audacity, Aseprite, Bfxr.
- Теги : 2D, Мясо, Ужасы, Пиксельные арты, Короткометражка, Боковой скроллер, сверхъестественное
- Средняя сессия : Несколько минут
- Языки : английский
- Ввод : Клавиатура, Мышь
- Специальные возможности : Субтитры
Показать полностью 5
Поддержать
6 дней назад
Я целый месяц пыхтел над мульт трейлером своей игры!
Фуух, закончил.
Пыхтел, кряхтел я над ним месяц, и вот что у меня получилось, надеюсь вы оцените.
Пришлось потратить деньги сэкономленные на покупке энергетиков.
Согласно пакту, который вы заключили с высшими силами каждый день к вам будут приходить местные жители.
Кто-то в поисках лечения, кто-то – интереса ради, а иные и вовсе не прочь обстряпать темные делишки.
С помощью выбора зелий вы влияете на развитие дальнейших событий.
Можете спасать местных жителей, Но за добро придётся платить высокую цену, а можете отравить всех! Но и за это никто вам спасибо не скажет! Впрочем, лишь малая часть простых зелий будут доступны со старта, вам предстоит открывать новые и более сложные, смешивая ингредиенты или получая рецепты и подсказки от НПС. Открытые зелья, как бы ни закончилась очередная ваша история, сохранятся на следующем круге.
Игра выйдет 24.01.24
Качайте и добавляйте в список желаний demo-версию игры The Witch’s Cauldron:
Залетайте в наш канал в Discord, Там мы можем пообсуждать игру:
Так же у меня есть группа разработчиков в ВК
Ну и Boosty, для тех, кто захочет поддержать меня и мою команду:
Показать полностью
7 дней назад
Нарисовал вот такую планету как фон для своей игры
Игра представляет собой гибрид рогалика и леталки-стрелялки, в которые я любил залипать на Сеге . Делал все сам (кроме музыки), в одиночку, чуть больше полугода.
Готовлюсь выпускать в ранний доступ. Кому не трудно, можно поддержать, добавив мою игру в список желаемого на Стиме. Спасибо заранее!
Показать полностью
Поддержать
7 дней назад
Песнь Копья. Пошаговая тактика о сказках, богатырях и нечисти
Мы Divovision Games. Нас 2ое, Пётр и Иван. Мы, делаем игры. Сейчас мы разрабатываем Песнь Копья — пошаговую тактику в сеттинге славянских сказок с элементами рогалика. Мы горим этим проектом и прилагаем все усилия, чтобы он получился.
Отряд богатырей раз за разом отправляется в поход, чтобы очистить княжество от нечисти.
Особенности игрового процесса:
- Комбинируй способности героев и позиционную игру чтобы достичь результата.
- Перманентная смерть членов отряда. Одна ошибка и ты ошибся
- Каждый поход уникален, сражайся и приспосабливайся к изменяющимся условиям.
- Сражайся с каноничными боссами-злодеями из народных сказок.
- Прокачивай отряд и постоянные усиления, которые помогут тебе в походах.
Геймплей
Так как для тактик наиболее важное — это дать игроку почувствовать себя умным, то при дизайне геймплея мы хотели сосредоточиться на комбинировании особенностей героев, которые при правильном применении переворачивают схватку с ног на голову.
Во многом мы вдохновлялись «Into the breach» и «The Banner Saga».
Одна из самых забавных особенностей этих игр это манипулирование юнитами противника. Особенное удовольствие доставляет перемещения врага под удар другого врага или сталкивание их лбами.
Поэтому мы уделяем большое внимания комбинированию способностей разных персонажей, чтобы каждая схватка была максимально вариативной. Так, например, один герой может переместить противника под действие способности другого героя, а третий может усилить её эффективность.
Мы решили не делать систем вероятностей как в XCOM. Все атаки 100% попадают в цель, а сам процесс игры мы хотим сделать больше похожим на шахматы, но сильно ускоренные по темпу игры.
Структура рогалика (roguelike) довольно стандартна. Отряд путешествует по 4ём биомам с различающимися противниками и особенностями уровней. В конце каждого биома игроки встретят босса.
В отряде может быть до 4 героев. Смерть героя во время сражения означает его потерю для отряда. Потеря героя на поздних уровнях может дорого обойтись игроку. Новых героев можно получить за сложные битвы как награду или нанять на рынке за золото.
Перед каждым боем игроку даётся выбор из нескольких заданий отличающихся по сложности и награде. В итоге мы хотим получить систему, которая заставит игрока придерживаться баланса и с умом выбирать следующее задание. Выбирая более сложные задания игрок получает лучшую награду, но и рискует больше обычного.
Геймдизайну сражений с боссами мы хотим уделить особое внимание, так как они представляются наиболее известными и каноничными персонажами сказок: Змей-Горыныч, Кощей и другие.
У боссов несколько фаз, а их способности и особенности завязаны на их образах из сказок.
Мир игры
Представляет из себя классическое фэнтези замешанное на славянских сказках и фольклоре.
Здесь игрок управляет отрядом закалённых богатырей — охотников на нечисть. Отряд путешествует от деревни к деревне, выполняя контракты на уничтожение вурдалаков, ночниц, леших и других представителей местной фауны.
Арт
При создании графики мы опираемся на такие, горячо любимые нами из детства игры, как Warcraft III, HoMM V, King’s Bounty, Демиурги.
По правде говоря, когда мы приступали, то вообще мало, что знали про особенности нашей культуры. Только клише в голове: русские витязи, острые шлемы, хохлома и прочие атрибуты, которые уже все 100 раз видели. Хотелось чего-то нового, в то же время узнаваемого, и со своей индивидуальностью. С самобытностью как у картин Ивана Билибина, но современно и живо. Сбор референсов на тему славянской культуры открыл глаза на некоторые мелочи.
Что наша культура — это такой интересный калейдоскоп из культур востока и севера, а главные его детали — это орнаменты и письменность.
Изначально мы собирались сделать мрачную атмосферу, но где то на этом моменте мы поняли, что она совсем не подходит для нашей игры, а для того чтобы передать настроение не обязательно использовать только темные образы.
Художник Ваня хотел избежать прямых клише в дизайне персонажей. Не делать просто бородатого витязя с булавой. Так что все герои внешне выглядят по-фэнтезийному, но со славянской изюминкой. При создании концептов каждому герою он написал маленькую предысторию, чтобы лучше связать их характер и внешний вид.
Это не первый наш проект, но первый для себя, а не на заказ. Поэтому мы стараемся вложить в него душу и всю нашу любовь к видеоиграм.
На данный момент мы работаем над вспомогательными механиками, которые помогут погрузиться глубже в игру.
- Передвижение по карте мира
- Прокачка персонажей
- Инвентарь
- Подача сюжета
- Разнообразные модификаторы поля боя
У нас есть демоверсия, в которой можно попробовать основную боевую механику, в Steam и в VKPlay.
Релиз планируется в первом квартале 2024 года.
Добавляйте в игру в желаемое (wishlist) и подписывайтесь на нас. Этим вы очень поможете проекту!
Показать полностью 8 1
12 дней назад
Делаю игру на Unreal Engine 5 в одиночку
Довольно медленно идёт, но идёт. Демка будет готова через ~2 месяца.
Буду рад любой поддержке.
сделал второй мини трейлер
ищу нарративного дизайнера опытного, чтобы сделать отличный непошлый ностальгический сценарий. Если кто-то такой есть напишите мне в личку в тг @vgfor
также если кто-то знает как привлечь инвестиции, тоже прошу в личку. Хочется сделать что-то классное, но своих мощностей немного не хватает.
Показать полностью 5 1
Поддержать
14 дней назад
Defense War в жанре стратегия-башенная защита в космосе раздается на Itch.io
Defense War — это красивая игра в жанре Tower Defense, которая проверит вашу стратегическую сторону, защищаясь от волн врагов с помощью широкого спектра турелей и оружия в 4 разных мирах и пытаясь восстановить Землю после масштабной катастрофы.
- В игре есть сюжетный режим, охватывающий более 4 удивительных карт на 4 разных планетах, каждая из которых имеет свой уникальный внешний вид.
- Более 10 турелей, каждая из которых имеет свои сильные и слабые стороны: от крупнокалиберных пулеметных турелей до плазменных и лазерных турелей, решать вам!
- Многие типы врагов, грузовики, танки и Голиафы используют разные стратегии.
- Соревнуйтесь онлайн с друзьями и наберите больше очков в аркадном режиме!
- Аркадный режим включает в себя 6 красивых больших карт: Земля, Эстея и Воин9. каждый по-своему особенный с опциями ночного режима и эффектами дождя.
- Особенности: онлайн-таблица лидеров, мини-карта, сюжетный режим, аркадный режим, ночной режим, погодные эффекты, большие карты, полный саундтрек, ценность повторного прохождения.
- Ночные режимы и погодные эффекты!
Больше информации
- Опубликовано 22 августа 2020 г.
- Статус выпущен
- Платформы Windows
- Автор StarSystemStudios
- Жанр Стратегия
- Теги Разрушения, GameMaker, Для одного игрока, Tower Defense
- Ссылки Steam
Показать полностью 2 1
Поддержать
16 дней назад
Horror Fan House игра в стиле хоррор-головоломка раздается на Itch.io
Horror Fan House (Дом фанатов ужастиков) — мини хоррор где надо включить свет в доме если осмельшься. Жутковатая атмосфера классических ужастиков, стоп кадры из тех же ужастиков создают атмосферу мурашек пробегающих табуном. Любителям проходить игры на ютубе есть тоже, что посмотреть ).
Сделано на Unity, короткое приключение в жанре ужасов для самых отважных поклонников ужасов.
Исследуйте дом и включите весь свет, если сможете.
Все ассеты игры доступны на sketchfab.
Больше информации
- Обновлено : 1 день назад
- Опубликовано : 10 августа 2022 г.
- Статус : выпущен
- Платформы : Windows
- Оценка : 5,0 из 5 звезд
- Авторская : Pizza & Games
- Жанр : приключения, головоломка
- Теги : 3D, Asset Pack, Тьма, Ужасы, Jumpscare, Low-poly, Тайна, Unity
Показать полностью 3
Поддержать
28 дней назад
Раздача Low poly гонки с красочными цветами Ryza Roads на itch.io
Ryza Roads ралли как по лесу и, так и в городе . Раздача до субботы 8:00 МСК
Вот некоторые из вещей, которые вы можете сделать:
- Дотянуться до небес!
- Отправляйтесь в плавание!
- Исследуйте множество мест!
- Настройте свои автомобили!
- Настройте своего персонажа!
Больше возможностей:
- карта площадью 1 км+;
- Много разных транспортных средств;
- Гонки на время;
- Гонки против процессора;
- Кастомизация автомобиля;
- Кастомизация персонажа;
- Достижения;
- Полная поддержка клавиатуры/джойстика;
- Много веселья!
Обновлено : 46 дней назад
Опубликовано : 23 июля 2019 г.
Дата выхода : 27 декабря 2017 г.
Оценка : 3,8 из 5 звезд (100всего оценок)
Автор : Фелипе Годой
Сделано в Adobe Photoshop, Unity, Blender.
Теги : 3D, Вождение, Low poly, Открытый мир, Одиночная игра
Средний сеанс : Около получаса
Входы : Клавиатура, мышь, контроллер Xbox, геймпад (любой), джойстик
Показать полностью 4
Поддержать
1 месяц назад
Атмосферно получается?
Сделал небольшой прототип. Есть мысли наделать разных окружений, технику, лебёдку, грязь. Ну и какой-то смысл самих поездок тоже добавить.
1 месяц назад
Доделать игру и умереть — опыт основателя студии perelesoq
Две недели назад вышла наша игра Torn Away. Мы начали делать её в далёком 2019 году, в то время, когда трава действительно была зеленее. Что же я чувствую сейчас, спустя эти долгие 4 года?
Зайду издалека. Я мечтал о создании своей игры, когда ещё учился в школе. Делать игры — казалось чем-то из разряда волшебства. Взрослые говорили, что это не работа, а сплошное фантазёрство и надо думать о практичных вещах. Мне же так не казалось.
Самым очевидным путём виделось научиться программировать. Игры ведь делают программисты? Да и звучит солидно! Я купил первую попавшуюся книжку в магазине, проштудировал, попробовал так и сяк — оказалось не моё. Написание переменных, условий и циклов казалось бесконечно далёким от создания бескрайних игровых миров.
Да, тогда журнал ещё печатали на бумаге
Позже в одном из выпусков журнала Игромания я прочитал, что есть такая профессия — 3D-моделлер. Делать модельки и рисовать текстуры звучало гораздо интереснее. Так я начал скупать книжки по моделлингу, зависать на сайтах вроде рендер.ру и других форумах.
Интерес к 3D начал потихоньку пропадать — то ли усидчивости не хватало, то ли результаты перестали радовать — но зато меня увлекло рисование от руки. На один из дней рождений родители подарили мне планшет Ваком Бамбу. С него и начался мой путь в мир 2D-арта.
Тот самый первый рисунок на свежеподаренном планшете
Шли годы, я продолжал рисовать. В том возрасте скилл рос очень быстро: я жадно собирал любую информацию по компьютерной графике, активно выкладывал арты на формы, прислушивался к фидбеку от старших товарищей. Уже к 15-ти годам у меня было собрано портфолио, которое позволяло находить небольшие заказы тут и там.
Одна из старых работ
Так я более-менее понял, куда мне нужно двигаться, чтобы делать игры. Ещё через пару лет, на летних каникулах я познакомился с арт-диром небольшой команды, она позвала меня к ним рисовать казуалки. Это был 2011 год, индустрия как раз наполнилась играми в соцсетях… В общем, я был безумно рад такой возможности. С этого момента можно отсчитывать мой путь в геймдеве.
Мой уровень на тот момент
Проработал я там всего несколько месяцев, потому что совмещать парт-тайм работу с учебой в 11-ом классе было трудновато. Тем не менее, в школу я уже ходил только для галочки. Меня всё больше и больше увлекала графика. Я много рисовал для себя, придумывал какие-то сюжеты, истории, ситуации…
Мне 18 лет. Заканчиваю школу и уезжаю в Москву. Несколько месяцев ищу работу, активно делаю тестовые задания. В какой-то момент казалось, что я переоценил свои возможности и никому такое юное дарование не сдалось.
И вот долгожданный звонок — меня берут в крупную по меркам времени компанию, которая занимается социалками и мобилками. Отлично, иду работать в офис и получать настоящий боевой опыт бок о бок с ветеранами индустрии.
Иллюстраций с тех времён я не нашёл, зато откопал такое!
Все ребята, с которыми я познакомился, были реально крутыми. Но чем дольше я там работал, тем сильнее я чувствовал тесноту в рамках профессии художника. Да, мне всё ещё нравилось рисовать по своим идеям, но реализовывать чужие… Я понял, что пора создавать что-то своё.
…и ушёл из игровой индустрии ради работы с интернет-сообществами. Эта сфера подкупила меня тем, что можно было довольно быстро реализовать идею и почти мгновенно получить отклик от сотен, а то и тысяч человек. Если кто-то из вас помнит 2012-2013 год, когда паблики в ВК были местом андерграундного творчества, то вы меня поймёте! Этот опыт может показаться совсем сторонним, но только на первый взгляд.
Как же хорошо было тогда в Интернете!
Зарабатывая в другой сфере, я начал думать о том, чтобы вернуться в разработку, но уже самостоятельно. Программировать я по-прежнему не умел, поэтому принялся искать напарника. Всего через пару недель карты сошлись и мы начали общаться с парнем, который тоже хотел вкатиться в геймдев. У него было много прототипов, но не было законченных идей.
Всё случилось очень быстро: потратили пару дней на обсуждение, выбрали наиболее интересную из его наработок, я сочинил концепт и нарисовал всю графику. Четырнадцать дней и вот игра уже в Аппсторе.
Тут оказались кстати мои паблики в ВК. Благодаря ним мы смогли дотянуть до топа Аппстора. Денег мы тогда никаких не заработали, но зато получили крутейший опыт.
Конечно, я мечтал не о таких играх — а о тех, что захватывают своей историей и долго не отпускают после прохождения. Можно ли было сразу начать с таких? Наверное, можно. Но я не советую. Сейчас ретроспективно понимаю, что начинать нужно с малого, иначе есть риск стать жертвой амбиций — так и остаться тем самым фантазёром, у которого тысяча крутых идей, но ничего даже не записано на бумаге.
За несколько лет я сделал ещё несколько небольших игрушек. Успел поработать геймдизайнером, подрос до ПМ, а затем и до продюсера. Выгорел, бросил всё и при этом сделал игру (почти) в одиночку.
В моей жизни была не только самостоятельная разработка. Появились крутые карьерные возможности, своя семья и обязательства, а вместе с ними предательская мысль: не пора ли заканчивать это баловство? Наши большие мечты часто не умещаются в обычную жизнь. Может пора просто повзрослеть?
Пока я размышлял над этими вопросами, судьба подкинула мне возможность. Через общего друга я познакомился с одним парнем, которого очень интересовала индустрия игр. Он сам большой поклонник проектов с глубоким нарративом, но все в его окружении были повёрнуты на метриках и способах поизысканнее вытащить из игроков денег. Наши взгляды на то, какими должны быть игры, совпали.
Уже через неделю я вернулся с небольшим документиком, в котором описал концепцию игры. Моему новому товарищу идея понравилась, и он дал добро на сбор команды. С этого началась история Torn Away.
(Кстати, узнаёте голос нарратора?)
Dпервые за свою жизнь я оказался так близок к той самой мечте из детства. Сделать такую игру, которую тому самому школьнику было бы интересно пройти вместе со старшим братом… Ничего не пугает так сильно, как страх превращения мечты в реальность. Что будет, если у меня не выйдет? Что будет, если выйдет, но это никому не понравится? Почему я вообще решил, что мне есть, что сказать?
Ответов на эти вопросы у меня нет до сих пор, но чему я научился за последние 4 года, так это смирению. Делай, что должно, и будь что будет.
За эти 4 года мы с командой пережили многое — производственный ад, возможность потерять финансирование, страх перед пандемией, новую реальность на самоизоляции, февраль 2022…
Примерно так порой ощущалась разработка. Сама игра на русском, другого скрина под рукой нет)
Было столько удобных причин сдаться — ну да, не вышло. Так сложилось. Но всё же почему-то, раз за разом, мы брались за дело и делали всё, что от нас зависит.
Для себя я выделил две причины. Первое — это любовь к делу, погоня за мечтой. Вторая — ответственность перед командой, которая вложила столько труда в наш общий проект. Варианта отступить для меня просто не существовало.
Подводя итог, хотелось собрать здесь несколько выводов, которые я для себя вынес за все эти годы. Возможно, они окажутся полезными кому-то из вас. Самому себе 4 года назад я бы точно сказал это:
- Если нет опыта, то начни с малого. Иначе рискуешь никогда не доделать
- Люби то, что делаешь. Если твоя игра провалится, ты не будешь жалеть о бесполезно потраченном времени
- Чем больше твоя команда, тем яснее должно быть твое видение. Научись формулировать!
- Если делаешь сюжетную игру, либо пиши сам, либо делай сценариста полноценной частью команды
- Не работай в стол — реакция игроков это безумно важно. Долгое время будет казаться, что всё, что ты делаешь, никому не нужно. Реальные игроки помогают понять, что это не так
- Разделяй ответственность, работа в команде это в том числе про доверие
- Береги тех, с кем работаешь. Да, всегда хочется прыгнуть выше головы, но погоня за совершенством изматывает людей
- Веди документацию, планируй задачи. Это не убивает душу, а спасает нервы и бережет время
- Фиксируй рабочие отношения юридически, перед заключением договоров найми юриста
- Всё обязательно пойдёт не так, как ты задумал, будь к этому готов
- Держи режим дня, хорошо питайся и спи
- Сделай сначала хоть как-нибудь, потом постепенно улучшай. Хорошее рабочее решение гораздо лучше идеального теоретического
- По возможности, работайте в одном пространстве. Это поможет вам сблизиться и не возненавидеть друг друга во времена трудностей
Отвечая на вопрос в начале текста: что же я чувствую, выпуская игру, на которую ушло 4 года моей жизни — я чувствую много всего.
Удовлетворение от законченной работы. Гордость за всех ребят, с кем посчастливилось трудиться вместе. Волнение за то, как игроки по всему миру примут историю Аси — наше маленькое и грустное приключение. Предвкушение того, что ждёт впереди. И благодарность. Пожалуй, благодарность — это самое сильное чувство.
Я благодарен моему партнёру за то, что поверил в меня. Благодарен всей нашей команде за преданность общему делу и невероятный талант. Благодарен нашим игрокам — за то, что следите за нами все эти годы и пишите много теплых слов. Всем нашим издателям за помощь в донесении нашей игры до широкой аудитории. А ещё я благодарен своей любимой жене — за терпение, поддержку и вдохновение.
И всем, кто дочитал до конца!
Для тех, кто желает нас поддержать покупкой, оставлю ссылки на Steam и VKPlay. Игра также вышла на Xbox, готовимся к релизу на PlayStation и Nintendo Switch.
Показать полностью 14 2
1 месяц назад
Когда то я взял кредит на Spine 2D и теперь не жалею об этом
В своё время я работал в разных сферах – и в охране, и в «КаБэ-шке»… Но каждый день, приходя на нелюбимую работу, я думал, как здорово было бы создать свою игру..
Постоянная рутина загоняла меня в рамки обычного выживания, жизнь от зарплаты до зарплаты заставляла: «Ау! Какие могут быть мечты, работать надо! Иди, грузи коробки, таскай ящики, наливай пивас посетителям – очередь какую собрал уже!».
А дома (жил я тогда далеко от места работы) сил хватало лишь на то, чтобы доползти до кровати и упасть на неё до следующего утра. А утром – всё по новой, вернее, всё тот же день сурка. И так продолжалось несколько лет.
Вокруг все говорили: «Какой из тебя художник? «Художник – от слова «худо»».
Самое невыносимое было слышать что-то такое от родных людей, например, от бабушки: «Иди на завод, там настоящие деньги крутятся! Что ты всё сидишь за компуктером».
Или от родителей: «Иди, продавай что-нибудь, ведь ты хорошо разговариваешь, у тебя талант только к этому».
К слову, в детстве родители не могли позволить оплачивать мне художку.
А я очень хотел. Помню как-то я вместо друга сходил на занятие по ИЗО, т.к. он заболел и хотел пропустить. Занятие было уже оплачено, и я пошёл вместо него.…Или от учителей: «Без математики – никуда! Вот где настоящая наука, а не это вот, что у тебя в тетради». Это правда: я часто рисовал в тетрадях – это для меня было намного интересней, чем синусы и тангенсы, или тема «маленького человека» в произведениях Гоголя. Я тогда так и сказал своей классной: «Вырасту и стану художником, тогда посмотрим!». Нагло? Да. Самонадеянно? Да. Учительница, кажется, сама обалдела, услышав такие слова от очкарика с задней парты.
Это всё лирика и воспоминания… Вернёмся к главному. Каждый день я всё же просыпался с мыслью о своей игре, хоть бытие, система и рамки не готовы были выпустить меня так просто. И я решил хотя бы час в день, но уделять любимому хобби – рисованию.
Изучив самостоятельно достаточно материалов и узнав принципы работы в арт-программах, я начал пытаться попасть в геймдев.
Моя основная работа была не рада этому и не собиралась меня отпускать, ведь всё устроено было таким образом, что зарплата делится на три части (Аванс, основная зарплата, премия) и этих денег хватало только до следующей партии денег.
Было сложно, что скрывать. Начальство давило, сил не хватало, постоянная усталость и апатия. Я не выдержал, взял отпуск и кредит на 150 000 рублей, уехал на море, вернулся и… больше никогда не вышел на прежнее место работы. Оставшиеся от кредита деньги я потратил на Spine 2d – программу для костной анимации, а уже через неделю у меня была готова пара-тройка работ, которые я выложил на форуме.
Спустя ещё пару недель у меня начали появляться первые заказы на анимации, и я подумал: «Неужели и правда, люди готовы платить мне за моё творчество? За рисунки? Но как же так? А как же завод, о котором мне вечно твердили?».
Вскоре я отбил деньги, потраченные на программу, а потом – и кредит погасил.
Время шло, я становился лучше, мои работы – круче. Меня пригласили в геймдев на слоты (наверное, все начинают с них).Сегодня я работаю VFX-аниматором.
Успел поработать студиях Bandai namko, Riot games, Disney (жена вангуем мне работу в Netflix. Что ж, посмотрим).Сейчас у меня даже хватает время на мою собственную игру, о которой я уже Рассказывал.
В планах открыть собственную студию разработки игр, дабы показать Тоду Говарду, как нужно делать игры.
Вы можете поддержать меня добавив игру в свой список желаний в Steam, это мой первый проект и я надеюсь он будет успешным.
Так прикольно сейчас вспомнить о том, что моя сегодняшняя деятельность когда-то была мечтой. Наверное, то же чувствовал и Стив Джобс, и Бобби Котик и много кто ещё… Теперь и я.
Залетайте в наш канал в Discord, Там мы можем пообсуждать игру.
Так же у меня есть группа моих проектов в ВК
Ну и Boosty, для тех, кто захочет поддержать меня и мою команду
Не забывайте идти к своей мечте! И играйте только в хорошие игры)
Яндекс игры как добавить свою игру
Мой опыт заработка на Яндекс.Играх — разработка, размещение, статистика и результаты
В данной статья хочу рассказать о своем опыте заработка на игровой сервисе Яндекс.Игры. Впервые с сервисом я познакомился через YouTube канал «BL’Games». Там автор рассказывал, как он с помощью Яндекс.Игр имеет стабильный доход, который дает ему заниматься любимым делом.
Я тоже давно мечтал делать мобильные игры, но для серьёзных проектов у меня не хватало времени. Поэтому я решил тоже попробовать залить свои простенькие игры на сервис.
И вот что получилось.
Что такое Яндекс.Игры
Яндекс.Игры — это каталог браузерных игр, на которых можно играть на компьютере и на телефоне. Главное отличие от других игровых сервисов в том, что Яндекс сам льет трафик в игры через другие свои сервисы.
Согласно сервису Яндекс.Радар, месячная посещаемость Яндекс Игр составляет 8 639 365 человек. Ежедневная аудитория — 1 138 728 человек. Каждый месяц в поиске Яндекса Яндекс.Игры ищут около 2 млн раз.
Выбор жанра
Первым делом нужно было выбрать жанр игры. Изучив каталог Яндекс Игр, я решил, что самым простым будет создание квиза. Квиз — это тест-викторина, где нужно отвечать на разные вопросы.
Темой вопросов выбрал фильмы. Игроку должно было по очереди показываться сцены из фильмов и сериалов и он должен был выбрать из 4 названий правильный. По такой схеме создавались очень много игр для этого сервиса и было видно, что аудитории такой формат нравится. Хотя квизы трудно назвать полноценной игрой. Это скорее тестирование на знание некоторых фактов и проверка на память.
Выбор движка для игры
Сразу решил, что буду использовать движок, а не конструктор. Во-первых, игровые движки дают возможность более гибко реализовывать задумку.Во-вторых, хотелось сразу изучить язык программирования для последующих проектов.
Сначала начинал разработку на Unity3d, но из-за проблем с ноутбуком пришлось искать менее требовательную программу. И так я познакомился с игровым движком Godot.
Godot Engine — открытый кроссплатформенный 2D и 3D игровой движок под лицензией MIT, который разрабатывается сообществом Godot Engine Community. Разрабатывать игры можно через Linux, Windows, MacOS и даже браузер.
Разработка
Сам процесс разработки не буду рассказывать, это будет темой другой статьи. Сначала изучил официальную документацию движка на https://docs.godotengine.org/ru/stable/community/contributing/index.html . Просмотрел пару роликов на YouTube. После этого приступил к разработке. По сути, для простого квиза нет никаких сложностей. Нужно показывать сцены из фильмов и 4 кнопки с возможными вариантами ответа. После нажатия на кнопку, определяется правильность и выводится результат. Далее происходит переход на новый вопрос. Вопросы разбиты по уровням сложности.
Регистрация в консоли разработчика Яндекс.Игр
С регистрацией в консоли разработчика Яндекс.Игр проблем не возникло. Для этого нужно перейти на страницу https://yandex.ru/dev/games/ и нажать «Консоль разработчика Яндекс.Игр».
Нужно придумать имя аккаунта разработчика. Она будет видна на странице ваших игр.
Чтобы создать новую игру, нажимаем «Добавить приложение», соглашаемся с лицензионным соглашением и нажимаем «Добавить».
Подробнее о заполнении карточки вашей игры можно прочитать в официальной документации.
Добавление рекламы и публикация
Чтобы пройти модерацию игры и начать зарабатывать, нужно подключить SDK Яндекс Игр.
SDK Яндекс Игр — это библиотека, позволяющая быстро интегрировать игры, созданные сторонними разработчиками, в платформу Яндекс Игр.
Без подключенного SDK ваша игра не сможет разместиться в каталоге Яндекс Игр. Подробное руководство по настройке и подключения SDK описана в документации.
Пример добавления SDK в игру:
Также нужно подключить монетизацию в рекламной сети яндекса (РСЯ). Для этого нужно нажать «Подключить монетизацию», заполнить достоверную информацию о вас и нажать «Зарегистрироваться». После регистрации потребуется указать ваш счет в банке, для получения оплаты. Рекомендую это сделать сразу после регистрации в консоли разработчика.
Когда на 100% уверены, что игра готова и выполнены все требования к игре, можно отправлять на модерацию.
Статистика
За первую неделю (с 12.03.2021 по 19.03.2021) игра принесла 924,13 ₽.
За месяц (с 12.03.2021 по 12.04.2021) 1 528,00 ₽.
За все время (с 12.03.2021 по 22.08.2022) игра заработала 3 315,99 ₽.
Для простого квиза сделанного за 2 вечера это не очень много. Но у учел свои ошибки и решил создать еще один квиз. В этот раз создавать все с 0 не пришлось. Поэтому все сделал за 1 вечер.
В этот раз игра уже показала более высокие результаты и за все время принесла 7 310 рублей.
Всего за 3 месяца я разместил 9 игр. Среди них были нормальные игры на которые у меня ушли гораздо больше времени. Но наибольшую прибыль принесли квизы. Скорее всего, это связано с аудиторией сервиса. Детские игры меньше монетизируются, а в квизы играют (или проходят) в основном взрослая аудитория.
Всего за все время я заработал 39 144 рублей. Из этой суммы заплатил 13% налога — 5 088 рублей. Последнюю игру я разместил в мае 2021 года. Но прибыль я полуя до сих пор. Каждый второй месяц набирается минимальная сумма для вывода(3 000 рублей).
Я согласен, что качество этих игр(и квизов) не очень хорошее. Но в процессе разработки я научился создавать браузерные и мобильные игры на Godot. И использовал эти навыки для других своих проектов.
Если вы начинающий разработчик инди игр, то Яндекс Игры это отличная платформа для монетизации ваших игр и обратной связи. А также вы можете увеличить монетизацию, разместив ваши игры на другой платформе — Игры Вконтакте.
Заработок на разработке игр для сервиса Яндекс.Игры
Хотите получать стабильный дополнительный доход за счет монетизации ранее созданных вами браузерных игр, которые уже размещены в Интернете? Компания Яндекс анонсировала возможность загружать браузерные игры в сервис Яндекс.Игры и получать доход за счет монетизации. Из этой статьи вы узнаете, почему этот заработок подходит всем – даже тем, кто не обладает навыками программирования. Также мы поделимся пошаговой схемой настройки монетизации.
Что из себя представляет сервис Яндекс.Игры
Ключевое слово в этом случае – «браузерная», то есть игра, в которую можно играть непосредственно в Google Chrome, Opera, Яндекс.Браузере и других.
Как добавить свою игру на Яндекс.Игры
Способ получения заработка очень простой и состоит из нескольких шагов.
Шаг 1. Создайте браузерную игру или подготовьте ранее созданную
Вам понадобится не сама игра в виде скачанного файла, а код. Яндекс акцентирует внимание на том, что можно дублировать имеющиеся игры – разрабатывать новые необязательно.
Шаг 2. Создайте аккаунт разработчика
Для этого перейдите по ссылке, придумайте название и примите лицензионное соглашение. Вам сразу же присвоят статус «approved».
Шаг 3. Опубликуйте игру в Яндекс.Игры
Подключите вашу игру через сервис SDK Яндекс.Игры В этом разделе предлагается конкретная пошаговая инструкция, как это сделать.
Шаг 4. Настройте монетизацию
Для этого перейдите по ссылке и создайте аккаунт в «Рекламной сети Яндекса».
Настроить отображение рекламы можно с помощью специального кода. Подробности указаны в разделе «Интеграция SDK» – «Работа с рекламой».
Можно ли заработать на сервисе Яндекс.Игры
С учетом масштабов этой поисковой системы ответ очевиден: с помощью Яндекс.Игр можно не только заработать, но и создать прибыльный бизнес.
«Яндекс.игры» теперь открыты для сторонних разработчиков
18+ Сетевое издание Игромания
Свидетельство о регистрации СМИ: Эл № ФС77-83780 от 19 августа 2022 г.
Выдано Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций
Главный редактор: Бражник А.В.
Учредитель: ООО «ТМ-Медиа»
2003-2022 «ТМ-Медиа». Полное или частичное воспроизведение материалов сайта и журнала допускается только с согласия редакции.
Мнение авторов и посетителей сайта может не совпадать с мнением редакции.
Наши друзья:
CrowdRepublic — краудфандинговая площадка для настольных игр и книг.
«Канобу» — новости кино, сериалов, игр, музыки и технологий.
Как создать викторину «Своя игра» в PowerPoint
Отвечать на вопросы викторины всегда увлекательно! Видишь клеточки с названиями категорий и стоимостью вопросов — и неизбежно испытываешь ностальгию. Вспоминаются домашние вечера перед телевизором, когда мы ломали голову над очередным вопросом вместе с игроками. Благодаря современным технологиям вы буквально за 10-20 минут можете создать викторину наподобие «Своей игры» и сыграть в нее с друзьями. В этой статье мы расскажем, как сделать такую викторину в PowerPoint. Начинайте придумывать вопросы! Кроме того, вы получите подробную пошаговую инструкцию по созданию викторины с нуля и бесплатный шаблон викторины в формате PPT. Итак, приступим!
Этап 1: Создаем игровое поле
- Откройте PowerPoint или конструктор онлайн-курсов iSpring Suite и создайте новую презентацию.
- На вкладке Дизайн выберите и примените понравившуюся тему оформления.
- Создайте новый слайд и добавьте на него таблицу (Вставка → Таблица).
- Создайте таблицу с пятью колонками и пятью строками.
- Увеличьте размер таблицы, чтобы она заняла весь слайд, и заполните ячейки.
- Измените цвет игрового поля, чтобы оно еще больше походило на оригинальное поле из «Своей игры». Для этого выделите таблицу и нажмите Заливка на панели инструментов в разделе Стили таблиц .
Когда вы выполните все шаги, игровое поле будет выглядеть примерно так:
В каждую ячейку вставлена гиперссылка, которая ведет на соответствующий вопрос.
Разбираемся с макетами слайдов
У каждого слайда в PowerPoint есть свой макет. Например, Титульный слайд или Заголовок и объект .
Вы можете выбрать необходимый макет, кликнув правой кнопкой мыши на уменьшенное изображение слайда в левой части экрана.
Вы также можете редактировать и создавать новые макеты слайдов при помощи инструмента Образец cлайдов (Slide Master) .
Работа с макетами и использование режима Образец cлайдов очень важны при создании подобной викторины, ведь она состоит из большого числа похожих слайдов.
В основном у вас будут слайды двух типов:
- Слайд с вопросом. На нем будет размещен текст вопроса и кнопка Узнать ответ для проверки правильности ответа игрока.
- Слайд с правильным ответом. На нем будет содержаться ответ на вопрос и кнопка Домой , ведущая обратно на игровое поле.
Если вы внесете какие-либо изменения через Образец cлайдов , они будут автоматически применены ко всем слайдам этого типа в презентации.
Например, вы можете поменять цвет фона, положение текста или размер шрифтов, затем переключиться в обычный режим просмотра и увидеть, что все изменения были применены.
Этап 2: Создаем макеты слайдов для вопросов и ответов
Макеты, описанные ниже, уже включены в подготовленный нами шаблон для викторины.
Если вы хотите самостоятельно создать макеты, выполните следующие шаги:
- Перейдите на вкладку Вид и выберите Образец слайдов .
- Нажмите Вставить макет .
- Кликните по макету правой кнопкой мышки и нажмите «Переименовать» .
- Добавьте кнопку на слайд. Перейдите на вкладку Вставка , нажмите Фигуры и выберите Управляющие кнопки из выпадающего списка. Выберите настраиваемую управляющую кнопку и добавьте ее на слайд.
- В Настройке действия выберите Перейтина по гиперссылке: следующий слайд и нажмите ОК .
- Кликните правой кнопкой мышки по кнопке, нажмите Изменить текст и напишите слово «Ответ» (или «Узнать ответ» — как больше нравится).
- По аналогии со слайдом с вопросом создайте слайд с ответом. Правой кнопкой мышки кликните по левой панели с образцами слайдов и нажмите Вставить макет . Назовите новый макет «Правильный ответ» .
- Добавьте кнопку Домой и вставьте гиперссылку, которая будет вести на слайд с игровым полем. В нашем случае это Слайд 2.
- Выйдите из режима Образец слайдов , нажав кнопку Закрыть режим образца на верхней панели инструментов, или перейдите во вкладку Вид и выберите Обычный режим просмотра.
Этап 3: Добавляем слайды и расставляем ссылки на игровом поле
Итак, у нас уже есть титульный слайд и слайд с игровым полем. Кроме того, мы сделали макеты слайдов для вопросов и ответов.
- Создайте третий слайд. Кликните правой кнопкой мышки и выберите ранее созданный макет Вопрос .
- Создайте четвертый слайд. Кликните правой кнопкой мышки и выберите ранее созданный макет Правильный ответ . У вас должно получиться так:
- У вас получилась пара вопрос-ответ. Продублируйте слайды 3 и 4 столько раз, сколько активных клеток на игровом поле. В нашем примере поле состоит из 20 клеток. Итоговое количество слайдов вместе с первыми двумя будет равняться 42.
Примечание: Рекомендуем на слайдах с вопросами вместо самих вопросов сперва написать черновые обозначение (например, Категория 1, Вопрос на 200). Так вам будет проще расставить гиперссылки.
Соедините клетки игрового поля с соответствующими слайдами:
- Выделите цифры в клетке игрового поля, кликните правой кнопкой мышки и выберите Гиперссылка (или нажмите Ctrl+K ).
- В открывшемся окне в левой панели выберите Место в документе и укажите нужный слайд (например, Категория 1, Вопрос на 200 ).
- Нажмите ОК , чтобы вставить гиперссылку.
Ограничиваем навигацию
Перейдите во вкладку Переходы . Выберите все слайды за исключением первого и снимите галочку с пункта Смена слайда: по щелчку. Это обеспечит навигацию по гиперссылкам и кнопкам в вашей игре вместо перехода на следующий слайд по щелчку мышки.
Этап 4: Добавляем интерактивные вопросы
Вы можете добавить в викторину аудио, видео, а также PowerPoint анимации и эффекты переходов между слайдами. Вы можете использовать любые эффекты, какие вам нравятся, чтобы сделать игру более увлекательной.
Добавляем изображения к вопросам
Просто перетащите любую картинку в презентацию из папки на вашем компьютере. Лучше всего использовать изображения в формате PNG с прозрачным фоном.
Либо перейдите на вкладку Вставка , нажмите Рисунки (или Изображения из интернета ), чтобы добавить изображение, дополняющее вопрос (или призванное озадачить участников).
Вы можете добавлять разные эффекты, например, тень, отражение или подсветку. Выберите вкладку Формат и нажмите Формат рисунка . При желании можно добавить анимацию.
Правильный ответ: Он чувствует себя не в своей тарелке
Загружаем музыку и настраиваем автопроигрывание
Перетащите аудиофайл на слайд или нажмите Вставить → Аудио.
Кликните на иконку аудиофайла и перейдите во вкладку Воспроизведение . Установите Начало: автоматически .
Мы рекомендуем использовать аудиофайлы длиной 15 секунд или меньше. Кстати, Musopen.org — отличный сайт, где можно легально и бесплатно скачать музыку.
Правильный ответ: Соловей
Добавляем видеовопросы
Перетащите видео на слайд с вопросом или перейдите во вкладку Вставка и нажмите Видео .
По аналогии с аудиофайлом, перейдите во вкладку Воспроизведение и установите Начало: автоматически .
Субтитры помогут сделать этот вопрос более понятным для всех участников. Просто добавьте текстовое поле под видео и вставьте текст вопроса. В этом видеовопросе для текста мы использовали анимацию Появление с задержкой в 9 секунд. Таким образом, текст появляется после того, как игрок успеет понять смысл видео.
Правильный ответ: Итальянский
Другие улучшения
Вот несколько советов, как еще улучшить вашу игру:
- Добавьте эффекты перехода для слайдов с вопросами ( «Выцветание» или «Увеличение» ), используя режим Образец слайдов .
- Добавьте эффект «Перелистывание» на слайды с ответами, чтобы они выглядели так, будто вы переворачиваете карточку.
- Добавьте триггеры, чтобы скрыть клетки с отвеченными вопросами (вы увидите их в образце презентации, который прилагается к этой статье. В веб-презентации в формате HTML5 их не будет видно).
- Добавьте аудиотриггеры на слайды с вопросами. Например, звуки победы или поражения. Используйте эти звуки во время игры, чтобы было веселее.
- Добавьте второй тур викторины и финал и вставьте ссылки на них на слайд с игровым полем первого тура.
Протестируйте получившуюся игру
Убедитесь, что все ссылки и эффекты работают корректно. Запустите презентацию, нажав F5 (Показ слайдов → С начала), и просмотрите игру целиком. Проверьте каждую гиперссылку на игровом поле и удостоверьтесь, что они ведут на правильные вопросы.
Выложите игру в интернет
С помощью iSpring Converter Pro вы можете опубликовать свою викторину в интернет всего за один клик в виде веб-файла, как в этой статье.
А если вы хотите поделиться игрой через ссылку или вставить код в ваш блог или веб-сайт (как в этой статье), очень удобно использовать облачный сервис iSpring Cloud. Ваша викторина будет доступна для просмотра на любых устройствах, даже если у получателей нет PowerPoint.
Не забудьте проверить ее работоспособность после публикации.
Сыграйте в свою игру
А теперь самое интересное! После того как вы создали игру и разместили ее в интернете, пришло время пригласить друзей и сыграть! Вам понадобится два или более игроков, лист бумаги и карандаш для записи счета.
Запустите игру и станьте ее ведущим. В оригинальной телевизионной версии этой игры конкурсанты жмут на большую кнопку, чтобы ответить. Поскольку мы не находимся в студии, конкурсанты могут просто хлопать в ладоши.
Правила игры просты:
- Первый игрок выбирает категорию и сложность вопроса. Например, Президенты США, 300 .
- Ведущий кликает на выбранную клетку игрового поля и зачитывает вопрос вслух. Например: «Медвежонок Тедди был изобретен после того, как этот американский президент отказался на охоте застрелить медведя, привязанного к дереву» .
- После того как ведущий прочитает вопрос, любой из участников может хлопнуть в ладоши, чтобы ответить. Например, предположить, что это был Теодор Рузвельт .
- Если ответ верный, игрок получает количество очков, полагающееся за этот вопрос, и может выбрать следующий.
- Если ответ неверный, игрок получает штрафные очки, при этом другой игрок может попытаться ответить на вопрос.
- После того как все вопросы на игровом поле будут отвечены, начинается подсчет очков. Игрок с наибольшим количеством очков побеждает.
Посмотрите, какая игра получилась у нас:
Чтобы узнать больше об официальных правилах игры, прочитайте официальную страничку оригинальной игры Jeopardy! на Википедии, а также страничку о «Своей Игре».
В «Свою игру» можно играть где угодно: хоть в садике, хоть в офисе. Цель викторины — не только проверить знания и скорость реакции, но и разрядить обстановку и сблизить участников.
Если у вас возникли трудности с составлением вопросов, посмотрите записи прошедших телевизионных игр.
Скачайте готовый шаблон
Скачайте готовый шаблон викторины «Своя игра» от iSpring.
Если вам нужна помощь с созданием викторины в PowerPoint — дайте знать специалистам поддержки iSpring.
Быстрый конструктор курсов и тестов Поможет создать интерактивные курсы и тесты в рекордно короткие сроки. Без дизайнера и программиста.