Существует два основных способа сделать этот вид Основанного Агента моделирования и Системная Динамика. В и основанное на агенте моделирование каждый объект в игре был бы представлен экземпляром класса со свойствами и поведениями, все взаимодействия между объектами должны будут быть явно определены и когда Вы хотите, чтобы эти объекты взаимодействовали, функция вызвана, свойства взаимодействующих объектов изменяется.
Системная Динамика полностью отличается, она только имеет дело с суммами и общими количествами, нет никакого представления единственного объекта в системе. Самым легким примером этого является модель Predator и Prey.
Оба из них имеют преимущества и недостатки, Системный подход Динамики масштабируется лучше к большому количеству entitities при сохранении времени выполнения коротким. В то время как существует несколько формул, которые необходимо вычислить, время для вычисления независимо от значений в формуле. Но нет никакого способа посмотреть на отдельный объект в этом подходе. Основанный на агенте подход позволяет Вам поместить объекты в определенные местоположения и позволяет Вам взаимодействовать с определенными объектами на своем моделировании.
FSMs и автоматы Celular являются другими путями в том, как моделировать системы в игре. Например, в основанном на агенте подходе Вы могли бы смоделировать поведение одного агента с FSM. Simcity использовал автоматы Celular, чтобы сделать часть моделирования.
В целом у Вас, вероятно, не будет одной большой огромной модели, которая делает все кроме нескольких систем, которые делают определенные задачи, некоторые из них не должны будут обновляться очень часто, например, что-то, что определяет погоду, другим, возможно, понадобились бы постоянные обновления. Даже при помещении их в отдельные потоки, Вы захотите приостановить или запустить их при необходимости в них. Вы могли бы хотеть разделить работу по нескольким кадрам, например, вычислить только обновления на определенное число агентов.
Исходный код к исходному Simcity был открыт полученный как Micropolis. Это могло бы быть интересное исследование.
До самого последнего времени логика и управление игры были в единственном потоке в большом конечном автомате. Теперь, тем не менее, Вы склонны видеть различные части игры (аудио, графика, физика, логика 'моделирования', и т.д.) разделяемый на их собственный FSMs в потоках.
Править: Btw, потоки являются очень плохим способом наличия вещей на моделировании, происходящем в 'то же время' - это приводит к условиям состязания. Распространено, что, когда Вы хотите иметь вещи, продолжающиеся в 'то же время', Вы просто выясняете, какие потребности произойти, как Вы выполняете итерации по своим данным и храните их отдельно, затем применяете их, после того как все данные обрабатываются. Rince, повториться.
@Cody Brocious
Этот CodeProject использует Linq для демонстрации этой практики. (Linq к Жизни)
В дополнение к предложениям, отправленным, я рекомендовал бы просмотреть тег моделирования в SourceForge. Существует разнообразие проекта моделирования на переменных уровнях сложности.
Также я рекомендую следующую книгу для основного обзора, В то время как она фокусируется на физике, она занимается проблемами моделирования.