Разработка и Конфигурация · 11 мин
Как сделать игру на 1С:Предприятие своими руками
Как создать простую игру на платформе 1С:Предприятие: выбор механики, работа с формами и таймером, пример кода на встроенном языке, типичные ошибки новичков.
Создание игры на платформе 1С:Предприятие — не типовая задача, но вполне выполнимая. Платформа не предназначена для графики и анимации, однако её встроенного языка, управляемых форм и механизмов обработки событий достаточно для пошаговых и логических игр: крестики-нолики, змейка, тетрис, викторины, «Морской бой». Такие проекты часто используют как учебные упражнения для освоения языка 1С и как необычный способ показать возможности платформы.
Реалистично оценивайте ограничения. В 1С нет игрового движка, спрайтов и настоящей частоты кадров. Всё, чем вы располагаете — это формы с элементами управления, табличные поля, картинки из библиотеки, обработчики ожидания и программный код. Поэтому лучше всего работают игры, где состояние можно отобразить таблицей, сеткой кнопок или полем HTML-документа.
Ниже разобран практический путь: от выбора механики до готового прототипа с примером кода. Материал ориентирован на разработчика, который уже умеет создавать внешнюю обработку и писать простые процедуры на встроенном языке.
Выберите механику, которую потянет платформа
Первый шаг — честно оценить, какой жанр реализуем средствами 1С. Платформа хорошо справляется с играми, где игровое поле — это дискретная сетка, а действия игрока сводятся к нажатию на ячейку или клавишу. Классические примеры: крестики-нолики, сапёр, морской бой, змейка, тетрис, «2048», судоку, викторины и текстовые квесты.
Не подходят жанры, требующие плавной анимации, физики, большого числа одновременно движущихся объектов или 3D. Аркады с реакцией «в реальном времени» тоже рискованны: обработчик ожидания в 1С имеет минимальный интервал около одной секунды для клиентских вызовов без сервера, и это накладывает жёсткое ограничение на скорость игрового цикла.
Сравнение вариантов реализации
Подходит для крестиков-ноликов и сапёра. Просто программировать, но форма с сотнями кнопок открывается медленно.
Универсальный вариант для змейки и 2048: ячейки раскрашиваются условным оформлением, клики обрабатываются событием Выбор.
Даёт настоящую графику и JavaScript внутри 1С, но требует знания веб-технологий и усложняет отладку.
Для первого проекта берите крестики-нолики или викторину: они помещаются в 150–300 строк кода и позволяют отработать весь цикл — инициализацию поля, обработку хода, проверку победы, рестарт.
Создайте внешнюю обработку и форму
Игра оформляется как внешняя обработка (файл .epf) — так её легко запускать в любой базе через «Файл → Открыть» без изменения конфигурации. В конфигураторе создайте новую внешнюю обработку, добавьте основную форму типа «Управляемая форма» и перейдите к построению интерфейса.
Для игрового поля добавьте реквизит формы. Два рабочих варианта: таблица значений с колонками под клетки поля (например, 10 колонок для поля 10×10) или набор реквизитов-элементов, созданных программно при открытии. Для змейки и подобных игр удобнее таблица значений: каждая строка — ряд поля, каждая колонка — клетка, а цвет задаётся условным оформлением по значению ячейки.
- 1Создайте внешнюю обработку и управляемую форму
- 2Добавьте реквизит формы — таблицу значений для игрового поля
- 3Выведите таблицу на форму, уберите командную панель и заголовки колонок
- 4Настройте условное оформление: цвет ячейки по её значению
- 5Напишите процедуру инициализации поля и вызовите её ПриСозданииНаСервере
- 6Добавьте обработчик события Выбор табличного поля для хода игрока
- 7Запустите обработку в режиме предприятия и проверьте отрисовку
Обратите внимание на разделение клиентского и серверного контекста. В управляемых формах код с директивой &НаСервере не имеет доступа к элементам формы напряму, а код &НаКлиенте не может выполнять запросы. Для игры это обычно не проблема: вся логика умещается в клиентском модуле формы, если вы не храните рекорды в базе данных.
Реализуйте игровую логику на встроенном языке
Логика игры — это набор процедур: инициализация, обработка хода, проверка условий победы и поражения, подсчёт очков. Храните состояние игры в реквизитах формы: текущее поле, счёт, флаг окончания партии. Не размазывайте состояние по элементам формы — элементы только отображают данные, а источником истины должны быть реквизиты.
Пример простейшего фрагмента для крестиков-ноликов — проверка победной комбинации по строкам поля 3×3, хранящегося в массиве:
&НаКлиенте
Функция ПроверитьПобеду(Символ)
Для Н = 0 По 2 Цикл
Если Поле[Н][0] = Символ И Поле[Н][1] = Символ И Поле[Н][2] = Символ Тогда
Возврат Истина;
КонецЕсли;
Если Поле[0][Н] = Символ И Поле[1][Н] = Символ И Поле[2][Н] = Символ Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Если Поле[0][0] = Символ И Поле[1][1] = Символ И Поле[2][2] = Символ Тогда
Возврат Истина;
КонецЕсли;
Если Поле[0][2] = Символ И Поле[1][1] = Символ И Поле[2][0] = Символ Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
Для хода компьютера в простых играх достаточно генератора случайных чисел: выберите случайную свободную клетку. В крестиках-ноликах можно добавить примитивный интеллект — сначала проверить, может ли компьютер выиграть одним ходом, затем заблокировать выигрышный ход игрока, и только потом ходить случайно.
Организуйте игровой цикл и движение
Пошаговые игры обходятся событиями: игрок кликнул — сработал обработчик — поле обновилось. Играм с движением (змейка, тетрис) нужен игровой цикл. В 1С его реализуют через ПодключитьОбработчикОжидания — механизм, который вызывает указанную процедуру с заданным интервалом.
&НаКлиенте
Процедура НачатьИгру(Команда)
ИнициализироватьПоле();
ПодключитьОбработчикОжидания("ШагИгры", 0.5);
КонецПроцедуры
&НаКлиенте
Процедура ШагИгры()
СдвинутьЗмейку();
Если Столкновение() Тогда
ОтключитьОбработчикОжидания("ШагИгры");
ПоказатьПредупреждение(, "Игра окончена! Счёт: " + Счет);
Возврат;
КонецЕсли;
ОбновитьОтображение();
КонецПроцедуры
Интервал меньше примерно 0,1–0,5 секунды на практике работает нестабильно и грузит клиентский сеанс, поэтому быстрые аркады делайте с осторожностью. Управление змейкой удобно повесить на обработку нажатий клавиш через свойство формы или на кнопки-стрелки, если клавиатурные события ведут себя непредсказуемо в вашей версии платформы.
Оформите визуальную часть
Самый доступный способ «графики» в 1С — условное оформление табличного поля. Задайте правила: значение ячейки 1 — зелёный фон (тело змейки), 2 — красный (еда), 0 — белый (пусто). Этого достаточно, чтобы поле выглядело как игра, а не как отчёт.
Дополнительно используйте картинки из библиотеки картинок платформы для кнопок и индикаторов, настройте шрифты и размеры ячеек, уберите лишние элементы формы. Для табло счёта подойдёт декорация с крупным шрифтом. Если нужен звук, его можно воспроизвести через поле HTML-документа или внешние средства, но это уже усложнение, которое для первого проекта не обязательно.
Продвинутый путь — вся игра внутри поля HTML-документа на JavaScript, а 1С используется как оболочка и хранилище рекордов. Это снимает ограничения на графику и скорость, но требует знания HTML/JS и аккуратной работы с обменом данными между веб-страницей и кодом 1С.
Протестируйте и проверьте результат
Тестирование игры на 1С мало отличается от тестирования любой обработки, но добавляются специфические сценарии: рестарт посреди партии, быстрые повторные клики, закрытие формы во время работы обработчика ожидания. Пройдите эти случаи вручную — именно там всплывает большинство ошибок.
Как проверить результат
Поле отрисовано, игра начинается с чистого состояния
Пустая форма, ошибки компиляции модуля
Поле и счёт полностью сброшены, обработчик ожидания не дублируется
Ходы ускоряются или старые фигуры остаются на поле
Обрабатывается только допустимый ход, лишние клики игнорируются
Двойные ходы, ошибки индексации массива
Форма закрывается без ошибок
Ошибки обращения к уже закрытой форме от фонового обработчика
Полезно прогнать обработку на тонком и веб-клиенте, если планируете показывать игру коллегам: поведение обработчиков ожидания и отрисовка условного оформления могут отличаться между клиентами. Проверяйте на той версии платформы, которая реально используется в вашей инфраструктуре.
Игровой проект — удобный способ выучить управляемые формы: за один прототип змейки вы на практике освоите реквизиты формы, таблицы значений, условное оформление, обработчики ожидания и директивы компиляции. Именно поэтому такие задания часто дают начинающим разработчикам 1С.
Часто задаваемые вопросы
Можно ли сделать на 1С игру с настоящей графикой и анимацией?
Напрямую средствами форм — нет, платформа не даёт игрового движка. Обходной путь — поле HTML-документа, внутри которого работает игра на JavaScript, а 1С выступает оболочкой. Для учебных целей обычно достаточно условного оформления табличного поля.
Нужно ли изменять конфигурацию, чтобы запустить игру?
Нет. Оформите игру как внешнюю обработку (.epf) и откройте её через меню «Файл → Открыть». Конфигурация базы при этом не меняется, что безопасно для рабочих систем.
Как сохранить рекорды игроков?
Простейший вариант — хранилище общих настроек (ХранилищеОбщихНастроек) для сохранения лучшего счёта локально. Если нужна общая таблица рекордов для всех пользователей, потребуется добавить в конфигурацию регистр сведений и записывать результаты серверной процедурой.
Почему обработчик ожидания срабатывает с задержкой?
Механизм ПодключитьОбработчикОжидания не гарантирует точный интервал: фактическая частота зависит от загруженности клиентского сеанса и типа клиента. Проектируйте игру так, чтобы неточность таймера не ломала логику, — например, храните абсолютное время последнего шага.
Какую игру выбрать для первого проекта?
Крестики-нолики или простую викторину: они требуют минимума кода, не нуждаются в игровом цикле и позволяют отработать полный путь — поле, ходы, проверка победы, рестарт. Змейку и тетрис берите вторым этапом, когда освоите обработчики ожидания.
Может ли игра на 1С навредить рабочей базе?
Сама по себе внешняя обработка без записи в базу безопасна. Риск появляется, если игровой цикл делает частые серверные вызовы — это создаёт нагрузку на сервер. Держите всю логику на клиенте и не запускайте игру в многопользовательской рабочей базе без необходимости.
Что важно запомнить
Игра на 1С — это внешняя обработка с управляемой формой: поле из таблицы значений с условным оформлением, логика на встроенном языке, движение через ПодключитьОбработчикОжидания. Выбирайте пошаговые жанры, храните состояние в реквизитах формы, держите цикл на клиенте и обязательно тестируйте рестарт и закрытие формы.