Разработка гибкой и расширяемой бонусной системы для реализации игры Scrabble

Допустим, я реализую свою собственную версию Scrabble. В настоящее время у меня есть класс Board , который содержит множество квадратов . Квадрат , в свою очередь, состоит из IBonus и Фигуры . Бонусные реализации на самом деле являются обычным бонусом для Scrabble, но возможно, что я попробую добавить какой-нибудь новый и необычный бонус, чтобы оживить игру - гибкость здесь имеет первостепенное значение!

alt text

Подумав немного, я пришел к выводу чтобы реализации IBonus работали, им необходимо знать всю Board , а также ее текущее положение (на Board ), чтобы он знал, где он и он может проверить фигуру, которая находится в том же квадрате, что и бонус). Мне это кажется настолько плохим, что, по сути, нужно знать много информации.

Итак, моей наивной реализацией было бы передать Board в качестве аргумента методу IBonus.calculate () , IBonus.calculate (Board Board, Point position) , то есть

Кроме того, похоже, создается круговая ссылка. Или я не прав? alt text

Мне не особенно нравится этот подход, поэтому я ищу другие возможные подходы. Я знаю, что могу заставить вычислить принять интерфейс вместо конкретного класса, то есть вычислить (доска IBoard) , но, как мне кажется, это не так уж лучше, чем в первом случае.

. Я боюсь, что буду слишком сосредоточен на моей текущей реализации, чтобы иметь возможность думать о целых различных проектах, которые могли бы соответствовать хотя бы такому же решению этой проблемы. Может быть, я мог бы переделать всю игру и разместить бонусы в другом месте, чтобы облегчить этот расчет? Может быть, я слишком сосредоточен на том, чтобы они были на Board ? Я, конечно, надеюсь, что есть другие подходы к этой проблеме!

Спасибо

6
задан devoured elysium 25 October 2010 в 22:18
поделиться