Я слышал об игре Dwarf Fortress, но только теперь один из людей, за которыми я следую на Youtube, сделал комментарий к ней ... Я был более чем удивлен, когда заметил, как Dwarf Fortress действительно создает историю для всего мира!
Теперь, как работают эти алгоритмы? Что они обычно принимают в качестве входных данных, кроме длины симуляции? Насколько они могут быть конкретными?
И что более важно; они могут быть сделаны в Javascript или Javascript слишком медленный? (Полагаю, это зависит от глубины симуляции, но возьмем Dwarf Fortress в качестве примера.)
algorithm
javascript
random
jcora
источник
источник
Person
, который будет выполнять обязанности по дому, ходить в армию и т. Д. Мелкий позволял бы размеру империи решать исход сражений, но глубоко бы каждый солдат сражался за своего.Ответы:
Прежде всего, есть несколько подсказок для создания истории о Dwarf Fortress. Некоторое время назад кто-то спросил на форумах Bay12 , и была сделана расшифровка стенограммы, и вы можете узнать, где начинается обсуждение, выполнив поиск: «наша тема сегодня - поколение в мире и поколение в истории».
Я не знаю точно, как это делает Dwarf Fortress, но я объясню, как я планирую реализовать очень простой первый черновик в моей игре. Я собираюсь использовать простой клеточный автомат . Если вы посмотрите на эти прототипы Spore , такие как клеточная культура и биом.
Это примеры клеточной автоматизации и того, что они могут производить. По сути, я создам правила для разных рас. Вот некоторые примеры правил:
Таким образом, самый важный вклад для всего этого - это мир, в который эти расы могут попасть. Местность будет определять их предпочтения и расширение. Поэтому, как только вы создадите мир, выберите случайные места в мире, где эти расы будут жить, и дайте им проиграть. Теперь начинается интересное. Теперь, когда у вас есть земля и расы с желаниями и способностями, вы можете начать строить историю. Эти расы собирают ресурсы, затем строятся структуры:
Любая структура может быть подвергнута набегу / завоеванию другими расами. Чем дольше структура (например, город или крепость) существует в истории, тем она более защищаема, тем труднее ее захватить. И тем более желательным для гонок, которые хотят контроля. Сражения ведутся там, где встречаются расы (по крайней мере, один враждебный). Сражения названы в честь ориентиров или близлежащих сооружений, или если сражение является значительным или ориентиры не названы, ориентиры названы в честь битвы.
Дороги, мосты и туннели расширяются за счет торговли и транспортировки ресурсов. Каждый из них имеет максимальную пропускную способность, которая может увеличиваться с расходом ресурсов. Строить каменную крепость посреди лугов? Эти дороги будут интенсивно использоваться для транспортировки необходимого камня. Они станут больше и получат имя.
Происходят стихийные бедствия, влияющие на население и ход истории. Землетрясения могут превратить город в руины или разрушить туннель. Наводнение может смыть дорогу или мост.
Это не так глубоко, как Крепость Гномов, но это начало. Теперь, как вы можете себе представить (и как упоминал Джонатан Хоббс), чем больше расширяются эти расы, тем больше ячеек моделируется. Мало того, что моделируется больше ячеек, но и моделирование является более сложным, поскольку теперь есть структуры, которые нужно строить / поддерживать, сражения за зарплату, коммерция ... коммерция и так далее. Это становится тяжелым для любого языка. Javascript может замедлиться раньше. Тем не менее, вы всегда можете пожертвовать сложностью для улучшения скорости.
Это все симуляция (хотя и сложная), вы просто записываете важные события и называете это историей.
Я также только что нашел сообщение на форуме Bay12 для людей, которые проводят мозговой штурм о том, как сделать мир поколения Dwarf Fortress быстрее. Я не читал его, но он может дать некоторые подсказки, если у вас возникнут проблемы с слишком медленной реализацией.
источник
С другой стороны, JavaScript не такой медленный, как вы думаете .
Разработчики браузеров потратили много времени и сил на оптимизацию своих движков JavaScript . Тест, с которым я связался, показывает, что из медианных задач в среднем для JavaScript JavaScript был всего в 5 раз медленнее, чем C , чего нельзя сказать о некоторых других интерпретируемых языках. А нижняя граница является еще более впечатляющим: на одном уровне с C .
Конечно, языковые тесты мало что значат - вы можете найти контрпримеры, используя другой тест. Но дело в том, что JavaScript довольно быстрый . Нет, это не C или C ++, и это не так. Но хорошо не зацикливаться на «интерпретируемом языке == медленном» мышлении, потому что для любой задачи нетривиальной сложности производительность будет иметь большее значение при разработке алгоритма, а не при выборе языка.
На самом деле я собирался написать все это в комментарии, но мне не хватило места.
источник
Да, он может быть построен на javascript, проверьте такие проекты, как ASM.js, которые работают почти в 2 раза медленнее, чем C. Если вы позаботитесь о нескольких ядрах (используя веб-работников), это может быть даже быстрее, чем DF (с точки зрения ресурсов) , который является монокорным прямо сейчас.
источник