No colour or religion ever stopped a bullet from a gun
Был план написать еще один эво-код, но мне пока не удается это дело очень хорошо сформулировать в коде, так что набросаю тут.
Основой будет клетчатое, пока гомогенное поле, скажем, для простоты, сто на сто клеток. Время будет дискретным и считаться в ходах.
На поле будет расти трава - из рандомно инициированного паттерна в клетке может трава быть или не быть. Причем размножается эта штука раз в ход (в самом конце), по правилам Conway's Game of Life:
Any live cell with fewer than two live neighbours dies, as if caused by under-population.
Any live cell with two or three live neighbours lives on to the next generation.
Any live cell with more than three live neighbours dies, as if by overcrowding.
Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.
У травы есть параметр Размер который равен тому сколько ей лет*Прирост_Травы - чем дольше она непрерывно растет в одной клетке тем она вкуснее.
Теперь шаг два - туда же мы запустим животных.
Сначала животные будут по дефолту травоядными и иметь следующие аттрибуты:
Ноги, отражающие как быстро эта штука может бегать.
Глаза, показывающие как далеко она видит.
Размер, показывающий какая она большая
Размер потомства, показывающий стартовый размер потомков
Клыки и Рога
и запасы энергии, которые нужны чтобы эволюционно не выиграли те у кого все по максимуму.
Эти параметры оцениваются от 0 до 100.
Травоядность
Плотоядность
Которые в сумме строго равны сотне.
Плодовитость, показывающий сколкьо у них потомков
Возраст, показывающий их возраст.
Это просто целочисленные параметры
Пол, который является булеан параметром.
Плюс глобальные константы
Цена_Бега
Цена_Смотрения
Цена_Увеличения
Цена_Рогов
Прирост_Травы
Минимум
Каждый ход
Первыми ходят животные.
Они смотрят вокруг на Глаза клеток, и двигаются по какой-то хитрой функции в зависомости от того что он увидел и на не больше клеток чем у них Ноги.
Если в конце, или по ходу пути товарищ оказался в одной клетке с другим животным или травой, то они принимают решение что они делают.
Варианты есть:
Сожрать. Если есть выбор между травой и соседом, то товарищ делает выбор основываясь на своих предпочтениях (Травоядность-15)/(Плотоядность-15) и опасности соседа (которая определяется его Размером, Клыками и Рогами). Если есть только трава то он ее жрет если его Травоядность больше Минимума, если есть только сосед, то выбор идет исходя из того насколько он голодный (его Энергии) и насколько опасна его добыча (ее Размер и Плотоядность)
Спарится. Товарищ предпочитает с этой штукой спарится если она другого от него пола, и достаточно на него похожа по сумме квадратов разницы параметров "Травоядность/Плотоядность*100, Клыки и Рога, Ноги, Глаза, Плодовитость, Размер Потомства). Если разница достаточно большая то они считаются разными видами и не могут спариваться. Чем ближе они по генетике тем лучше им спарится. Так же тут должен учитываться Размер и Энергия - голодному товарищу не до секса.
Игнорировать. Если это нельзя съесть и это нельзя трахнуть то оно бесполезно и они расходятся (или соответственно остаются до конца хода в одной клетке).
Сначала разрешаются заявки на пожирание соседей.
Происходит битва - какая-то случайная функция модифицированная Клыками и Рогами и Размерами противников определяет кто выиграл.
Проигравший умирает, выигравший добавляет к Энергии минимум из (Размер противника, Плотоядность)
Для битвы достаточно чтобы хотя бы один заявил опцию "сожрать" на соседа.
Если оба решили спариваться, то создается среднее арифметическое (количество потомков) количество новых животных с среднеарифметическим стартовым Размером и полной энергией.
У каждого родителя вычитается половина суммы размеров всех потомков.
Параметры новых животных инициированны на 10% случайно + какие-то средие значения между мамой и папой.
Если в клетке есть трава то добавляется к Энергии Размер Травы в этой клетке/количество животных которые хотят ее жрать.
Если Энергия становится отрицательной то разница/Цена_Размера вычитается из Размера
Если Энергия становится больше Размера то разница/Цена_Размера добавляется к Размеру
У них вычитается Энергии на (Цена Бега * количество пройденных клеток*какая-нибудь слабоэкспоненциальная функция Размера + Цена Смотрения*Глаза)
С вероятностью Возраст вычитается 10 пунктов Размера.
Если Размер достиг ноля животное умирает.
Ход Травы
Конец хода
Основой будет клетчатое, пока гомогенное поле, скажем, для простоты, сто на сто клеток. Время будет дискретным и считаться в ходах.
На поле будет расти трава - из рандомно инициированного паттерна в клетке может трава быть или не быть. Причем размножается эта штука раз в ход (в самом конце), по правилам Conway's Game of Life:
Any live cell with fewer than two live neighbours dies, as if caused by under-population.
Any live cell with two or three live neighbours lives on to the next generation.
Any live cell with more than three live neighbours dies, as if by overcrowding.
Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.
У травы есть параметр Размер который равен тому сколько ей лет*Прирост_Травы - чем дольше она непрерывно растет в одной клетке тем она вкуснее.
Теперь шаг два - туда же мы запустим животных.
Сначала животные будут по дефолту травоядными и иметь следующие аттрибуты:
Ноги, отражающие как быстро эта штука может бегать.
Глаза, показывающие как далеко она видит.
Размер, показывающий какая она большая
Размер потомства, показывающий стартовый размер потомков
Клыки и Рога
и запасы энергии, которые нужны чтобы эволюционно не выиграли те у кого все по максимуму.
Эти параметры оцениваются от 0 до 100.
Травоядность
Плотоядность
Которые в сумме строго равны сотне.
Плодовитость, показывающий сколкьо у них потомков
Возраст, показывающий их возраст.
Это просто целочисленные параметры
Пол, который является булеан параметром.
Плюс глобальные константы
Цена_Бега
Цена_Смотрения
Цена_Увеличения
Цена_Рогов
Прирост_Травы
Минимум
Каждый ход
Первыми ходят животные.
Они смотрят вокруг на Глаза клеток, и двигаются по какой-то хитрой функции в зависомости от того что он увидел и на не больше клеток чем у них Ноги.
Если в конце, или по ходу пути товарищ оказался в одной клетке с другим животным или травой, то они принимают решение что они делают.
Варианты есть:
Сожрать. Если есть выбор между травой и соседом, то товарищ делает выбор основываясь на своих предпочтениях (Травоядность-15)/(Плотоядность-15) и опасности соседа (которая определяется его Размером, Клыками и Рогами). Если есть только трава то он ее жрет если его Травоядность больше Минимума, если есть только сосед, то выбор идет исходя из того насколько он голодный (его Энергии) и насколько опасна его добыча (ее Размер и Плотоядность)
Спарится. Товарищ предпочитает с этой штукой спарится если она другого от него пола, и достаточно на него похожа по сумме квадратов разницы параметров "Травоядность/Плотоядность*100, Клыки и Рога, Ноги, Глаза, Плодовитость, Размер Потомства). Если разница достаточно большая то они считаются разными видами и не могут спариваться. Чем ближе они по генетике тем лучше им спарится. Так же тут должен учитываться Размер и Энергия - голодному товарищу не до секса.
Игнорировать. Если это нельзя съесть и это нельзя трахнуть то оно бесполезно и они расходятся (или соответственно остаются до конца хода в одной клетке).
Сначала разрешаются заявки на пожирание соседей.
Происходит битва - какая-то случайная функция модифицированная Клыками и Рогами и Размерами противников определяет кто выиграл.
Проигравший умирает, выигравший добавляет к Энергии минимум из (Размер противника, Плотоядность)
Для битвы достаточно чтобы хотя бы один заявил опцию "сожрать" на соседа.
Если оба решили спариваться, то создается среднее арифметическое (количество потомков) количество новых животных с среднеарифметическим стартовым Размером и полной энергией.
У каждого родителя вычитается половина суммы размеров всех потомков.
Параметры новых животных инициированны на 10% случайно + какие-то средие значения между мамой и папой.
Если в клетке есть трава то добавляется к Энергии Размер Травы в этой клетке/количество животных которые хотят ее жрать.
Если Энергия становится отрицательной то разница/Цена_Размера вычитается из Размера
Если Энергия становится больше Размера то разница/Цена_Размера добавляется к Размеру
У них вычитается Энергии на (Цена Бега * количество пройденных клеток*какая-нибудь слабоэкспоненциальная функция Размера + Цена Смотрения*Глаза)
С вероятностью Возраст вычитается 10 пунктов Размера.
Если Размер достиг ноля животное умирает.
Ход Травы
Конец хода