1

在制作游戏时,我偶然发现了一个小问题。我有一个方法 Attack() 必须在我的角色攻击敌人时执行。例如:

public override void Attack(Object theEnemy)
{          
      theEnemy.Health = theEnemy.Health - this.attack
}

示例:我攻击一个精灵。Elf对象需要是参数,问题是参数是找Object,而不是Elf。如果我想攻击其他敌方物体,如兽人、矮人等,也是如此。我需要该参数才能接受任何物体。可能吗?

4

4 回答 4

7

在这种情况下,您可以使用接口,例如:

interface IEnemy
{
    void TakeDamage(int attackPower);
}

public Elf: IEnemy
{
    // sample implementation
    public void TakeDamage(int attackPower)
    {
        this.Health -= attackPower - this.Defense;
    }
}

// later on use IEnemy, which is implemented by all enemy creatures
void Attack(IEnemy theEnemy)
{          
      theEnemy.TakeDamage(attack)
}
于 2013-02-04T16:57:16.747 回答
3

似乎任何可以“攻击”的东西都必须实现一个接口,以便访问所需的属性和/或方法。

所以例如你可以做

public interface IAttackable
{
    void ReduceHealth(int amount);
}

然后为任何可攻击的生物实施它 - 即精灵

public class Elf : IAttackable
{
    public void ReduceHealth(int amount)
    {
        this.Health -= amount;
    }
}

那么用法将是

public override void Attack(IAttackable theEnemy)
{          
      theEnemy.ReduceHealth(this.attack);
}
于 2013-02-04T16:58:54.550 回答
2

您可以创建每个敌人对象实现的接口,也可以创建每个敌人对象所基于的基类。

public interface IEnemyCreature{

void ReduceHealth(int Amount)

}

public Elf: IEnemyCreature{
...
}

编辑 - WalkHard 比我更好地描述了代码 9-)

于 2013-02-04T16:59:15.170 回答
1

最好是分离关注点并使用 OOP 概念。使用界面。

interface IGameMethods
{
    void Attack(int yourValueForAttackMethod);
}

实施

public Elf: IGameMethods
{
    // implementation of IGameMethods
}
于 2013-02-04T16:58:52.760 回答