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