Я пишу двигатель MUD, и я только что начал с объектной модели игры, которая должна быть расширяемой.Советы с иерархией классов для игровых предметов
Мне нужна помощь в основном из-за того, что то, что я сделал, кажется грязным, но я не могу придумать другое решение, которое работает лучше.
У меня есть класс с именем MudObject
, а другой класс, называемый Container
, Контейнер может содержать несколько MudObjects
, но это MudObject
сам, однако MudObject
ей нужно знать, что они содержатся в.
Так они выглядят что-то как это:
public abstract class MudObject
{
Container containedBy;
}
public abstract class Container : MudObject
{
List<MudObject> Contains;
}
(обратите внимание, это только пример, и некоторые классификаторы и модификаторы доступа, свойства и такие пропущено выкл)
Теперь только это само по себе кажется грязным, но позволяет добавить еще что-то смесь:
Item
является MudObject
, что все визуальные элементы (например, оружие) будут унаследованы от, однако некоторые из них должны быть контейнеры тоже (например, сундуки). Но theres нет, например, множественное наследование в C#. Таким образом, это сводится к интерфейсам, лучшим выбором было бы сделать контейнер интерфейсом (насколько я могу видеть). Однако была причина, по которой я не хотел, чтобы это было, что добавление MudObject
в контейнер приведет к обновлению значения MudObject
s .containedBy
.
Любые идеи, которые сделают эту работу, или я попаду в ловушку, чтобы сделать вещи слишком сложными?
Если да, то что еще вы могли бы предложить?
Обратите внимание на мою точку привязки; вместо того, чтобы сундук * быть * контейнером, подумайте о том, чтобы позволить сундуку иметь свойство (такое как предметы), которое является контейнером ... – 2008-10-22 10:20:36
См. мой собственный ответ :) – Sekhat 2008-10-22 10:39:18