1

ゲームを作成していると、ちょっとした問題に遭遇しました。キャラクターが敵を攻撃するときに実行する必要があるメソッド Attack() があります。例えば:

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

例: 私はエルフを攻撃します。Elf オブジェクトはパラメーターである必要があります。問題は、パラメーターが Elf ではなく Object を探していることです。オークやドワーフなどの他の敵オブジェクトを攻撃したい場合も同様です。任意のオブジェクトを受け入れることができるようにするには、パラメーターが必要です。出来ますか?

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 に答える