В своей работе я пытаюсь создать более модульные системы, поскольку мы склонны использовать аналогичные механизмы в наших играх, которые имеют небольшие отклонения. Чтобы сделать это, я использовал интерфейсы, но был озадачен определенными проблемами, особенно теми, которые связаны с добавлением небольших функций.
Пример:
Возьмем, к примеру, нашу эволюционную систему. Я создал интерфейс IEvolvable, у которого есть свойство для уровня развития и метод Evolve ().
public interface IEvolvable
{
int evolution { get; }
bool IncreaseEvolution(int numEvolutions);
}
Затем у меня есть реализация этого интерфейса в классе Character, и на основе некоторых условий через мой класс обработки Evolution я хочу развить своего персонажа.
public class EvolutionHandler
{
public IEvolvable evolvable;
public void TryEvolveCharacter
{
if(someCondition)
{
evolvable.IncreaseEvolution(1);
}
}
}
Затем, позже, скажем, мы хотим, чтобы персонаж развивался в зависимости от уровня! Фантастика. У нас есть интерфейс ILevellable, который содержит Level, XP и т. Д.
public interface ILevellable
{
int Level{ get; }
int MaxLevel{get;}
int XP {get;}
bool LevelUp(int numLevels);
}
Мы можем использовать эти данные, чтобы контролировать, когда происходит эволюция на основе изменения уровня. Но вот моя проблема! Мой интерфейс класса обработчика развивается с IEvolvable ... не с ILevellable ... Так что мне делать? Я могу иметь IEvolvable для расширения ILevellable или наоборот ... или я могу создать новый интерфейс, который расширяет IEvolvable и ILevellable. Теперь я также должен изменить свой обработчик evolve, чтобы приспособиться к этим изменениям. Но что произойдет, если мы не хотим, чтобы обработчик эволюции больше учитывал уровень в нашей новой игре? Используете ли вы старый код? Я должен был расширить свой старый код, чтобы включить интерфейс Ilevellable? Это мои вопросы.
public interface ILevelEvolver : ILevellable, IEvolvable
{
}
public class EvolutionHandler2
{
public ILevelEvolver levelEvolvable;
public void TryEvolveCharacter
{
if(levelEvolvable.Level > 10)
{
evolvable.IncreaseEvolution(1);
}
}
}
Я надеюсь, что кто-то может определить проблему, с которой я борюсь, и как я могу решить ее. Скажите, пожалуйста, как бы вы решили эти проблемы? Я хочу стать лучшим программистом
Спасибо!