Социальный комфорт (игрушка)
- Войдите на сайт для отправки комментариев
Мужики, хочу рассказать про игрушку. Сделано не на Ардуино, а в Web. Хотя, можно и на Ардуино сделать, если приличного размера цветную светодиодную матрицу взять. Но, раздел-то для флуда ... вот, решил рассказать. Уж больно она мне нравится. Кто автор игрушки – не знаю. Мне о ней рассказал Алекс Дьюдни (тот самый, который придумал «Core War»).
Итак, представьте себе человечков, живущих в замкнутой комнате на поле из прямоугольных клеток. Каждый человечек как-то относится к остальным. Отношение человечка А к человечку Б выражается фразой: «Я хочу всегда быть на расстоянии Х от Б». Соответственно и человечек Б тоже хочет быть на каком-то расстоянии Y от человечка А. Разумеется, эти расстояния (X и Y) не обязаны совпадать. Допускается, что какой-то человечек никак не относится к какому-то другому и ему пофиг на каком расстоянии от того находиться.
Изначально все человечки расставляются в комнате, каждый в свою клеточку. А дальше бесконечно повторяется такой цикл:
- каждый человечек вычисляет расстояния от себя до всех остальных. Находит разности между реальными и желаемыми расстояниями (модули разностей, конечно) и суммирует все эти разности. Получившуюся величину будем называть коэффициентом дискомфорта;
- коэффициент дискомфорта вычисляется для «клетки стояния» и всех восьми соседних клеток
- затем из девяти просчитанных клеток (в которой стоит и восьми соседних) выбирается клетка с наименьшим дискомфортом и принимается решение перейти в неё (или остаться на месте, если минимальный дискомфорт у «клетки стояния»);
- все человечки делают это независимо друг от друга на основе текущего положения (не зная куда перейдут другие человечки при следующем шаге);
- после этого все переходят в выбранные клетки. Если два человечка претендуют на одну клетку – оба остаются на месте. Если есть клетки с одинаковым дискомфортом можно выбрать любой способ поведения, но однозначный – никаких случайностей! У меня, например, выбирается по часовой стрелке, считая с востока (емнип).
Собственно всё.
Наибольшее удовольствие от игрушки можно получить, если дать задание группе детей придумать прикольное поведение человечков (и призы пообещать), а потом любоваться результатами.
В веб реализации человечки расставляются перетаскиванием с "парковочного места" на поле (старайтесь попадать в клетки, а не в их границы - иначе не станет). Убираются - перетаскиванием на парковку (любую, он сам своё место найдёт). Отношения записываются в таблице редактора. В каждой клетке таблицы написано на каком расстоянии "строковый" человечек хочет находиться от "столбцового"). Есть возможность редактировать, запускать (анимацию или пошагово), управлять скоростью анимации, перематывать анимацию на начало (началом считается положение перед последним запуском анимации), загружать "тусовки" со своего диска и наоборот, скачивать на диск отредактированную "тусовку", копировать текущую тусовку в буфер обмена (это другой способ сохранения - альтернатива скачиванию). Все кнопки снабжены всплывающими подсказками - разберётесь. Если что, спрашивайте.
Игрушка живёт по адресу: http://diy.lilitko.ru/room/
Несколько примеров есть в архиве: http://diy.lilitko.ru/room/Examples.zip
Примеры:
Блин, что-то странно грузится. Иногда надо F5 нажать (а то и пару раз, чтобы загрузилось). Раньше такого, вроде, не было. В общем, если что, давите F5 - загрузится. куда она денется.
отлично грузится. только прикола что-то не понял
И если делать такое на матрице - как управлять положением? все равно нужен будет отдельный интерфейс
В смысле "как управлять положением"? Как их расставлять по полю и задавать их "любовь друг к другу"? Ну, да, нужно будет что-то вроде моего окошка редактора - экранчик, кнопочки.
прикола что-то не понял
А какой прикол в конвеевской "Жизни" или любом другом клеточном автомате? Заставить двигаться так, как хочется используя те средства управления, что даёт клеточный автомат.
У меня делают десяток шагов и останавливаются. Для большего интереса надо бы ввести реакции с разным знаком, чтобы один стремился к близости, а другой держался подальше и чтобы в парах это не совпадало :), все как в жизни
"академическим виделся текст, а на поверку - про секс" )))
Это нормально, если находят локальный экстремум и не могут улучшить пложения.
В моих примерах ведь вечно крутятся, разве нет?
Так так и есть. Скажите одному на другого 5, а другому на первого 10, поставьте на расстояние типа 20+ и смотрите. Сначала побегут друг к другу, потом, когда расстояние станет 10-, второй начнёт убегать от первого (для него ближе 10 не в кайф), а первый его преследовать (ему-то пять хочется). Всё, как в жизни. Собственно на этом вся игрушка и строится :-)