Грустно, когда жители нашего мира вымирают за несколько минут. Чтобы справиться с этим, мы можем попробовать создать более умного поедателя растений.
У наших травоядных есть несколько очевидных проблем. Во-первых, они жадные – поедают каждое растение, которое находят, пока полностью не уничтожат всю растительность. Во-вторых, их случайное движение (вспомните, что метод >view.find
возвращает случайное направление) заставляет их болтаться неэффективно и помирать с голоду, если рядом не окажется растений. И наконец, они слишком быстро размножаются, что делает циклы от изобилия к голоду слишком быстрыми.
Напишите новый тип существа, который старается справится с одним или несколькими проблемами и замените им старый тип >PlantEater
в мире долины. Последите за ними. Выполните необходимые подстройки.
>// Ваш код
>function SmartPlantEater() {}
>animateWorld(new LifelikeWorld(
> ["############################",
> "##### ######",
> "## *** **##",
> "# *##** ** O *##",
> "# *** O ##** *#",
> "# O ##*** #",
> "# ##** #",
> "# O #* #",
> "#* #** O #",
> "#*** ##** O **#",
> "##**** ###*** *###",
> "############################"],
> {"#": Wall,
> "O": SmartPlantEater,
> "*": Plant}
>));
В любой серьёзной экосистеме пищевая цепочка длиннее одного звена. Напишите ещё одно существо, которое выживает, поедая травоядных. Вы заметите, что стабильности ещё труднее достичь, когда циклы происходят на разных уровнях. Попытайтесь найти стратегию, которая позволит экосистеме работать плавно некоторое время.
Увеличение мира может помочь в этом. Тогда локальные демографические взрывы или уменьшение численности имеют меньше шансов полностью изничтожить популяцию, и есть место для относительно большой популяции жертв, которая может поддерживать небольшую популяцию хищников.
>// Ваш код тут
>function Tiger() {}