Как спроектировано реальное моделирование?

Меня увлекает производительность таких приложений, как "Роскошный магнат" и "The Sims" и FPS-игры. Я хотел бы узнать больше об основной архитектуре приложения. (Не так, как в пользовательском интерфейсе - я предполагаю, что MVC/MVP piriciples применяются здесь. Я также не занимаюсь математикой и физикой на этом этапе.)

Мой основной вопрос касается десятков или сотен отдельных объектов в симуляции (люди, транспортные средства, предметы и т.д.), которые все двигаются, принимают решения, а также поднимают и реагируют на события - кажутся все одинаковыми, и как они предназначены для такой хорошей работы.

В: Прежде всего, обрабатываются ли эти объекты в гигантском цикле, по одному - или каждый объект обрабатывает в нем собственный поток? Сколько потоков практично в симуляции? (Баллон, конечно, 10, 100, 1000)

Я не хочу писать игру, я просто хочу теорию дизайна, потому что мне интересно, может ли такой дизайн применяться к другим приложениям, где одновременно принимаются несколько решений, кажущихся в то же время.

Ответ 1

Существует два основных способа сделать этот вид моделирования Agent Based и Системная динамика. Моделирование на основе и на основе агентов каждый объект в игре будет представлен экземпляром класса со свойствами и поведением, все взаимодействия между объектами должны быть явно определены и когда вы хотите, чтобы эти объекты взаимодействовали с функцией, называются свойствами взаимодействующих объектов изменяется.

System Dynamics совершенно другая, она касается только сумм и итогов, в системе нет представления единого объекта. Самый простой пример - модель Predator и Prey.

Оба из них имеют свои преимущества и недостатки, подход System Dynamics лучше масштабируется для большого количества разрешений, сохраняя при этом время выполнения. Хотя есть несколько формул, которые вы должны вычислить, время для вычисления не зависит от значений в формуле. Но в этом подходе нет возможности взглянуть на отдельную сущность. Подход, основанный на Агентах, позволяет размещать объекты в определенных местах и ​​позволяет взаимодействовать с определенными объектами в симуляции.

FSM и Celular automata - это другие способы моделирования систем в игре. Например. в методе, основанном на агентах, вы можете моделировать поведение одного агента с помощью FSM. Simcity использовали Celular automata для выполнения некоторых работ по моделированию.

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

Ответ 2

Исходный код оригинального Simcity был открыт с помощью Micropolis. Это может быть интересное исследование.

Ответ 3

До недавнего времени логика и управление играми находились в одном потоке на большой конечной машине. Теперь, однако, вы склонны видеть, что разные части игры (аудио, графика, физика, логика моделирования и т.д.) Разбиваются на собственные FSM в потоках.

Изменить: Btw, потоки - очень плохой способ иметь вещи в симуляции, происходящие в одно и то же время - это приводит к условиям гонки. Обычно, когда вы хотите, чтобы все происходило в одно и то же время, вы просто выясняете, что должно произойти, когда вы перебираете свои данные и храните их отдельно, а затем применяйте их, как только все данные будут обработаны. Рин, повтори.

Ответ 4

@Cody Brocious

Этот CodeProject использует Linq для демонстрации этой практики. (Linq to Life)

Ответ 5

В дополнение к опубликованным предложениям я рекомендую просматривать тег симуляции в sourceforge. Существует множество проектов моделирования на разных уровнях сложности.

Sourceforge

Также я рекомендую следующую книгу для базового обзора. Хотя она ориентирована на физику, она затрагивает проблемы моделирования.

Физика для разработчиков игр