Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Запуск!




Код


Коротко рассмотрим архитектуру проекта, и ключевые моменты отдельных фрагментов. Ниже диаграмма основных классов проекта:

Рис. 11 — упрощенная диаграмма классов
Все начинается с алгоритма расчета жизни, реализованного в LifeModel. Эта штука содержит в себе текущее состояние мира (для работы с которым есть класс World), умеет заполнять мир случайными клетками (это нужно для первого старта) или продолжать «покадровую» симуляцию с заданного мира (это нужно при внесении изменений в прошлое). Класс LifeView отвечает за визуальное отображение модели жизни, связываются они через сигналы/слоты.
Жизнь симулируется, но это лишь мимолетное «настоящее», нам потребуется знать все прошлые состояния мира, т.е. нам необходимо от трех измерений перейти к четырем: появляется класс TimeFlow (поток времени, ветка реальности). Он агрегирует LifeModel, содержит коллекцию World (история прошлого), а также точки для построения кривой отклонения истории. Также у него есть указатель на родительский поток, от которого он отпочковался.

Конечно же, потоков времени может быть много, и все они хранятся в TimeModel, фактически представляющий собой древо времени. Именно TimeModel предоставляет интерфейс для просмотра прошлого и перемещения в заданный момент. Он хранит не только коллекцию потоков и номер текущего из них, но путешественника во времени (коллекция клеток). В классе TimeView происходит рендер хронодрева с динамическим масштабированием.

На самом верхнем уровне у нас находится класс MainWindow. Он содержит все view и TimeModel, отвечает за логику работы UI и связывает модели с представлениями посредством сигналов\слотов. Рабочий цикл организован таймером, по тикам которого вызывается next у TimeModel, а он уже пробегается по всем потокам времени, требующим в настоящий момент вызова next (ведь мы можем быть в прошлом, и наш родной поток уже просчитан на какое-то количество шагов вперед).

Все остальные подробности проще посмотреть непосредственно по коду. Да, поскольку это мой первый опыт разработки на фреймворке Qt, конструктивные замечания по коду приветствуются)



Совершим пробный запуск, размер мира 300х300:

Рис. 12 — пример путешествия во времени
Истории перешла в интенсивное отклонение не сразу, достигнув максимума пошел некоторый спад. Отношение отклонения в точке начала путешествия («вершина петли») к максимальному отклонению можно увидеть на мониторе, параметр Dif coef. Здесь он равен 0.82, то есть деформация истории успела уменьшиться почти на 20%.





Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 337; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.006 сек.