Показать сообщение отдельно
Старый 01.11.2011, 15:09
incvizitor вне форума Посмотреть профиль Отправить личное сообщение для incvizitor Найти все сообщения от incvizitor
  № 1  
Ответить с цитированием
incvizitor
 
Аватар для incvizitor

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
По умолчанию Правильное использование шаблона стратегия.

Допусти мы делаем игру пакман.

Есть следущие типы элементов.

1) BlankElement - пустая клетка.
2) WallElement - стенка.
3) Packman - наш персонаж.
4) Enemy - наш враг.
5) SuperEnemy - враг, который, допустим, может ходить через стены.
6) Food - пища для пакмана.

ну и т.д.

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

Так вот, я хочу что бы в контроллере ето красиво обрабатывалось при помощи паттерна стратегия (если есть варианты лучше - you are welcome). Различия могут быть типа: враг не может есть пищу, супервраг может проходить через стены. Возможные решения:

1 - создать кучу классов PackmanToWall, PackmanToFood, PackmanToBlank, PackmanToEnemy... То же самое для врагов и для суперврагов.

Но сами понимаете что во первых это убийственное множество классов. Во вторых если я добавлю, например, элементы bomb, bonus - то надо будет добавлять еще как минимум 6 классов.

2 - создать для каждого двигоющегося объекта свои стратегии PackmanMotion, EnemyMotion, SuperEnemyMotion. Но тогда при добавлении нового элемента прийдется изменять ВСЕ существующие классы. Это не на столько печально - но все равно не шик.

Так как лучше всего разрешить данную ситуацию, что бы код был гибким, стабилным и расширяемым?
__________________
ranga