Я пытаюсь создать простое мошенничество, как в c# консольном приложении, и не могу понять, как добавлять различные эффекты к элементам. - PullRequest
0 голосов
/ 05 апреля 2020

Я хочу создать новый элемент и дать ему один эффект из пула уже созданных эффектов.

Например, я хочу создать HealthPotion с именем «зелье здоровья» и эффектом, который лечит данную сущность / субъект за # количество здоровья.

Класс сущности:

class Entity
    {
        public string Name;
        public float Health;
        public List<Item> items;

        public Entity(string name, float health, List<Item> items)
        {
            Name = name;
            Health = health;
            this.items = items;
        }
    }

Класс предмета:

class Item
    {
        public string Name;
        public Effects effect;

        public Item(string name, Effects effect)
        {
            Name = name;
            this.effect = effect;
        }
    }

Класс эффектов:

class Effects
    {
        public static void Heal(Entity entity, float amount)
        {
            entity.Health += amount;
            Console.WriteLine($"{entity.Name} gained {amount} health");
        }
    }

Основная программа:

 static void Main(string[] args)
        {
            Entity Player = new Entity("Main Player", 50);
            Item potion = new Item("health potion", Effects.Heal(Player, 25));
            List<Item> itemsOnPlayer = new List<Item>();
            itemsOnPlayer.Add(potion);
            Player.items = itemsOnPlayer;
        }

Я знаю, что я делаю что-то действительно неправильно, но я понятия не имею, что нужно сделать, чтобы заставить это работать, любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 05 апреля 2020

Вы холодная модель Эффект как [Action<Entity>][1]

    class Item
    {
        public string Name;
        public Action<Entity> Effect;

        public Item(string name, Action<Entity> effect)
        {
            Name = name;
            this.Effect = effect;
        }
    }

затем

Item potion = new Item("health potion", Player => Effects.Heal(Player, 25));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...