Я создаю небольшую RPG-игру в ASP.NET.В этой игре у меня есть архитектура предметов, где у каждого предмета есть свои методы.Например, все элементы должны иметь общий метод, такой как " Drop ", " Examine " и " Use ".Некоторые элементы должны быть расширены с помощью таких методов, как " Operate ", " Calculate " и т. Д.
Пока что я создал следующий объект GameActionList:
public delegate void MyDelegate();
public class GameActionList
{
public List<MyDelegate> Items = new List<MyDelegate>();
public void Add(MyDelegate del)
{
Items.Add(del);
}
public void CallDelegates()
{
foreach (MyDelegate myDelegate in Items)
{
myDelegate();
}
}
}
У меня есть класс BaseItem, у которого есть этот GameActionList.Свойство get этого класса BaseItem выглядит следующим образом:
public GameActionList Actions
{
get
{
GameActionList actions = new GameActionList();
actions.Add(this.Drop);
actions.Add(this.Examine);
return actions;
}
}
Это нормально, НО ... У меня есть некоторые проблемы!
Моя проблема
Мне нужен более общий GameActionList.Мне нужен список не только пустот, но и функций. Кроме того, мне нужны оба метода с параметрами и без параметров.
Например: для метода Drop потребуется Playerобъект, чтобы он мог уронить предмет.Метод Examine должен будет возвращать строку, описывающую элемент.
Кроме того, мне нужны некоторые данные, которые я не знаю, когда инициализирую GameActionList: я сначала узнаю эти данные, когдавызовите метод ...
Итак, у меня есть два вопроса:
- Как вы расширяете GameActionList, чтобы он мог содержать список как пустот, так и функций, а также оба они могут иметьпараметры или нет .. (И ДАЖЕ ЛИ ЭТО СМЫСЛ ??)
- Как я могу дать некоторые данные методу позже в цикле, как при вызове?
Также ... Это может быть очень глупый способ сделать это, так что если у вас есть какое-то более элегантное решение ... Я более чем готов его услышать !
Спасибо большое...!Lars