Это сложный вопрос. В основном, мы не реализововали это из за сложностей взаимодействия между организмами с разными размерами тела. Но теоретически, это возможно.
Можно упростить эту систему введя одинаковые формы (например квадрат), но меняя размер. По сути, он будет показывать количество команд или количество энергии внутри организма и будет влиять на скорость его движения.
Можно подумать в сторону формирования примитивной многоклеточности. Каждая точка такого организма может, к примеру, содержать свой код (как аналог клетки) или он будет общий... В общем, это сложный и открытый вопрос. В случае многоклеточности непонятно, как точки будут слипаться и держатся одной формы? как они будут общаться между собой? (как вариант командой nwrite или say с расстоянием 1 точка). Как размножаться?
upd1: после чтения литературы выглядит так, что многоклеточность и форма - это следствие взаимодействия атомов, которые формируются в молекулы, которые потом тоже взаимодействуют и т.д. То, как взаимодействуют атомы (команды) в нашей системе не продумано. Сейчас они скрепляются и разъединяются с помощью команд anab, catab и с помощью плагина Decay. Нужно более глубокое исследование этого вопроса чтобы придумать как разные атомы будут взаимодействовать и зачем нам это нужно. Вторая проблема здесь - это то, как соединенные атомы (если они не будут представлять из себя точка, а каждый атом будет точкой) будут менять свое положение. Как команда step, будет "тянуть" за собой остальные прикрепленные к ней атомы?
Еще нужно подумать при каких условиях может появиться мембрана. Чтобы она защищала от внешних элементов (атомов) нужно чтобы те по каким-то причинам не могли вступить в взаимодействие с атомами мембраны.
upd2: оказывается есть даже язык, который похож по идее с тем, о чем я думал. Его имя Befunge. Вот идеи, которые актуальны в моей голове на текущее время:
тело организма будет строиться исходя из молекул из которых он состоит. организмы имеющие одинаковые мрлекулы всегда будут выглядеть одинаково
должны существовать правила по которым молекулы крепятся (выстраиваются в цепочку). Например, молекула M1 всегда располагается справа от предыдущей, а M2 - вверху. Таким образом весь код организма будет преобразован в какой-то точечный рисунок. Направление молекулы будет зависеть от крайности ее числа (все биты атомов). Пример (исходя из правил выше): [M1,M2,M1] будет выглядеть так:
M2 M1
M1
первая M1 - снизу, потом M2 - сверху и M1 - справа. В этом случае так же нужно хранить текущее направление, по которому следующая молекула будет добавляться к уже существующей цепочке. В примере выше, в начале, направление - "вправо", потом - "вверх", потом - "вправо".
команда step должна двигать все точки организма
подумать нужен ли нам поворот организма?
внутри атомы все равно будут линейными (как ДНК)
цвет будет выставляться всем атомам
позиция (Organism.offs) у каждого атома будет своя
вся цепочка не сможет двигаться, если хотя бы один атом во что-то "упирается" (ячейка занята). Это можно решить концентрацией атомов и молекул в определённых местах. Возможно, нужно будет сделать чтобы организмы были над атомами и молекулами. А еще ниже будет поверхность. Но для этого придётся хранить две карты, что очень накладно.
нужно хранить координату только одного атома - первого, относительно которого строятся все другие
Это сложный вопрос. В основном, мы не реализововали это из за сложностей взаимодействия между организмами с разными размерами тела. Но теоретически, это возможно.
nwrite
илиsay
с расстоянием1
точка). Как размножаться?upd1: после чтения литературы выглядит так, что многоклеточность и форма - это следствие взаимодействия атомов, которые формируются в молекулы, которые потом тоже взаимодействуют и т.д. То, как взаимодействуют атомы (команды) в нашей системе не продумано. Сейчас они скрепляются и разъединяются с помощью команд
anab
,catab
и с помощью плагинаDecay
. Нужно более глубокое исследование этого вопроса чтобы придумать как разные атомы будут взаимодействовать и зачем нам это нужно. Вторая проблема здесь - это то, как соединенные атомы (если они не будут представлять из себя точка, а каждый атом будет точкой) будут менять свое положение. Как командаstep
, будет "тянуть" за собой остальные прикрепленные к ней атомы? Еще нужно подумать при каких условиях может появиться мембрана. Чтобы она защищала от внешних элементов (атомов) нужно чтобы те по каким-то причинам не могли вступить в взаимодействие с атомами мембраны.upd2: оказывается есть даже язык, который похож по идее с тем, о чем я думал. Его имя Befunge. Вот идеи, которые актуальны в моей голове на текущее время:
[M1,M2,M1]
будет выглядеть так:первая M1 - снизу, потом M2 - сверху и M1 - справа. В этом случае так же нужно хранить текущее направление, по которому следующая молекула будет добавляться к уже существующей цепочке. В примере выше, в начале, направление - "вправо", потом - "вверх", потом - "вправо".
step
должна двигать все точки организмаOrganism.offs
) у каждого атома будет свояСвязано с #90