Как мы перенесли игру «Герои меча и магии III» на 1С

10.10.24

Задачи пользователя - Игры

Я Федор, ведущий разработчик 1С. На хакатоне компании команда под моим руководством перенесла игру «Герои меча и магии III» на платформу 1С. Расскажу, как устроена конфигурация «1С: Герои меча и магии» с технической точки зрения.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
Игра 1С:Герои меча и магии.dt
.dt 60,83Mb
149
149 Скачать бесплатно

Когда мы решили переносить героев на 1С, план был только ориентировочный:
 

1. В «Героях III» есть общая карта, она 2D, состоит из клеток. Поэтому берем поле табличного документа, красим фон в зеленый, желтый, синий и другие цвета — это ландшафт: трава, песок, вода и все остальное. В ячейки выводим картинки с помощью свойства «Картинка» — это объекты на карте: замки, герои, сундуки, монстры. Потом при возникновении каких-либо событий убираем или добавляем картинки в нужные ячейки. 

2. В «Героях III» есть поле боя, оно 2D, cостоит из клеток. Поэтому берем поле табличного документа и далее по тексту из пункта 1.
3. В «Героях III» есть интерфейс замков, он 2D… Короче, вы поняли :).

Вот с этими вводными мы приступили к созданию нашего проекта. 

Содержание

  1. Справочники-шаблоны.
  2. Справочник «Игры».
  3. Расчет маршрутов.
  4. Анимация передвижения.
  5. Форма города.
  6. Обмен существами.
  7. Поле боя.

Справочники-шаблоны


Первое, что мы добавили в нашу базу — это справочники для хранения информации. Например, количество ХП у скелета, сколько стоят бараки, сколько в день приносит капитолий. Поэтому у нас появились справочники-шаблоны:

  • шаблоны существ;
  • здания в городе;
  • здания на карте;
  • города;
  • герои.

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

 

Примеры справочников

 

Справочник «Игры»

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

 

Справочник «Игры»

Во всех табличных частях присутствует служебный реквизит «КлючСвязи» (тип: уникальный идентификатор) для того чтобы связывать информацию из различных таблиц.

Для примера, в данном сеансе игры по ключу 7b74e203-d17f-40c7-8683-e71646c6b13b мы понимаем из таблицы «Координаты объектов на карте», что этот объект — замок, и вход в него находится по координатам R9C7.


Координаты объекта «Город»

Из таблицы «Города» мы можем понять, что этот город называется «Гоствинд», фракция Некрополис и принадлежит красному игроку


Таблица «Город»

Из таблицы «Гарнизоны городов» мы узнаем, что в городе 23 скелета и 10 мертвецов.

Таблица «Гарнизоны городов»

А из таблицы «Здания в городах» узнаем, что построена пока только «Сельская управа».



Таблица «Здания в городах»

Хранение всей информации организовано, теперь нужно ее визуализировать. Для отображения у нас используется форма элемента справочника «Игры». 

Форма элемента справочника «Игры»

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

Изначальный вариант 

Поэтому у нас было два варианта: разрезать картинку на несколько частей и выводить в ячейку только часть картинки или все-таки использовать картинки табличного документа. Мы выбрали второй вариант.  Для связи с данными в название каждой картинки поместили «ключ связи» этого объекта. Стало выглядеть гораздо лучше.


Поле после изменений

 

Расчет маршрутов

Теперь у нас есть карта, на которой расположены картинки, изображающие замки, здания, существ, ресурсы. Дальше мы добавили возможность героям перемещаться по этой карте. И тут мы столкнулись со вторым подводным камнем: нужно каким-то образом прокладывать маршруты в обход препятствий.

Изобретать велосипед не стали, использовали общепринятый метод «Поиск в ширину с ранним выходом». Подробно этот метод расписывать не буду, т.к. это тема для отдельной статьи. Кому интересно, можете почитать тут. Эту статью я использовал как источник информации.

Анимация передвижения

После того как мы научились строить маршруты, мы должны были научить героев ходить по ним. Не хотелось, чтобы герой сразу «телепортировался» в конец маршрута, хотелось чтобы он действительно шагал по маршруту. Для анимации мы использовали процедуру обработки передвижения на один шаг с обработчиком ожидания в конце, который через 0.1 секунду вызывал эту же процедуру только для следующего шага.
 

ПодключитьОбработчикОжидания("ШагПоМаршруту", 0.1, Истина) ;

Вот так это выглядит в самой игре.


Анимация передвижения

 

Форма города

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

Вот так выглядит город в оригинальных «Героях».


Город в оригинальных «Героях III»


Верхнюю половину экрана занимает интерактивное изображение города. Нам хотелось максимально соответствовать оригиналу, поэтому было решено перенести эту особенность в нашу версию на 1С.

Изначально был вариант пойти по проверенному пути — использовать поле табличного документа, так мы и сделали. Вывели в фон табличного документа фон города, в картинки ячеек табличного документа выводили здания, выглядело это приемлемо, но появился неприятный баг. При прокрутке колесиком мыши, фон оставался на месте, а все здания за счет прокрутки табличного документа улетали в небеса. :) Вот так это выглядело:

Баг

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

Форма

На форму выведены 42 декорации, 6 рядов по 7 декораций, в каждую выводится соответствующий кусок фона или кусок с прифотошопленным зданием, если таковое построено в городе.

В итоговом варианте выглядит так.


Финальный вид после изменений

У декораций обрабатываются события нажатия и, в зависимости от того, на какое здание нажали, открывается либо форма строительства, либо форма найма существ, либо форма найма героев.

Форма строительства


Форма найма героев


Форма найма существ

Метод с 42 декорацией сработал, но у него была своя цена. Программно в декорацию-картинку можно выводить только картинки из библиотеки картинок. Поэтому пришлось все 42 картинки фона + картинку фона с каждым прифотошопленнным зданием добавлять в  библиотеку, а таких комплектов нужно 8 для каждой фракции. В итоге библиотека картинок выглядит подобным образом.


Библиотека картинок

 

Обмен существами


Как вы знаете, в «Героях» можно нанять существ в замке и закинуть их в армию героя или обменяться существами с другим героем. В нашей игре такой обмен тоже есть.

 

Обмен в игре

 

Работает через 1С-ный механизм «перетаскивания» картинок. На форме расположены 7 картинок-слотов для города и 7 для героя. В начале события перетаскивания вызывается процедура, которая запоминает откуда мы взяли существ. При окончании перетаскивания вызывается процедура, которая в зависимости от содержания ячейки, либо перемещает туда существ с объединением, либо меняет существ местами.


Процедура

Тут используется еще и проверка перетаскивания, но там:

&НаКлиенте
Процедура СуществоПроверкаПеретаскивания (Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
КонецПроцедуры

Без этого работать не будет.

Поле боя

Ну и последнее, что было сделано, сами битвы.
 

Поле боя


Поля боя — это общая форма, которая открывается, когда на общей карте герой нападает на существ или другого героя. На общей форме расположено поле табличного документа, по которому перемещаются картинки, маршруты и анимация. Рассчитываются, как и на общей карте.

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

Вот такие вот «Герои III» на 1C!

См. также

Игры Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Классическая игра Морской бой, с необычным дизайном. Из особенностей: Поле игрока формируется автоматически, но есть возможность корректировать расстановку фигур. Пример игры в приложенном видео.

29.07.2024    1033    65    user1693438    3    

7

Игры Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Простейшие крестики-нолики с маленьким полем.

24.07.2024    942    67    user2015123    0    

6

Игры Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Бесплатно (free)

Классическая игра пасьянс Паук, на платформе 1С.

15.04.2024    1752    97    user1693438    3    

18

Игры Пользователь Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Бесплатно (free)

Игра "Змейка" в классическом варианте на управляемых формах в 1С. Собирайте яблоки и ставьте рекорд!

09.02.2024    4522    266    emilyabochkova    15    

29

Игры Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Создавайте новые ключворды или разгадывайте существующие.

1 стартмани

05.02.2024    2152    1    alexpvs    0    

7

Игры Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Игра "5 Букв", сделанная на 1С. В игре загадано слово, существительное в единственном числе. Нужно отгадать загаданное слово.

1 стартмани

29.12.2023    2110    4    APTEM_SLV    9    

7

Игры Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Цель - обучение хитростям нашей всеми любимой 1С.

28.11.2023    1293    51    user1834118    0    

6

Игры Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

Держись, российский геймдев, я уже еду. Бета тест, можно оформлять предзаказы, будет донатный магазин с модельками российского автопрома (по цене реальных авто).

01.11.2023    2464    49    user1834118    7    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3087 10.10.24 18:25 Сейчас в теме
Чем бы дитя ни тешилось - лишь бы не вешалось )))
zhuravlev_as; user1780784; user2109745; life-wayfarer; user1093303; vladislav25_00; ivprovotorov; awk; +8 Ответить
2. maksa2005 550 10.10.24 18:51 Сейчас в теме
Большая работа сделана
zhuravlev_as; echo77; user629249_666_fallen_666; +3 Ответить
30. awk 744 11.10.24 15:20 Сейчас в теме
(3) А что сложного? Получаем дескриптор окна и вперед DirectX в помощь.
34. maksa2005 550 11.10.24 18:17 Сейчас в теме
(30) вопрос целесобразности....
55. echo77 1906 19.10.24 19:02 Сейчас в теме
(2) Согласен, была проделана большая работа! (именно так в оригинале)
3. vladimir-89 26 10.10.24 18:56 Сейчас в теме
Огонь!)
Осталось DOOM 3 на 1С запустить)
user1492823; user2109745; vladislav25_00; user1093303; kas1989; serjik777; ivprovotorov; Artem-B; pr_woland; maksa2005; so-lf; ivanov660; Totoro; oveksKnaaz; alsegor; EvgeniyOlxovskiy; tigory; gigabyte_artur; kser87; +19 Ответить
20. kauksi 217 11.10.24 09:37 Сейчас в теме
4. kaiman_fedor_yandex 61 10.10.24 21:56 Сейчас в теме
Фёдор ,
через Ё пишется !!!
33. Antoska 17 11.10.24 17:55 Сейчас в теме
(4) А Федор, через Е ;)
Светлый ум; Malfarion; user629249_666_fallen_666; maksa2005; +4 1 Ответить
5. rpgshnik 3795 10.10.24 22:22 Сейчас в теме
Я трогал это чудо, это круто! Что тут можно сказать эпичный плюс жмякнул!
Shomak; user629249_666_fallen_666; PROSTO-1C; +3 Ответить
41. Alxby 1113 13.10.24 14:32 Сейчас в теме
6. RustIG 1747 10.10.24 22:28 Сейчас в теме
Хакатон сколько часов длился? Сколько человек одновременно программировало? У вас были заготовки до начала хакатона? Первое место у вас в итоге?
18. bogatyrev_fedor 11.10.24 09:21 Сейчас в теме
(6) хакатон длился два дня по 8 часов. Команда из 5 человек. Но на хакатоне был разработан только прототип, на финальную версию ушло 1,5 месяца. Заготовки были в том плане, что мы нашли сайт где можно спрайты из героев скачать и была продумана структура конфигурации. В итоге первое место)
eaa; Tangram; Windsor77; user629249_666_fallen_666; user1224908; Therni; vano-ekt; Global__IT; RustIG; +9 Ответить
23. RustIG 1747 11.10.24 11:01 Сейчас в теме
(18) Первое место - поздравляю! Молодцы!
Отличная реклама Инфостарт - так как алгоритм поиска в ширину уже предоставлен на Инфостарт. :)
39. user2109361 12.10.24 18:02 Сейчас в теме
(18) а какую ценность этот хакатон-проект имеет для бизнеса?
7OH; user932300; +2 1 Ответить
44. megatrend 131 15.10.24 17:41 Сейчас в теме
(39) представители бизнеса могут дать бой айтишникам в этой игре. Ну или огрести от них.
Altez50; user2109745; Dentaky; CratosX; Moonshine; user629249_666_fallen_666; HystriX; +7 Ответить
47. 7OH 70 16.10.24 14:34 Сейчас в теме
(39) не против и такого формата.
Но поддерживаю - лучше бы что-то для конфигуратора или на крайний случай для ЕДТ было.
53. Altez50 1 17.10.24 19:44 Сейчас в теме
(47) У жены проект на intelliJ, копилот подсказывает? а счастья в глазах нет.. (распечатывая на обоях кусок кода для работы с набором записей регистра сведений).

Мой хакатон сегодня показал: чтобы кал по сантехнической трубе плыл, не застревая, нужен уклон <=2см/метр.

Всё тлен, пока родные живы, пинги есть и рейды не сыпятся.
Рад буду всех поздравить с началом 2025г.
8. zebr 32 10.10.24 22:46 Сейчас в теме
Есть ли в планах портирование сетевой версии Duke Nukem 3d?
9. zebr 32 10.10.24 22:47 Сейчас в теме
Интересно, а Omatic сработает для 1C, чтобы прокачать героев?
10. mistervoron 11 10.10.24 23:21 Сейчас в теме
Очень достойная работа! Очень интересно было почитать!))
11. CheBurator 2712 11.10.24 01:28 Сейчас в теме
Лучше бы на хакахахахтонах типовые конфиги дорабатывали... Или рефакторинг существующих делали (ну хотя бы какого-то блока)...
Altez50; modestry; ivprovotorov; aximo; EvgeniyOlxovskiy; +5 3 Ответить
12. CheBurator 2712 11.10.24 01:29 Сейчас в теме
Но так, конечно, занятно.
Осталось подумать где в типовых можно применить наработанные решения на таком хакатоне...
EvgeniyOlxovskiy; +1 Ответить
24. RustIG 1747 11.10.24 11:27 Сейчас в теме
(12) (12)
Осталось подумать где в типовых можно применить наработанные решения на таком хакатоне...


- Ты еще не силен, пройди вот этот квест!
проходит квест ...
- Ты еще не силен, пройди вот этот квест!
проходит квест....
....
Проходит 10-15-20 лет... каждый год, квартал, месяц, неделю, день - проходит очередной квест....
Очередная встреча с мудрецом:
- Нет, ты до сих пор, еще не силен! У 1С появилась новая платформа, новая конфигурация, новый бизнес анализа данных...Пройдите сразу три квеста....

ПС. Навеяло как-то....
13. Sardukar 58 11.10.24 05:38 Сейчас в теме
Красавцы, интересно и задорно! Вот она какая - нескучная 1С!
14. chg 11.10.24 05:54 Сейчас в теме
когда зарелизите?))))
sergiz; webresurs; +2 Ответить
15. tanya_charm 11.10.24 06:42 Сейчас в теме
Неприлично круто, мультиплей есть?!
19. bogatyrev_fedor 11.10.24 09:23 Сейчас в теме
(15) только в режиме hotseat, по сети возможно будет в следующих версиях)
user629249_666_fallen_666; +1 Ответить
16. aximo 2100 11.10.24 06:46 Сейчас в теме
Весьма интересная идея. Поделитесь кодом.
17. aximo 2100 11.10.24 07:43 Сейчас в теме
когда я был еще слишком молод - хотел перенести свой "прошлый" опыт разработки в сферу 1с - рождались вот такие поделки https://infostart.ru/1c/reports/74481/
21. PASAHAKA 81 11.10.24 10:15 Сейчас в теме
22. starik-2005 3087 11.10.24 10:41 Сейчас в теме
Одмены отпесались, сказале, што жутко тормозид. Может них пентиум первый - яхз...
27. androidT1C 76 11.10.24 13:55 Сейчас в теме
Ошибка при перемещении армии на саму себя (сижу в городе) - количество в армии обнуляется :)
user629249_666_fallen_666; +1 Ответить
29. webvasya 11.10.24 14:35 Сейчас в теме
А сколько такая конфа весит?
31. bogatyrev_fedor 11.10.24 16:36 Сейчас в теме
(29) около 50 мб)
user629249_666_fallen_666; +1 Ответить
32. user2109291 11.10.24 17:31 Сейчас в теме
Ну все теперь понесуться герои. Запусти герои микробе, на астероиде, на экспресс тесте.
35. Global__IT 309 11.10.24 22:22 Сейчас в теме
36. Gilev.Vyacheslav 1917 11.10.24 23:41 Сейчас в теме
налицо проблемы в компании с Федором
37. bogatyrev_fedor 12.10.24 06:24 Сейчас в теме
(36) а можно поподробнее, в чем заключается проблема со мной?
QuiteOldOrange; user629249_666_fallen_666; HystriX; +3 Ответить
42. Gilev.Vyacheslav 1917 13.10.24 17:59 Сейчас в теме
(37) проблема с компанией
твоему руководству могу объяснить
57. Hans 3 21.10.24 13:19 Сейчас в теме
(37) В рабочее время пилили это впятером?
43. AntonProgma 48 14.10.24 13:32 Сейчас в теме
"ЛабАратория" - проверочное слово "Лаба"?
46. user712130_sn 16.10.24 11:10 Сейчас в теме
А нет админских прав, чтоб можно было опубликовать базу?)
48. SnubbyAston 53 17.10.24 00:04 Сейчас в теме
Огонь!
Теперь публикуем и даём разработчикам 1С писать ботов. Стравливаем ботов в битвы на разных картах... =) проводим регулярные турниры =) разбиваем команды разработчиков на Лиги: Сеньоры, Мидлы, Джуны... И получаем простое определение уровня разработчика 1с вопросом: "Ты в какой Лиге?" =)
49. modestry 22 17.10.24 10:19 Сейчас в теме
50. user2110072 17.10.24 10:49 Сейчас в теме
А можете дать пароль на админские права?
51. mondordom 17.10.24 11:11 Сейчас в теме
(50) Если вы не можете самостоятельно сбросить там пароль, значит вам туда не надо ))
fakegrek; +1 Ответить
52. podoro9nik 17.10.24 12:47 Сейчас в теме
Можете мне тоже дать пароль на права админа базы? А то загрузил dt-шку в базу, которая расположена на сервере, а не локально, и не могу назад вернуть, так как при нажатии куда либо пишет "Недостаточно прав доступа", а я не могу зайти на сервер напрямую.
54. Altez50 1 17.10.24 19:46 Сейчас в теме
(47) У жены проект на intelliJ, копилот ходы подсказывает, а счастья в глазах нет.. (распечатывая на обоях кусок кода для работы с набором записей регистра сведений).

Мой хакатон сегодня показал: чтобы кал по сантехнической трубе плыл, не застревая, нужен уклон <=2см/метр.

Всё тлен, пока родные живы, пинги есть и рейды не сыпятся.
Рад буду всех поздравить с началом 2025г.
triton_ab; +1 Ответить
56. ig-efrem 22 21.10.24 12:48 Сейчас в теме
Мои аплодисменты, очень большая и интересная работа
58. G_102761032544270641311 29.10.24 15:08 Сейчас в теме
59. Kjeck 15.11.24 19:45 Сейчас в теме
Оставьте свое сообщение