Игра "Жизнь" в одном запросе

27.09.11

Разработка - Запросы

В статье приводится запрос, одного которого достаточно, чтобы реализовать всю механику игры "Жизнь" (http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) на бесконечном поле. Запрос основан на технике искусственных таблиц, применяемой также в примерах из http://infostart.ru/public/90367/. Приведен отчет-игра "Эволюция", реализующий игровой процесс на основе рассматриваемого запроса. Отчет не привязан к метаданным и должен работать в любой конфигурации.

Скачать исходный код

Наименование Файл Версия Размер
Внешний отчет - игра "Эволюция"
.erf 25,88Kb
74
.erf 25,88Kb 74 Скачать

 

В отличие от известных реализаций "Эволюции" на 1С, здесь считается, что поле игры не ограничено. Живые клетки представлены записями в таблице "Популяция", хранящими их координаты - целые числа. Используется искусственная таблица "Дельта", содержащая три числа: -1, 0 и 1 как шаги по вертикали или горизонтали. Выборкой из трех независимых таблиц: двух таблиц "Дельта" и таблицы "Популяция" получаем для каждой живой клетки девять записей. Восемь из них являются координатами соседних клеток и берутся с весом 1, а девятая - самой живой клеткой, которая берется с весом 9. После группировки по координатам отбираются только клетки, суммарный вес которых равен 3, 11 или 12. Используется правило игры: клетка образуется на пустом месте, если у нее три соседа (0 + 3), либо остается на своем месте, если у нее два (9 + 2) или три соседа(9 + 3).

Весь запрос умещается на восьми строчках:

Запрос

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

Для вывода поля игры используется окно, размеры и сдвиг которого настраиваются. В этом окне состояние клетки можно менять двойным кликом мышки. При этом клетка, выходящая за пределы активного окна, переходит как бы в другой слой этого же окна, двигается в нем, но отображается узором. Доступны кнопки сохранения и восстановления "популяции", очистки "популяции". Для эволюции есть режим ручного шага, автоматического шага с интервалом 1 сек, максимальный режим с прорисовкой промежуточных состояний и без. Выход из максимального режима - только через Ctrl+Break.

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

1) искусственные таблицы упрощают решение задач на языке запросов, расширяют его возможности;

2) упаковывая сложные действия в один запрос, можно повысить скорость вычислений за счет того, что в 1С быстрее делается то, что описывается одной инструкцией;

3) гибкость языка запросов достаточно высока, что позволяет решать на нем задачи, далеко выходящие за привычные рамки.

 

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

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

10000 руб.

02.09.2020    125081    683    389    

732

Пропорциональное распределение в запросе с использованием АвтоНомерЗаписи()

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

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    2267    andrey_sag    10    

28

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    6017    KawaNoNeko    23    

25

Набор-объект для СКД по тексту или запросу

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

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2155    2    Yashazz    0    

31

Запрос 1С copilot

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

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6652    31    mkalimulin    27    

52

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

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

14.12.2023    1889    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

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

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

06.12.2023    5631    user1923546    26    

46

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16611    skovpin_sa    14    

101
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. cool.vlad4 2 25.09.11 08:32 Сейчас в теме
а проводились ли замеры производительности - обычного решения задачи и запроса? у методов подобных порождающему запросу есть один очень серьезный недостаток - жрут память не подетски, на простых задачах. (вычисление квадратного корня у меня вообще вызвало зависание) . А так познавательно.
2. ildarovich 7861 25.09.11 08:52 Сейчас в теме
(1) Скачав и запустив игру, введя в нее одну из бесконечно-растущих популяций, Вы сможете оценить потребности в памяти сами. Я не смог дождаться, когда потребуется более 100 мегабайт памяти. "Обычные" методы вообще на бесконечном поле не работают. Кроме того, "порождающий запрос" здесь и вовсе не используется и не нужен: необходимая искусственная таблица очень мала.
3. oberonm 9 26.09.11 09:01 Сейчас в теме
Весьма познавательно
4. v.l. 434 27.09.11 09:56 Сейчас в теме
Интересное решение. А можете написать статейку, как оное чудо можно реализовать?

Готовая обработка - это хорошо.
А вот мне интересно, как этот запрос обернуть в ГУЙ - будет познавательно.
Интересно ведь самому сделать, пусть и по картинкам, но самому.

P.S. Как вариант - я могу написать такую статью со всеми копирайтами и т.д. А потом выложить в своем или Вашем блоге.
5. ildarovich 7861 27.09.11 12:53 Сейчас в теме
(4) В коде обработки 251 строка (спасибо платформе!), включая пустые, причем запрос из 8 строк конструктором развернут на 40. Там всего две содержательных процедуры. Первая стирает и раскрашивает клетки (16 строк), вторая отрабатывает двойной клик (14 строк). Как-то не вижу предмета описания. Кажется, что кто хочет - тот посмотрит код (он открыт), а кто хочет - напишет свой.
6. пользователь 27.09.11 23:08
Сообщение было скрыто модератором.
...
7. v.l. 434 29.09.11 13:19 Сейчас в теме
(6) Поглядите в моих публикациях - есть под 7.7 сборничек
Добавлено: и дома есть коллекция игрушек на 8-ке
8. KlimPopov 30.09.11 14:39 Сейчас в теме
Очень здорово, причем можно использовать не только как игру, но и для релакс-минутки. Например, при входы и выходе из базы. Либо же, когда мозги кипят у бухгалтера - немного отвлечься. Очень интересно, уже даже появилась идея написать нечто подобное, спасибо!
9. bazcom 23 20.10.11 09:40 Сейчас в теме
10. iksanova 19.12.11 07:13 Сейчас в теме
Интересно, чего только не напишешь на 8-ке.
11. iksanova 19.12.11 07:14 Сейчас в теме
Хорошая игрушка,
надо воспользоваться!
12. NOVOPRO 11.12.14 08:09 Сейчас в теме
Прикольно, надо попробовать...
13. fixin 4253 11.10.17 11:49 Сейчас в теме
интересное решение, плюсую.
Оставьте свое сообщение