блогер
Регистрация: Feb 2006
Сообщений: 1,474
|
Стратегия в контроллере ничего не даст - это точно.
Что делать?
Ни на что не претендую, но раз в _центральном_ контроллере возникает сумасшедший код - может _децентрализовать_ систему?
Т.е. позволить объектам самим решать, что делать. Тогда при добавлении нового элемента его поведение можно будет описывать прямо в нем.
А когда заканчивается время - переключать у всех объектов поведение в режим "паника" с помощью вашей любимой стратегии, например, но здесь это не суть.
Здравый смысл подсказывает, что если каждый элемент будет _особым_ образом взаимодействовать с каждым - получим комбинаторный взрыв (и не важно будем ли мы городить свитчи в контроллере или свитчи в объекте)
Т.е. надо универсализировать отношения с объектами.
Т.е., например у стены, пустой клетки, реки, кольев - сделать 3 характеристики: проходимость, прочность, наносимый вред.
Берем пакмана, у него слабая пробивная сила - значит он не пройдет через стену с проходимостью 1,
но пройдет через объект с проходимостью 2
Возьмем противника - он тоже не пройдет через препятствие (все! нам не надо знать стена это или еще что-то) с проходимостью больше 1
Возьмем суперпротивника - у него хорошая проходимость и он пройдет и через препятствие с проходимостью 1
Т.е. общие свойства у групп объектов выделить и работать с ними, абстрагироваться от конкретных объектов.
---------------
Стратегия (возможно помесь цепочкой обязанностей, мне для эмуляции поведения толпы человечков с разными обязанностями стратегии хватало) потребуется, когда накопится сумасшедший код в самом объекте
т.е. когда у него появятся неявные состояния "искать противника"-"прятаться"-"есть", в каждом из которых он будет по-своему двигаться на каждом такте и взаимодействовать с абстрактрыми препятствиями или абстрактными противниками.
Но, если состояния 2 - можно и свитчом обойтись. А если Вы не представляете как здесь выделить состояния и реализовать их свитчом - паттерн "стратегия" противопоказан.
Последний раз редактировалось expl; 02.11.2011 в 01:23.
|