我对我是否正确接近这个问题感到有些困惑。假设我有一个滚动游戏,玩家可以在其中击败怪物并收集物品,这是我的一些玩家类:(c#)
public string Name { get; set; }
public double life { get; set; }
public double power { get; set; }
public Swords weapon { get; set; } // their Held weapon
private List<Items> items; //Represents their backpack
private Monster monster; //The monster they are currently facing.
public Player(string name)
{
this.Name = name;
life = 1000;
power = 10;
weapon = new Swords("Fists", 100, 1); //The power of the weapon. Can only punch at the start
items = new List<Items>();
}
public void addItem(Items i)
{
items.Add(i);
}
然后看看我的播放器类中的这个方法:
public void equiptSword() //
{
Swords tempSword;
foreach (Items i in items)
{
if (i is Swords)
{
tempSword = i as Swords;
tempSword.equiptItem(this);
}
}
}
如您所见,我有一个名为 items 的超/基类,一切都源自于此。当玩家击败怪物时,他们会获得一把剑,我将其添加到物品列表(他们的背包)中。基类没有虚方法equiptItem()
,只有剑有这个方法。因此,我不能只输入 type items[5].equiptItem()
。这意味着我必须使用 if 语句来检查 i 是否是剑,如果是,则将其作为剑施放,然后装备它。但是有一些关于这个的东西让我觉得我不正确地接近它,当然,我可以向基类 Items 添加一个虚拟方法,但是我不希望所有项目都具有可装备性的选项。
对不起,如果我在胡说八道。
你怎么看,我正确地接近这个吗?