Кодирование на самом деле не так сложно . Сложная часть заключается в написании кода, который имеет смысл, читабелен и понятен. Поэтому я хочу найти лучшего разработчика и создать надежную архитектуру.
Поэтому я хочу создать архитектуру для неигровых персонажей в видеоигре. Это стратегия в реальном времени, такая как Starcraft, Age of Empires, Command & Conquers и т. Д. И т. Д. Так что у меня будут разные виды NPC. NPC может иметь один ко многим способностям (методы) этим: Build()
, Farm()
и Attack()
.
Примеры:
рабочий может Build()
и Farm()
воин может Attack()
гражданин может Build()
, Farm()
а Attack()
рыбак может Farm()
иAttack()
Я надеюсь, что пока все ясно.
Так что теперь у меня есть типы NPC и их способности. Но давайте перейдем к техническому / программному аспекту.
Какой будет хорошая программная архитектура для моих разных типов NPC?
Хорошо, я мог бы иметь базовый класс. На самом деле я думаю, что это хороший способ придерживаться принципа СУХОЙ . Таким образом, у меня могут быть методы, как WalkTo(x,y)
в моем базовом классе, так как каждый NPC сможет двигаться. Но теперь давайте подойдем к настоящей проблеме. Где я могу реализовать свои способности? (помните: Build()
, Farm()
а Attack()
)
Поскольку способности будут состоять из одной и той же логики, было бы досадно / нарушать принцип СУХОГО, чтобы реализовать их для каждого NPC (Рабочий, Воин, ..).
Хорошо, я мог бы реализовать способности в базовом классе. Это потребует какой - то логики , которая проверяет , если NPC может использовать способность X. IsBuilder
, CanBuild
.. Я думаю, ясно , что я хочу выразить.
Но я не очень хорошо себя чувствую с этой идеей. Это звучит как раздутый базовый класс со слишком большой функциональностью.
Я использую C # в качестве языка программирования. Так что множественное наследование здесь не вариант. Означает: наличие дополнительных базовых классов вроде Fisherman : Farmer, Attacker
не сработает.