【发布时间】:2026-01-13 20:30:02
【问题描述】:
请在我的游戏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) 发送到这个方法:
public void eat(Player p)
{
Console.WriteLine(p.Name + " Ate the " + name);
p.life = p.life + amountHealed;
}
这感觉有点“乒乓”,因为它是 Fruit 类将物品提供给玩家。由于我的Fruitclass 实现了接口iEatable(这肯定是有意义的),我必须在实现它的类中放置一个eat 方法。
【问题讨论】:
-
我认为玩家应该有eat方法而不是ieatable。
-
嗯,对游戏一无所知,但
eat不应该更像:void eat(IIsFood)?如果需要,当然可以用另一种方法随机化...IIsFood会喜欢:int hprestored等... -
为什么不引入一个负责进食的 Mouth 类 :-) 这样您就可以移出将在玩家(上帝对象)内部编写的各种职责。
-
如果你的代码有很多这样的限制,LINQ 将是一个有价值的朋友。