К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как создать игру на 1С: практическое руководство

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

Платформа «1С:Предприятие» создавалась для учётных систем, но её встроенный язык, механизмы форм и поле табличного документа позволяют реализовать вполне работоспособную игру. Такие проекты делают ради обучения программированию на 1С, демонстрации навыков на собеседовании или просто как инженерное развлечение. Классические примеры — «Змейка», «Тетрис», «Сапёр», «Морской бой», квизы и простые пошаговые стратегии.

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

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

Выбор жанра: какие игры реально сделать на 1С

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

Зато отлично ложатся жанры, где важна логика, а не скорость отрисовки: головоломки («Сапёр», «Пятнашки», судоку), настольные игры (шашки, крестики-нолики, морской бой), пошаговые стратегии, текстовые квесты и викторины. «Змейка» и «Тетрис» возможны, потому что обработчик ожидания позволяет шагать игру с интервалом от долей секунды.

Жанры и их реализуемость в 1С

Головоломки и настольные игры

Идеальный вариант: ход по клику, нет требований к скорости, логика простая. Подходит для первого проекта.

Змейка / Тетрис

Реализуемы через обработчик ожидания и табличный документ. Ограничение — задержка реакции на клавиши, игра получается «неторопливой».

Квизы и текстовые квесты

Проще всего: вопросы хранятся в таблице значений или макете, ответы обрабатываются кнопками. Хороший выбор для обучения.

Динамические аркады и шутеры

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

Формат проекта: внешняя обработка или конфигурация

Для одиночной игры правильный выбор — внешняя обработка (файл .epf). Она не требует создания информационной базы, легко передаётся коллегам и открывается в любой типовой конфигурации через «Файл → Открыть». Вся игра умещается в одну форму с модулем.

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

Создаётся обработка в конфигураторе: «Файл → Новый → Внешняя обработка». Дальше добавляется основная форма — именно на ней будет жить вся игра.

Игровое поле: табличный документ как «экран»

Стандартный приём отрисовки — реквизит формы типа «ТабличныйДокумент», выведенный на форму. Каждая ячейка становится «пикселем» игрового поля: ей можно задать цвет фона, текст, границы и размер. Поле 10×20 для «Тетриса» — это просто область ячеек, которую код перекрашивает на каждом шаге.

Чтобы поле выглядело аккуратно, отключите сетку и заголовки, задайте фиксированную ширину столбцов и высоту строк. Клик по ячейке перехватывается событием «ПриАктивизацииОбласти» или обработчиком расшифровки — так реализуется ход в «Сапёре» или «Морском бое».

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

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

Игровая логика на встроенном языке

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

Динамика организуется через обработчик ожидания: процедура ПодключитьОбработчикОжидания("ШагИгры", 0.3) вызывает метод ШагИгры каждые 0,3 секунды. Внутри — сдвиг змейки, проверка столкновений, перерисовка. Минимальный практичный интервал — около 0,1 секунды; меньше ставить бессмысленно, платформа не успеет.

Управление с клавиатуры — самое слабое место. Штатных событий нажатия клавиш у поля табличного документа нет, поэтому направление обычно меняют кнопками на форме или полем ввода с обработчиком. Для пошаговых игр это не проблема, для «Змейки» — компромисс, к которому нужно привыкнуть.

1c
&НаКлиенте
Процедура НачатьИгру(Команда)
	Счет = 0;
	ИграОкончена = Ложь;
	Направление = "Вправо";
	ПодключитьОбработчикОжидания("ШагИгры", 0.3);
КонецПроцедуры

&НаКлиенте
Процедура ШагИгры()
	Если ИграОкончена Тогда
		ОтключитьОбработчикОжидания("ШагИгры");
		Возврат;
	КонецЕсли;
	СдвинутьЗмейку();
	ПроверитьСтолкновение();
	ПерерисоватьПоле();
КонецПроцедуры

Хранение данных: вопросы, уровни и рекорды

Простые данные удобно держать в макете обработки. Макет типа «Табличный документ» или «Текстовый документ» с вопросами квиза читается методом ПолучитьМакет() и разбирается в таблицу значений при старте. Это избавляет от необходимости поднимать базу данных.

Рекорды между сеансами сохраняют через ХранилищеОбщихНастроек — штатный механизм, привязанный к пользователю. Для одиночной игры этого достаточно: лучший счёт сохраняется при завершении и читается при открытии формы.

Если игра многопользовательская (общий рейтинг в компании), без конфигурации не обойтись: понадобится регистр сведений «РезультатыИгр» и запись в него на сервере. Здесь уже важны права доступа и транзакционность записи.

Порядок создания простой игры
  1. 1
    Создайте внешнюю обработку в конфигураторе и добавьте основную форму
  2. 2
    Добавьте реквизит «Поле» типа ТабличныйДокумент и выведите его на форму
  3. 3
    Нарисуйте стартовое состояние поля процедурой инициализации
  4. 4
    Реализуйте реакцию на действия игрока: клик по ячейке или кнопки
  5. 5
    Подключите обработчик ожидания для игрового цикла, если игра динамическая
  6. 6
    Добавьте подсчёт очков и условие завершения игры
  7. 7
    Протестируйте в тонком клиенте и сохраните рекорд через ХранилищеОбщихНастроек

Тестирование и типичные ошибки

Проверяйте игру именно в том клиенте, где её будут запускать: поведение форм в толстом и тонком клиенте различается, а в веб-клиенте часть возможностей недоступна. Обработчики ожидания и работа с табличным документом в тонком клиенте поддерживаются, но требуют директив компиляции &НаКлиенте и &НаСервере в правильных местах.

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

Типичные ошибки
01
Перерисовка всего табличного документа на каждом шаге — поле мигает, игра тормозит. Обновляйте только изменённые ячейки.
02
Слишком маленький интервал обработчика ожидания (меньше 0,1 с) — платформа не успевает, шаги «слипаются».
03
Код игровой логики в клиентском контексте с обращением к данным базы — ошибки компиляции в тонком клиенте. Выносите работу с данными в серверные процедуры.
04
Отсутствие отключения обработчика ожидания при завершении игры — вызовы продолжаются и приводят к ошибкам после закрытия формы.
05
Попытка сделать быструю аркаду — управление не успевает за игрой, результат неиграбелен. Выбирайте пошаговый жанр.

Проверка готового результата

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

Контрольные точки

Как проверить результат

Запуск игры
Норма

Обработка открывается, поле отрисовано, игра стартует одной кнопкой

Тревожный признак

Ошибки компиляции модуля, пустое поле, требуется ручная настройка

Игровой цикл
Норма

Шаги идут равномерно, реакция на действия игрока предсказуема

Тревожный признак

Рывки, двойные срабатывания, пропуск шагов

Завершение игры
Норма

Показывается итог, обработчик ожидания отключён, можно начать заново

Тревожный признак

После проигрыша игра «зависает» или продолжает шагать

Повторный запуск
Норма

Новая игра начинается с чистого поля и нулевого счёта

Тревожный признак

Остаются артефакты прошлой партии, счёт накапливается

Частые вопросы

Можно ли сделать игру на 1С без навыков программирования?

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

Запустится ли такая игра в веб-клиенте?

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

Можно ли добавить звуки и картинки?

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

Как организовать игру двух пользователей по сети?

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

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

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

Нарушает ли игра лицензию 1С?

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

Итог

Что важно запомнить

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