Мое мгновение пришло к выводу, что должен быть класс для управления распространением огня.Допустим, есть класс World
, который знает о сетке плиток и их природе.Fire
ничего не знает о Wood
, его местонахождении, соседях.То же самое касается Wood
.Это независимые объекты, которые живут своей жизнью.World
решает, где они находятся и как они взаимодействуют друг с другом.
Давайте представим, Fire
выпускает событие и сообщает
Я хочу распространяться.Вот места, которые я хотел бы занять.Мой рост / моя интенсивность / моя частота / моя [любая другая характеристика огня] равна ... "
World
получает сообщение, принимает во внимание характеристики огня и изменяет сеткусоответственно.
ОК. С этой интенсивностью / высотой / [любой другой характеристикой] огня этот и этот Wood
элементы будут сожжены. Я заменю их новыми Fire
экземпляры (или я сделаю копию существующего Fire
объекта и вставлю ссылку на него в ожидаемые для сжигания ячейки).
Было бы интересно иметь один экземплярFire
и отследите все сожженные элементы. Я вижу измененную версию конструктора копирования.
Fire(Fire current, Elements... newlyTakenElements)
Хотя вы можете сами придумать, как это записать.
С этим вы сможете восстановить клетки (полностью или частично), когда огонь закончится. Вы также можете проанализировать, как развивался огонь. Я не уверен, что это может пригодиться, ноэто увлекательнодизайн.
Я думаю об альтернативах ... Я все еще верю, что слишком много информации (целая карта тайлов) для Fire
- это не путь, и любое взаимодействие между Wood
и Fire
ячейки должны проходить через класс менеджера.
Взгляните на другой сценарий, который предполагает, что World
предоставляет частичное представление о себе как список смежных с элементами огня.
-Я хочу распространяться.
-Хорошо.Вот список соседних выгорающих элементов.Я не в курсе ваших характеристик.Вам решать, сколько клеток (и каких) вы собираетесь сжечь.
- Я сжег их все.Дай мне больше!
Мир дает другой список, пока огонь не погаснет.