Найти в Дзене
CyberBiology

Как это работает. Часть 3

Небольшие заметки о том, как устроен мой проект "Искусственная жизнь".
Сегодня рассмотрим условные переходы.
Некоторые команды, такие как "посмотреть", "сделать шаг", "съесть", "поделиться" являются разветвителями. В зависимости от того, что было в клетке, на которое было направленно действие, дальнейшее выполнение кода пойдет по разным веткам.
Рассмотрим пример (смотри рисунок).
-----------------------------—
Указатель текущей команды (УТК) равен 7. Берём число из ячейки №7. Это 26, команда шагнуть. Берём число из следующей ячейки (УТК+1), это параметр, из него вычисляем направление для шага.
------------------------------—
Если клетка была пуста, то берется число по адресу УТК+2.
Там у нас число 0. Это число прибавляется к УТК.
7+0=7. То есть УТК опять указывает на ячеёку №7. Бот будет двигаться в этом направлении, пока на пути не встретит препятствие.
-----------------------------—
Если на клетке была стена, то берется число по адресу УТК+3.
Там у нас число 20. Это числ

Небольшие заметки о том, как устроен мой проект "Искусственная жизнь".


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


Рассмотрим пример (смотри рисунок).
-----------------------------—
Указатель текущей команды (УТК) равен 7. Берём число из ячейки №7. Это 26, команда шагнуть. Берём число из следующей ячейки (УТК+1), это параметр, из него вычисляем направление для шага.
------------------------------—
Если клетка была пуста, то берется число по адресу УТК+2.
Там у нас число 0. Это число прибавляется к УТК.
7+0=7. То есть УТК опять указывает на ячеёку №7. Бот будет двигаться в этом направлении, пока на пути не встретит препятствие.
-----------------------------—
Если на клетке была стена, то берется число по адресу УТК+3.
Там у нас число 20. Это число прибавляется к УТК.
7+20=27. То есть УТК теперь равно 27 и следующей командой будет команда из ячейки №27
-----------------------------—
Если на клетке была органика, то берется число по адресу УТК+4.
Там у нас число 43. Это число прибавляется к УТК.
7+43=50. То есть УТК теперь равно 50 и следующей командой будет команда из ячейки №50
-----------------------------—
Если на клетке был чужой бот, то берется число по адресу УТК+5.
Там у нас число 24. Это число прибавляется к УТК.
7+24=31. То есть УТК теперь равно 31 и следующей командой будет команда из ячейки №31
-----------------------------—
Если на клетке была родня, то берется число по адресу УТК+6.
Там у нас число 59. Это число прибавляется к УТК.
7+59=66. То есть УТК теперь равно 66. Указатель вышел за диапазон возможных адресов, вычитаем из него 64 и получаем 2
Следующей командой будет команда из ячейки №2
----------------------------—
Реально бот сможет сделать шаг только в случае, если клетка была пуста, в других случаях бот останется на месте.
Ну вот и всё.


Таким образом бот получает информацию об окружающих его клетках.
И поведение бота теперь не линейно, а зависит от окружения.

Михаил Царьков

Статья в ВК: https://vk.com/cyberbiology?w=wall-167044850_89