Что наша жизнь - игра! Особенности
           разработки
           сетевых игр

          Сергей Парамонов
         компания «Тортуга»
Зачем нам все это?
Зачем нам все это?
• Плюсы
  – Каждый писал игрушки в детстве
  – Рынок доступен каждому
  – Это интересно
  – Радость от результатов
• Минусы
  – Играть и разрабатывать — не одно и то же
  – Большой уровень вхождения
  – Играть в игры уже не хочется
Жизнь расставила приоритеты
Рынок игр в Америке
Рынок игр в Америке
Цифровой Клондайк
Сложность разработки

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


• Валидация параметров
• Запрос к базе данных
• Рендеринг данных
Обычная задача для game-handler
            melee attack

• Валидация параметров
• Расчет урона
• Отправка клиенту списка
  команд(нанесение урона, смерть юнита)
Обычная задача для game-handler
               melee attack
•   Валидация параметров
•   Расчет урона:
    – у атакующего юнита есть меч, который наносит двойной урон для
      скелетов
    – у атакованного есть броня +10% от двуручного оружия
    – на атакованного наложено заклинания “проклятье” – атакующий наносит
      половинный удар
    – битва проходит на святой земле, где с вероятностью 70% урон от
      “черных ” заклинаний сокращается на половину
    – у атакуемого юнита висит амулет, увеличивающий силу черной магии на
      25%
    – у атакуемого юнита есть аура: 20% урона с вероятностью 25%
      возвращается атакующему

•   Отправка клиенту списка команд (нанесение урона, смерть юнита)
Другие виды задач
• Общие
  – Селекция целей
  – Выбор оружия
  – Поиск пути
• Сетевые
  – Пинг и быстродействие
  – Оптимизация производительности сервера
  – Таинственные баги Flash или другой клиентской
    платформы
Пользователи ждут максимального
       разнообразия игры
Пример
Пример
Решения
•   Разделение поведения и отображения
•   Конфигураторы
•   Множественное наследование?
•   Интерфейсы и делегаты
•   Контейнерный подход
Конфигурирование
Интерфейсы
Компоненты
Примеры багов
• ООП костыли
  – Уплывший корабль
  – Фау 2 в Блицкриге
  – Патроны для собаки
• Большое количество if
  – Воздушный щит при осаде
• Непродуманные граничные условия
  – Лучники в Викингах
Поддержка
• Игровой пользователь – “тяжелый”
  пользователь
• Апдейты и кеширование
Решение
• Nosql – хранилища
• Очередь сохранения
Ошибки
•   Ошибки будут всегда
•   Правильное логирование
•   Устойчивость к нештатным ситуациям
•   Терминаторы и восстановление состояния
Gameplay
• Моделирование
• Гибкость настройки игровых параметров
• Гейм-дизайнеры должны иметь
  возможность менять максимальное
  количество параметров без участия
  программистов
Тестирование
• Сложность автоматического тестирования
• Привлечение community
• Логирование и анализ поведения
  пользователя
• Возможность динамически менять уровни
  логирования
Безопасность!
       • Клиенту доверять
         нельзя
       • Ради нового стула
         пользователи готовы
         10 часов "хакать" ваше
         приложение.
Безопасность
• Проверка на сервере
• Система арбитров
• Основные характеристики на клиенте
  должны быть защищены от artmoney
• Шифрования трафика
• Проверка подлинности
• Проверка “времени жизни” пакета
Все так плохо 
Вопросы!

            Сергей Парамонов
          Технический директор
              ООО «Тортуга»
          http://tortugasocial.ru/
   sergey.paramonov@tortugasocial.com

Сергей Парамонов — Что наша жизнь — игра!

  • 1.
    Что наша жизнь- игра! Особенности разработки сетевых игр Сергей Парамонов компания «Тортуга»
  • 2.
  • 3.
    Зачем нам всеэто? • Плюсы – Каждый писал игрушки в детстве – Рынок доступен каждому – Это интересно – Радость от результатов • Минусы – Играть и разрабатывать — не одно и то же – Большой уровень вхождения – Играть в игры уже не хочется
  • 4.
  • 5.
    Рынок игр вАмерике
  • 6.
    Рынок игр вАмерике
  • 7.
  • 8.
    Сложность разработки • Сложнаябизнес-логика, и это не миф. • Нетривиальность в реализации ОО-иерархий. • Разнообразие против универсальности.
  • 9.
    Обычная задача http-контроллера •Валидация параметров • Запрос к базе данных • Рендеринг данных
  • 10.
    Обычная задача дляgame-handler melee attack • Валидация параметров • Расчет урона • Отправка клиенту списка команд(нанесение урона, смерть юнита)
  • 11.
    Обычная задача дляgame-handler melee attack • Валидация параметров • Расчет урона: – у атакующего юнита есть меч, который наносит двойной урон для скелетов – у атакованного есть броня +10% от двуручного оружия – на атакованного наложено заклинания “проклятье” – атакующий наносит половинный удар – битва проходит на святой земле, где с вероятностью 70% урон от “черных ” заклинаний сокращается на половину – у атакуемого юнита висит амулет, увеличивающий силу черной магии на 25% – у атакуемого юнита есть аура: 20% урона с вероятностью 25% возвращается атакующему • Отправка клиенту списка команд (нанесение урона, смерть юнита)
  • 12.
    Другие виды задач •Общие – Селекция целей – Выбор оружия – Поиск пути • Сетевые – Пинг и быстродействие – Оптимизация производительности сервера – Таинственные баги Flash или другой клиентской платформы
  • 13.
  • 14.
  • 15.
  • 16.
    Решения • Разделение поведения и отображения • Конфигураторы • Множественное наследование? • Интерфейсы и делегаты • Контейнерный подход
  • 17.
  • 18.
  • 19.
  • 20.
    Примеры багов • ООПкостыли – Уплывший корабль – Фау 2 в Блицкриге – Патроны для собаки • Большое количество if – Воздушный щит при осаде • Непродуманные граничные условия – Лучники в Викингах
  • 21.
    Поддержка • Игровой пользователь– “тяжелый” пользователь • Апдейты и кеширование
  • 22.
    Решение • Nosql –хранилища • Очередь сохранения
  • 23.
    Ошибки • Ошибки будут всегда • Правильное логирование • Устойчивость к нештатным ситуациям • Терминаторы и восстановление состояния
  • 24.
    Gameplay • Моделирование • Гибкостьнастройки игровых параметров • Гейм-дизайнеры должны иметь возможность менять максимальное количество параметров без участия программистов
  • 25.
    Тестирование • Сложность автоматическоготестирования • Привлечение community • Логирование и анализ поведения пользователя • Возможность динамически менять уровни логирования
  • 26.
    Безопасность! • Клиенту доверять нельзя • Ради нового стула пользователи готовы 10 часов "хакать" ваше приложение.
  • 27.
    Безопасность • Проверка насервере • Система арбитров • Основные характеристики на клиенте должны быть защищены от artmoney • Шифрования трафика • Проверка подлинности • Проверка “времени жизни” пакета
  • 28.
  • 29.
    Вопросы! Сергей Парамонов Технический директор ООО «Тортуга» http://tortugasocial.ru/ sergey.paramonov@tortugasocial.com