Drupal, как игровая платформа (часть 1)

На одном из докладов я говорил, что делать просто сайты мне не интересно. Мне интересно создавать проекты, которые выходят за рамки сайта, предоставляющего информацию о компании «Абырвалг» + инернет-магазин с носками. Мне интересно делать проекты, в которых идёт активное взаимодействие с пользователем. И таким образом мне в голову пришла идея сделать игру. Говорю сразу, что я (пока) не профессиональный гейм-разработчик и поэтому могу ошибаться. Я лишь делюсь своим опытом.

Начало


Исходя из особенностей Drupal, игра должна быть браузерной. И не просто скрипт или флеш, встроенный в ноду, а полноценная игра, которая именно построена на Drupal. C самого начала делать что-либо сложное мне не особо хотелось, было интересно реализовать саму идею. Я выбирал между экономической стратегией и файтингом. Выбор всё-таки пал на последнее, потому, как мне показалось, что это несколько попроще.

Начинаем строить


Итак, нам понадобятся:
  • Игрок
  • Вещи
  • Рынок
  • Реализация поединка


Игрок


Персонажа, управляемого человеком, я сделал при помощи модуля Profile2. Тут, как раз всё достаточно просто. Накидал пачку полей с характеристиками. Группировать поля лучше всего при помощи Field group, а поля, значение которых нужно получать программно при помощи Computed fields. Часть полей нам понадобится закрыть от редактирования (например деньги, здоровье и прочее). Сделать это нам поможет Field permissions. Процесс «экипировки» реализуется при помощи Entity reference и views. Хотя сайт без views ещё поискать надо.

Вещи


С игроком разобрались. Давайте разбираться с экипировкой. Тут, как ни странно, тоже нет ничего особо сложного. Обращаемся к моей статье про товары с атрибутами и делаем классы товаров «Оружие», «Броня», «Амулеты» и прочее. И да, нам таки понадобится Ubercart.

Рынок


Упомянутый выше Ubercart нам понадобится и для реализации рынка вещей. Процесс присвоения конкретному игроку конкретной вещи из базы я реализовал при помощи модуля Flag и Rules. Делаем флаг (не глобальный!) «my» и при покупке вещи вешаем на эту ноду
флаг «my» от имени покупателя. Через это же реализуется «экипировка» игрока. Инвентарь отображаем также при помощи Views. Просто выводим все ноды с флагом «my» и группировкой по «классу» вещей.

Реализация поединка


Тут самое интересное. Реализуя это я, на самом деле, впервые близко познакомился с именно программированием в Drupal. Нам понадобится включить PHP Filter в модулях. Основной моей идеей при продумывании игры была фишка, что нападать на человека можно было только тогда, когда он был к этому готов. Поэтому в «анкете» я сделал поле
«готовность к поединку» и при помощи Views выводил всех игроков готовых к драке. Далее делаем флаг «напасть на игрока» и на присвоение этого флага навешиваем правило, которое считает:

  • Урон оружия
  • Эффективность брони
  • Количество здоровья
  • Поправки на урон и здоровье от амулетов


Итог


В итоге — игра на Drupal вполне себе возможна. Критика в комментариях приветствуется. Особенно буду признателен за критику от разработчиков игр.
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 21

    0
    Возникает единственный вопрос: а зачем?
    Давайте тогда на ассемблере делать сайты!
      +2
      А почему нет? Я про игру на Drupal, а не про сайты на ассемблере. Drupal это оформившийся Content Management Framework. Если инструментарий позволяет это реализовать, то я не вижу причин этого не делать. Ну и плюс интересно же попробовать!
      +8
      В воздухе запахло теми самыми грибами.
        0
        А ссылка на саму игру есть?
          0
          Пока нет. Впоследствии, разумеется, выложу.
            0
            И где?
              0
              Пока есть более другие задачи.
          0
          А как быстродействие? Высокие нагрузки, скорость работы? Да и затачивание модулей для этого не предназначенных.
            –1
            Пока оно всё на локале особо нагрузки не чувствуется. В дальнейшем, конечно, всё ляжет на rules и прорабатывание правил при нападении. Тут только оптимизацией кода, как я думаю.
            +4
            Интеграция с 1с планируется?
              0
              Зачем, простите?
              Но, если она Вам так важна, то масса примеров интеграции.
                +2
                Зачем? До кучи, чтобы скучно не было:)
                  0
                  Проблемы надо решать по мере поступления.
              +2
              Добавьте хаб «Ненормальное программирование» :)
              +1
              Насколько я понял, сама игра — это сильно урезанный старый-добрый "Бойцовский клуб". Таким образом Вы реализуете примитивный игровой процесс на технологии для этого не предназначенной? В чем смысл? Получить навык? Но на очередном клоне «Бойцовского клуба» игроделом Вы не станете, да и использование CMS не по назначению тоже не особо ведет к её пониманию(так мне кажется), только хаков напилите.
              С игроделом и web-программированием(но ни с Drupal'ом и PHP) я знаком не понаслышке. Я слабо представляю как вы будете осуществлять взаимодействие между игроками в реальном времени
              на основе CMS, проще и эффективнее(и полезнее для личностного роста) писать все руками, благо различные авторизации, профили пользователя и тд. пишутся довольно быстро. Зато в логике игры Вы будете отталкиваться только от потребностей игрового процесса, а не от возможности или невозможности прикрутить что-то к CMS.

              Исходя из особенностей Drupal, игра должна быть браузерной. И не просто скрипт или флеш, встроенный в ноду

              Вы наверное что-то пропустили — флеш или скрипт это не обязательно клиентские однопользовательские «бродилки-стрелялки-задротки», но еще и полноценные многопользовательские игры. А флеш или js используется для реализации игровой сцены. На стандартных HTMLных кнопочках, списках и чекбоксах много не наделаешь.

              Если Вам хочется «активного взаимодействия с пользователем» да еще и в игровом виде посмотрите на игровые JS фреймворки, потом беритесь за какой-нибудь серверный язык, изучайте COMET или сокеты, стройте realtime общение с браузером. В качестве примера могу посоветовать связку CraftyJS + Node.js + Socket.io, но это только один из множества вариантов.
                0
                Благодарю за мнение. Но мне пока по фану покопаться именно в таком разрезе. Заодно и немного прокачать программирование в Drupal.

                  0
                  Ну «по фану» это святое! «по фану» и на brainfuck'е интернет-магазины писать можно;-)
                  0
                  проще и эффективнее(и полезнее для личностного роста) писать все руками, благо различные авторизации, профили пользователя и тд. пишутся довольно быстро.

                  Я б всё же порекомендовал для этого полноценные фреймворки, если есть вероятность, что игра будет не джаст фор фан, а публичным продуктом.

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

                  А фреймворки позволят сосредоточиться только на них, не отвлекаясь на рутину.
                  +2
                  А корованы можно будет грабить?
                    +1


                    Автор, вы правда странный :)

                    Only users with full accounts can post comments. Log in, please.