Как создать класс игровых сущностей для игры, который будет динамически расширяться новыми методами?

Итак, у меня есть класс игрока с базовыми действиями. Во время игры он открывает новые способности. Я не знаю, как хранить новые действия в классе игрока. Если быть точным - я знаю как, но мой метод слишком грязный и я хочу почистить код. Также я хочу добавить врагам некоторые из этих способностей. Другими словами, каждая игровая сущность (за исключением стен, возможно: D) должна иметь коллекцию, в которую я могу добавлять методы, расширяющие функциональность сущности. Как мне это сделать? Извините, если мой вопрос слишком абстрактен


person edwing    schedule 27.01.2013    source источник
comment
Может быть, перечисление с атрибутом [Flags]. Так EntityCanDo = Functionality.Jump | Functionality.Run или список действий?   -  person Cyral    schedule 27.01.2013


Ответы (1)


Создайте словарь действий:

public Dictionary<string,Action> NameActionDic = new Dictionary<string,Action>();

Затем вы можете заполнить его следующим образом:

player.NameActionDic["jump"] = ()=>{ player.velocity.Y -= 5; };

И используйте так:

if (KeyboardButtonPressed(Keys.ArrowUp))  // this is just an example
    player.NameActionDic["jump"]();

Просто поместите код заполнения где-нибудь на окраине (отдельный метод void, возможно, конструктор игрока), или он будет мешать вашей возможности редактирования и продолжения, потому что это лямбда-выражение.

person user1306322    schedule 27.01.2013
comment
О, кажется, это то, что я ищу! Благодарю вас! - person edwing; 27.01.2013