Правила игры
Поле для игры - прямоугольник. Играют два игрока фишками двух цветов. Количество фишек игрока равно ширине поля, каждая фишка игрока занимает свою вертикаль. Игровой процесс состоит из двух этапов: расстановка фишек и собственно игра. Во время расстановки, игрок размещает свои фишки на своей половине поля, не видя фишек противника. После расстановки начинается игра: каждый игрок по очереди двигает любую свою фишку вперед на произвольное количество клеток, пока не упрется в фишку противника (перепрыгивать нельзя). У кого не останется ходов, тот проиграл.
Играть в эту игру можно и IRL на шахматной или подобной ей доске, на бумаге в клетку, на песке/снегу etc.
О реализации игры
В качестве поля для игры используется табличный документ. Размеры поля настраиваются. С целью упрощения реализации, фишки представляют собой не картинки, а символы шрифта Wingdings. В случае его отсутствия в системе, в настройках можно выбрать символ любого другого подходящего шрифта. При всей простоте правил, игра достаточно сложна. В процессе игры ведется история ходов, в любой момент можно отменить ход(ы) и вернуться к предыдущему состоянию - это неоценимый помощник при игре с компьютером. Для игры с компьютером имеется три уровня сложности. Реализация AI в игре основана на методах оценки позиции, в противовес методам перебора вглубь дерева возможных ходов. Выиграть на уровне "просто" не представляет проблемы, а на уровне "эксперт" выиграть очень сложно. Интересно, кто-нибудь из сообщества найдет способ выиграть у эксперта, не заглядывая в код? Шансов сделать это немного...
Основные настройки игры:
Игра "по сети"
Применяется следующий подход: каждое изменение ситуации в процессе игры записывается отдельной записью в какое-нибудь общедоступное хранилище. Каждый экземпляр игры периодически самостоятельно опрашивает состояние хранилища, читает его записи. Что для 1С может быть таким хранилищем? Сразу в голову приходит как минимум два варианта: некий объект метаданных в базе, например регистр сведений, и общедоступный каталог с файлами. Оба варианта реализованы в игре. Каждый имеет свои плюсы и минусы. Регистр предполагает изменение конфигурации, все игроки должны работать с одной ИБ, но зато не требуется дополнительных прав и отсутствуют ограничения в распределенной среде со многими серверами. Использование файлов требует наличия общедоступного каталога с полными правами для всех рабочих серверов, но не меняет конфигурацию и позволяет играть, работая в разных ИБ. Предполагается, что одного регистра (каталога) достаточно для работы игр разного вида.
Реализация механизма оформлена в виде "мини-библиотеки" в модуле объекта, библиотека может быть использована в других играх. Функции программного интерфейса библиотеки не зависят от используемого варианта, работа с файлами или регистром скрыта уровнем ниже. Библиотека может быть расширена для других вариантов хранения записей - например, FTP.
Настройки сетевой игры:
Рассмотрим подробнее вариант с регистром. Для этого в конфигурации должен быть независимый непериодический регистр сведений такого вида:
Имя регистра значения не имеет.
Поля регистра:
- Тип - Строка(32) - Название класса игры, в нашем случае "Только вперед!"
- Имя - Строка(50) - Уникальное имя текущей игры, в нашем случае - GUID
- Номер - Число(4,0) - Уникальный номер записи, инкрементное поле
- Статус - Строка(20) - Тип записи, описывающий статус игры, например "Подключение", "Окончание" и т.п.
- Данные - ХранилищеЗначения - Структура с произвольными данными
- НомерУчастника - Число(2,0) - Номер игрока (начиная с 1)
- Дата - Дата и время - Дата записи
К статье приложена конфигурация с регистром.
Типовая схема процесса:
- Игрок создает сетевую игру. В регистр записывается запись со статусом "Начало", в данных содержится требуемое количество игроков, имя инициатора, данные о игровом поле. Поскольку сам создатель тоже будет играть, создается запись со статусом "Подключение", в данных - имя игрока
- Другие игроки подключаются к созданной игре, при этом создаются записи со статусом "Подключение", в данных - имя игрока. Процесс продолжается пока количество записей со статусом "Подключение" не станет равным необходимому количеству игроков.
- Далее каждый игрок по очереди занимается первоначальной подготовкой - расставляет фишки, по завершению создается запись "Подготовка", в данных - расположение фишек. Остальные игроки читают эту запись и загружают себе расположение его фишек.
- Затем каждый игрок по очереди делает ход, создается запись "Ход", в данных - информация о ходе. Остальные игроки читают и загружают себе эту информацию, отображают ход противника на своем поле.
- Если после завершения хода игра оканчивается выигрышем, то выигравший игрок записывает запись "Окончание".
Для варианта с каталогом процесс аналогичен, вместо записей регистра используются файлы.
Игра тестировалась в тонком клиенте 8.3.22.1709, под ОС Windows 7.
Как всегда, приветствуются замечания / дополнения / комментарии.