tmptrash/irma

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) у каждого атома будет своя
  • вся цепочка не сможет двигаться, если хотя бы один атом во что-то "упирается" (ячейка занята). Это можно решить концентрацией атомов и молекул в определённых местах. Возможно, нужно будет сделать чтобы организмы были над атомами и молекулами. А еще ниже будет поверхность. Но для этого придётся хранить две карты, что очень накладно.
  • нужно хранить координату только одного атома - первого, относительно которого строятся все другие
    Screenshot_20200208-162228_Samsung Notes

Связано с #90