|
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Вопрос по взаимодействию классов
Друзья! У меня ещё вопрос к опытным коллегам по проектированию и ООП.
Я почти закончил программировать в Модели базовый цикл игровой фазы: программа отбирает и выводит игроку доступные действия, принимает его выбор, инициализирует и запускает действие, далее оно "волшебит", обращаясь к экземплярам участвующих персонажей, проводит расчёты, выпускает события для Вью и предоставляет результаты. Результаты - это количественное изменение свойств персонажей. Остаётся только применить их и можно заходить на новую фазу. Но есть одно но. Планируется, что помимо непосредственных результатов действий, изменения свойств персонажей подвержены некой дополнительной логике, выходящей за пределы результатов игровых действий. Например, каждую фазу может регенерироваться какое-то свойство (энергия, здоровье, не важно). Или может быть условие, что три подряд удачных атаки открывают доступ к какой-нибудь особенно мощной. И так далее. Суть в том, что одними результатами действия не ограничиться. Пока придумалось создать новый класс типа "CharacterChangesProfile", который будет хранить перечень изменяемых в каждую фазу свойств персонажа, а также меру и какую-то логику их изменения. Тогда при завершении каждого действия Модель будет брать результат из класса действия и совмещать его с данными из профиля изменения. Вопрос в том, что я не могу понять, где должен создаваться и "жить" такой класс. Есть класс Character, куда можно записать: Но меня смущает то, что во-первых, он и так у меня распух до неприличных размеров, а во-вторых, профилю изменений могут для работы потребоваться какие-то свойства персонажа. Такая получается стрёмная двухсторонняя связь с необходимостью классу Character давать какому-то собственному свойству ссылку на себя. Масло масленное. Есть сама Модель, где можно сразу в момент создания, получив в конструктор участников, создать эти профили изменения и держать их при себе. Но тут беда в том, что свойства разных наследников Character могут отличаться (уже корю себя за это!), поэтому создать универсальный профиль не факт что получится, а городить проверки не охота. Пока в качестве компромисса придумалась такая загогулина. Профиль изменений создаётся и живёт в экземпляре Character, но сам Character его никак не использует, а только хранит. Только по первому требованию отдаёт через геттер, а затем, если в профиль внесены изменения, записывает новый через сеттер. Что думаете? Я уверен, моя проблема очень типичная для любого игродела. Спасибо.
__________________
Не сломано - не чини! |
Часовой пояс GMT +4, время: 02:07. |
|
« Предыдущая тема | Следующая тема » |
|
|