Алгоритм роста растений

Тема в разделе "Руководства", создана пользователем Netlog, 6 мар 2013.

  1. Netlog

    Netlog
    Архитектор
    850
    459
    333
    Алгоритм роста растений


    Каждый тик (1/20 секунды) все чанки в некотором радиусе от игрока обновляются. С 1.9pre5 этот радиус составляет 7, и получаетя, что обновляемая область имеет вид квадрата размером 15х15 чанков с игроком в центре.
    Когда чанк обновляется, он 20 раз выполняет следующее:
    - выбирается случайный блок в чанке;
    - если этот блок подлежит случайному обновлению - он обновляется.
    Все 20 выборок из чанка независимы - один и тот же блок может быть выбран дважды, трижды, получить 2, 3 обновления. Вероятность двойного выбора составляет (20 / (16*16*128)) = 0.061%.
    Если выбран блок растения, если оно не выросшее, если выполняются условия для роста - по после этого выполняется рост растения на 1 с некоей вероятностью (кое что про вероятность роста есть в http://www.minecraftwiki.net/wiki/Wheat_Farming).
    - Пшеница:
    Рост возможен только если блок сверху имеет уровень освещённости 9 и выше. Вероятность роста составляет 1/ floor(25/growth_rate+1), growth_rate смотрим в ВИКИ по ссылке данной ранее.
    - Адские бородавки:
    Вероятность роста 1/15.
    - Тростник или Кактус:
    Растёт только при длине менее 3 и пустом блоке сверху.
    вероятность роста равна 1! но вместо роста увеличивается на 1 внутренний счётчик блока и только по достижении им 15 тростник/кактус вырастает.
    - Грибы (цвет неважен):
    Может расти только при количестве грибов того же цвета менее 5 в блоке 9х3х9 с центром - грибом. Вероятность роста 1/25. Если проверка роста проходит, то гриб пытается расти на соседних блоках.
    1. Сначала в качестве текущей позиции устанавливается исходный гриб.
    2. С равной вероятностью производится смещение в горизонтальной плоскости по квадрату 3х1х3. После этого производится смещение по вертикали - вверх или вниз с вероятностью 1/4, на той же высоте с вероятностью 1/2
    3. Если блок по вычисленной позиции пригоден для размещения гриба - от становится текущим. Иначе текущая позиция остаётся неизменной.
    4. Снова вычитсялется смещённая позиция, как описано в шаге 2.
    5. Шаги 3 и 4 повторяются трижды.
    6. Если конечная позиция допустима - гриб растёт в ней.
    Допустимой считается позиция при уровне освещённости 12 и ниже и непрозрачном нижнем блоке. Мицелий допустим, независимо от освещённости.
    - Арбуз, Тыква:
    Растёт при уровен освещённости верхнего блока 9 и выше. Вероятность роста 1/ floor(25/growth_rate+1), такая же как и для пшеницы, с поправкой, что учёт влияния соседних растений проводится только по растениям того же типа. Если проверка пройдена - растение растёт на единицу, если оно ещё не взрослое. Взрослое растение пытается произвести ягоду.
    Если с севера, востока, юга, запада есть однотипный блок ягоды - новая ягода не продуцируется.
    Берётся случайное направление.
    Если блок с севера, востока, юга, запада - воздух и под ним - земля/вспаханная земля - на нём располагается новая ягода.
    Саженцы деревьев:
    Нужна освещённость блока сверху 9 и выше. Вероятность роста 1/7
    При успешной проверке саженцу устанавливается флаг однократной проверки. Второй раз - дерево попытается вырасти.
    Трава:
    Требуется освещённость 9 и выше.
    Вероятность роста 1.
    Выбираются 4 случайных блока в области 3х5х3. На каждом из выбранных блоков трава вырастет, если:
    1. Выбран блок земли
    2. Освещённость блока сверху 4 и выше.
    3. Блок сверху не полупрозрачен. (вспаханная земля, плита, лестница )
     
    Trololochan, body90, Enterman и 2 другим нравится это.
  2. Netlog

    Netlog
    Архитектор
    850
    459
    333
    Это перевод статьи http://pernsteiner.org/minecraft/cropgrowth/algo.html
    Цель - внести статью в русскую WIKI/
    Он чуток устарел, но в целом актуальность сохраняет.
    Какие будут поправки?
     
  3. GrAndAG

    GrAndAG
    Архитектор
    387
    273
    313
    Про траву не сразу въехал. Пришлось читать первоисточник. [smile]
    Как мне кажется, не помешают некоторые уточнения...
    - Освещённость 9 требуется для исходного травяного блока.
    - 4 случайных блока выбираются в области от исходного травяного блока.
    - Лучше не "трава вырастет", а земляной блок превратится в травяной. (А то ведь есть ещё трава. которая реально "растёт" на травяных блоках, и которую можно косить.)
     
  4. Enterman

    Enterman
    Архитектор
    426
    427
    348
    Картошка и морковка имеют одинаковый алгоритм с пшеницей, поэтому их в отдельности не указали