1

player私のゲームの私のクラスでこのメソッドを見てください:

public void eatSomethingt(Items eatable)
{
    foreach (Items i in items)
    {
        if (i is Ieatable && i.name == eatable.name) //Give items an ID in the future
        {
            Ieatable k = i as Ieatable;
            k.eat(this);
            items.Remove(i);
            break;
        }
    }
}

基本的に、これはプレイヤーが持っているアイテムのリストを調べてそれらを比較し、渡されたパラメータが食べることができるかどうかを確認します。そうであれば、プレイヤーが持っているかどうかを確認します。IF ステートメントに入ると、アイテムはプレーヤーのバックパックから削除されます( items)

問題は次の行にあります: k.eat(this)It is sent to this method:

public void eat(Player p)
{
    Console.WriteLine(p.Name + " Ate the " + name);
    p.life = p.life + amountHealed;
}

Fruitこれは、アイテムをプレイヤーに供給するクラスであるため、少し「ピンポン」のように感じます。私のFruitクラスはインターフェイスを実装するためiEatable (これは確かに理にかなっています) eat、それを実装するクラスにメソッドを配置する必要があります。

4

2 に答える 2

1

私はそれがプレーヤーの方法であるべきだと思います:

そして、より正確にIEatable言うとIEdible、またはIConsumable

public class Player
{
    .
    .
    public string Name {get;set;}
    public int Life {get;set;}
    .
    .
    public void eat(IEdible food)
    {
        Console.WriteLine(Name + " Ate the " + food.name);
        life += food.amountHealed;
    }
}
于 2013-09-15T20:30:52.113 に答える