Игра "Подземелье" (HTML5 canvas + javascript). Управляемые + Обычные формы






Простейшая игра на HTML5 + canvas + javascript. Управляемые + Обычные формы. Запуск во всех конфигурациях, во всех видах интерфейсов (Упр. формы Такси, упр. формы во вкладках, обычные формы). В 1С используется встроенный объект ПолеHTMLДокумента.
УПРАВЛЕНИЕ ПЕРСОНАЖЕМ с клавиатуры (клавиши движения WASD). Персонаж двигается, собирает ключи, открывает двери.

Цель данной публикации

Продемонстрировать возможность интеграции HTML5 движков работы с графикой внутри 1с. Для демонстрации выбрана готовая игра на HTML5.
В прошлом я давно озадачивался проблемой отсутствия любых возможностей выводить графику в 1с.
Я нашел решение в виде технологии HTML5 canvas. Эта технология позволяет выводить 2d и псево-3d графику, анимацию, фильмы и много чего еще.
Для применения необходимы глубокие знания javascript.

УПРАВЛЕНИЕ ПЕРСОНАЖЕМ

с клавиатуры (клавиши движения WASD). Персонаж двигается, собирает ключи, открывает двери.

 

Содержимое файла архива:

— Файл в виде архива содержит в себе файл обработки, запускаемой в 1с а также файл index.html, который можно запустить в браузере (Front-end версия игры, без интеграции с 1с).
— В папке images содержатся изображения, используемые движком игры. Их можно заменить на свои, для улучшения внешнего вида.
— В папке js содержатся скрипты на javascript. Я редактирую их с помощью IDE PhpStorm и brackets.

 

Работоспособность в различных конфигурациях и версиях платформы:

— Работоспособность обработки проверена в следующих конфигурациях (устанавливал типовые демо-версии конфигураций, запускал из под пользователей с правами на интерактивный запуск внешних обработок): 1с УТ 10.3, УТ 11 (интерфейс такси и интерфейс во вкладках),УНФ, БП 3, ЗУП 3, 1с CRM (режим совместимости интерфейса с 1с 8.2, режим совместимости с платформой 8.2).
— В режиме Такси в ряде случаев, на медленных ноутбуках наблюдаются проблемы с запуском обработки. Обработка запускается, но окно игры не обновляется, пока не изменить размер окна 1с. Пока не знаю как побороть данную проблему. Есть подозрения, но их нужно тщательно проверять.
— Обработка запускается в конфигурациях на платформе не ниже 8.2 (ниже не проверял, возможно не работоспособность некоторых функций). Обычные формы, Управляемые формы, управляемый интерфейс Такси, управляемый интерфейс во вкладках.

 

Особенности реализации

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

 

Особенности интеграции 1с с кодом Javascript

— Передача команд управления коду javascript, получение расширенной информации из кода javascript (возможно создать сколь угодно сложный обмен данными с кодом javascript), получение информации о наступивших событиях из кода javascript, получение информации о состоянии встроенных объектов.
— Запуск процедур и функций встроенных в код javascript объектов прямо из кода 1с
— Отображение событий из встроенного кода javascript в виде сообщений 1с. 
Это всего лишь демонстрация, нужно развивать идею дальше.
Хорошо то, что на основе этого работающего прототипа можно реализовать сложное интегрированное с графическим движком на javascript, приложение в 1с.
— Процедуры и функции интеграции с 1с вынесены в отдельный js скрипт. Таким образом, можно запускать на исполнение файл index.html с отображением движка в браузере. Можно отдельно редактировать весь javascript проект, после чего запускать в 1с, без изменения интерфейса взаимодействия.
— Вывод сообщений об ошибках в коде javascript отключен при старте игры. Это сделано в целях играбельности. Пока не смог понять причины появления сообщений об ошибках в скриптах при вполне работоспособном коде.

 

PostScriptum

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

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

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

 

Хочу сказать в свою защиту то, что считаю главным достижением:

1. Я смог интегрировать HTML5 javascript приложение в исполняемую среду 1с.
В этом мне во многом помогли публикации на Инфостарт, огромное спасибо всем коллегам!
Прошу извинения, если я не упомянул вас в тексте, прошу тех, кого обидел, написать о себе в комментариях, вставлю ссылки на ваши публикации!
2. Изучал javascript программирование на примере создания браузерных игр. Это просто, быстро и легко.
3. Степень интеграции с 1с доведена до обмена данными в реальном времени.
К сожалению, есть с чем работать. На примере старых слабомощных компьютеров понял, что обмен данными медленный и код приходится ускорять.
Обмен данными необходимо развивать до создания параллельных процессов в памяти, которые по отдельности от процесса исполняемого приложения будут этим заниматься.
4. Интегрирован тайловый движок. Можно развить движок до вывода анимации, различных эффектов (параллакс эффект, псевдо-3d, и др.)
На основе данного движка можно создавать графические приложения для реальных конфигураций 1с, с обменом данными с кодом 1с, запуском команд, анимации и др.

Благодарности

1. Огромная благодарность автору публикации "HTML5 в ПолеHTMLДокумента на Управляемой форме — fireEvent в действии" //infostart.ru/public/347442/
Его публикация помогла мне воплотить задуманное!

2. Игра сделана по мотивам занятий по книге Криса Делеона "Как программировать игры на javascript" (на английском языке). Книгу можно скачать и прочитать (см. ссылки ниже). У автора книги есть отличные видеокурсы на сайте udemy.com (которые можно также найти и скачать на сайтах torrent, не буду говорить каких, запрещено в России).
Ниже есть ссылки для скачивания готового проекта игры для запуска в браузере (размещены энтузиастами на сайте GitHub).

Ссылки

— https://github.com/Majig/JS-WarriorLegend Front-End проект игры по материалам книги Криса Делеона. 
— http://mail.daleberan.com/gamedesign/Hands-On%20Intro%20to%20Game%20Programming-v5%20(1).pdf — книга от Криса Делеона, можно скачать и прочитать
— http://how-to-program-games.com/ официальный сайт автора книги (Крис Делеон) где можно все прочитать и найти ссылки на официальные курсы.
— http://chrisdeleon.com/ еще один сайт автора книги (Крис Делеон)

21 Comments

  1. FesenkoA

    Если это демонстрация движка тогда назовите это не Игра а Демонстрация движка.

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

    Конецесли 🙂

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

    Reply
  2. Steelvan

    Все это, конечно, здорово.

    Только вы упретесь в масштабирование лицензионной политикой 1С.

    Да и в среде 1С-ников это мало найдет практического применения из-за необходимости знать js.

    Как на этом зарабатывать и какие задачи купцов это решает. Вот вопросы, от которых зависит, насколько это будет востребовано 🙂

    Reply
  3. pvlunegov

    Добрый день!

    1. Вы все правильно сказали, необходимо знать javascript.

    2. На играх в 1с не заработать. Это факт. Если не так, поправьте меня.

    3. в среде 1С-ников это мало найдет практического применения.

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

    Нужно брать себя в руки, ставить цели, постигать новые профессии, знания и применять их в среде 1с.

    Я это сделал и вам того желаю.

    Данная разработка просто пример применения js в 1с напрямую.

    К сожалению, я не нашел толковых публикаций на данную тему.

    Хотелось написать свою игру и разместить ее в 1с.

    Задачу я эту себе поставил 2 года назад.

    С тех пор перелопатид кучу курсов, освоил 2 профессии (php программист, javascript программист). Переезжать на новые профессии не хочу.

    Нашел применение новым навыкам и знаниям в старой среде и даже новую работу.

    Но детские мечты поиграть в игры в среде 1с не оставил.

    Хоть мечты и детские, но от них я не отступаюсь спустя года.

    1с научила настойчивости и достижения целей не смотря ни на что.

    Планирую применять технологию интеграции js движков в 1с в реальных конфигурациях.

    Вообще, читайте мои слова в публикации — эта игра лишь пример применения технологии интеграции в 1с (ну и способ поиграть)

    Reply
  4. pvlunegov

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

    Пример — интеграция в js графики в мобильном приложении.

    В эту сторону пока не копал.

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

    Насчет технологиии — независимость от версии платформы, вида конфигурации (Любые формы), запуск пока лишь на компьютерах на Windows.

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

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

    В случае запуска на веб сервере могут быть проблемы — необходимо упаковывать файлы Front-end проекта в архив и скачивать его при запуске обработки на стороне клиента с распаковкой во временную папку. Этот вариант возможен, я его продумывал.

    Reply
  5. saa@kuzov.org

    В веб-клиенте работает? В каком браузере проверяли?

    Reply
  6. pvlunegov

    В веб клиенте не проверял.

    Причина — если проверять в веб-клиенте то это имеет смысл для клиент-сервено ориентированных приложений.

    У меня приложение чисто клиентское. Практически весь код исполняется на стороне клиента.

    Встроенный браузер на стороне клиента принимает весь код js, код 1с получает и передает данные js коду.

    Поэтому говорить о отладке в веб клиенте нет смысла.

    Кроме того, если уж вам так хочется запуска в веб-клиенте, встает вопрос:

    — Как передать через узкий канал связи огромные файлы картинок и js кода?

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

    Как это дело передавать клиенту через веб-канал?

    Тут встает вопрос о размещении файлов Front-end проекта на веб-сервере с передачей ссылки на него клиенту.

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

    Все это дела я планирую на будущее, сейчас это пока рано.

    Reply
  7. pvlunegov

    (1) НЕ согласен. Это игра. простая. в виде одного уровня. Я так и написал в заглавии.

    А ниже написал — это демонстрация.

    Посмотрите внимательно в заглавии описаны клавишы управления.

    Игра простая, в нее не наиграться.

    Позже добавлю фишки —

    — больше уровней,

    — более плавное управление. Сейчас при задевании стены персонаж останавливается, это неправильно.

    — добавлю ловушки, монстров с простейшим интеллектом, систему здоровья игрока

    — добавлю простое оружие — меч, стрелы, арбалет

    — добавлю магическое оружие массового поражения

    — больше монстров с более разнообразным интеллектом, оружием ближнего боя и слабой магией

    — Интегрирую систему РПГ в 1с с просчетом уровней персонажа, набором опыта, получением лычек, новых способностей

    Планы грандиозные, найти бы время на все это.

    Самое главное — поддержка сообщества.

    Без поддержки делать такой большой проект тяжело.

    Reply
  8. pvlunegov

    (1) Есть планы на ОТДАЛЕННОЕ будущее — сделать отдельную базу для игры.

    Цель — создание веб-сервера с подключением игроков.

    Перспектива — ММО игра нескольких игроков в одной игре.

    Например, совместное прохождение уровней.

    Прошу вас объяснить мне, непутевому, как сделать публикацию обновляемой — я это желаю сделать но не знаю как.

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

    Вообще я хотел сделать публикацию бесплатной, но не знаю как. Подскажите?

    Reply
  9. Sapiens_bru

    Спустя десять итераций разработки вдруг окажется, что если клиентскую

    1с заменить на electron — игру можно запустить вообще везде, а работать она будет на порядок быстрее.

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

    Затем и вебсервисы 1с уйдут в историю в пользу на два прядка более быстрого самописного сервиса на пыхе+энжинкс.

    Потом всё это плавно переедет на RPGmaker…

    А где-то по ту сторону моря сидит профи разработчик на unity3d и source и пишет на них программу для бух.учета

    PS Как тренировка новых навыков пойдет, как реальный проект в новой области — нет.

    Reply
  10. pvlunegov

    На Unity3d умею программировать, делал игры и 3 мерные и двух мерные.

    2х мерные игры на Unity 3d получаются громоздкие и большие по объему.

    Пробовал приспособить Godot Engine или Cocos с получением экспортных приложений на HTML5. Получается громоздкие, частично не работающие монстрообразные приложения.

    Если нужно написать простое графическое 2мерное приложение, то Unity3d не вариант.

    Гораздо проще взять например Phaser и написать приложение на HTML5.

    Думаю использовать именно Phaser для быстрого конструирования нужного приложения.

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

    Такое приложение после месячного курса освоит любой программист 1с и сможет поддержвать.

    Я ратую за подход к интеграции 1с с графическими приложениями. Именно этого нет в 1с именно это востребовано на рынке.

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

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

    Переносить его в 1с нет смысла, абсолютно разная архитектура.

    Reply
  11. pvlunegov

    (9) Как тренировка новых навыков пойдет, как реальный проект в новой области — нет. — не согласен.

    Несколько лет назад все говорили что зачем нужно в 1с мобильное приложение?

    Дескать применений не найти, ненужная чушь, 1с на телефоне — это нонсенс.

    Я знаю частную фирму, которая ворочает миллионами благодаря мобильному приложению 1с. Потому что открываются возможности, которые УМНЫЕ люди используют в тех областях, которые другие, СИДЯЩИЕ В БОЛОТЕ, не могут вообразить.

    Аналогичная ситуация с графикой в 1с.

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

    А сейчас появилась. Появятся умные люди которые применят подход.

    Reply
  12. Steelvan

    хе-хе, только хотел Phaser рекомендовать 🙂

    Ну или аналоги:

    http://craftyjs.com/

    http://www.html5quintus.com/

    https://www.ambiera.com/copperlicht/index.html (3D библиотека)

    http://jawsjs.com/

    https://github.com/giancarlo/j5g3

    http://gamejs.org/

    http://bfattori.github.io/TheRenderEngine/

    Reply
  13. Sapiens_bru

    (11)

    Несколько лет назад все говорили что зачем нужно в 1с мобильное приложение?

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

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

    Reply
  14. dsdred
    Данная разработка просто пример применения js в 1с напрямую.

    К сожалению, я не нашел толковых публикаций на данную тему.

    Хотелось написать свою игру и разместить ее в 1с.

    Задачу я эту себе поставил 2 года назад.

    С тех пор перелопатид кучу курсов, освоил 2 профессии (php программист, javascript программист). Переезжать на новые профессии не хочу.

    Нашел применение новым навыкам и знаниям в старой среде и даже новую работу.

    Но детские мечты поиграть в игры в среде 1с не оставил.

    Хоть мечты и детские, но от них я не отступаюсь спустя года.

    1с научила настойчивости и достижения целей не смотря ни на что.

    Плюсанул за саморазвитие и достижение цели, так держать земляк!

    Reply
  15. PerlAmutor

    1С давно уже пора отходить от интеграции с Internet Explorer и внедрять браузерный движок типа chromium’а. Расширить язык 1С до технологии WebAssembly, разрешить использовать шейдеры (в том числе и на сервере).

    Reply
  16. pvlunegov

    (14) спасибо!

    Reply
  17. a_titeev

    «И тут Остапа понесло»!

    Reply
  18. Wildsou1

    Обалдеть игра на 1с 🙂 что же будет дальше с этим проектом .

    Reply
  19. Неопределено

    (18) Она на HTML5 и javascript. Игр на чистом 1С тут давно хватает.

    Reply
  20. silberRus

    ох, я бы помог тебе

    но времени тоже совсем мало (

    Reply
  21. pvlunegov

    На данный момент занимаюсь интеграцией Javascript движка Phaser в 1с.

    Создаю программный интерфейс для движка.

    Суть в том, что прикладной программист 1с, не зная синтаксиса Javascript, владея начальными познаниями в ООП, сможет писать код на языке 1с. Код будет при нажатии на исполнение портироваться в код javascript и исполнятся во встроенном браузере с помощью библиотеки Phaser. Данная библиотека абсолютно бесплатна, с кучей примеров.

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

    На данный момент моя разработка находится в стадии тестирования.

    Портирую отдельные функции движка и тут же получаю видимый результат.

    Планирую переносить по отдельному функционалу/блокам.

    Вскоре могу выложить пре-альфа версию для ознакомления с портированным движком.

    Скорость разработки существенно снижена, так как работаю по вечерам/ночам.

    Все кто заинтересовался, пишите отвечу на вопросы.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *