如何将一个属于两个对象的函数只用于一个对象?



我正在编写一个 c# 单博游戏。 地图上有两座金矿。玩家可以通过以下方法收集金币:

public static void CollectGold(ObjectFactory.ObjectType type)
{ 
if (Hud.mCurrentTime >= Hud.mCountDuration)
{
Counter++;
Hud.mCurrentTime -= Hud.mCountDuration
if (sMaxGold < 10)
{ 
sMaxGold += 2;
}
if (sMaxGold >= 10)
{
sMaxGold -= 2;  // or sMaxGold = 10 in earlier version-> same output 
}
}
else if (sMaxGold > 0)
{
Hud.mGold += 2;
sMaxGold -= 2;
}
}

但可以肯定的是,当玩家从金矿收集黄金时,就像他也在从另一个矿中收集黄金一样。 我怎么能分开呢,CollectGold仅适用于一个选定的矿山。 我无法为第二个矿井使用相同的代码创建 CollectGold2,因为有一次我想在我的代码中构建很多矿井。我认为有比复制和粘贴方法更好的方法。

我的第一个想法是,我可以检查地雷的位置,以便该方法知道一个地雷。 但我不知道该怎么做? 有什么想法吗?

您应该为矿井使用自定义类,并在那里创建一个非静态方法而不是静态方法。然后你应该找到所需的矿并收集它的黄金。例:

private class Player
{
public int GoldBalance = 0;
}
private class Mine
{
public int GoldAvailable = 10;
public void Collect(Player player)
{
if (GoldAvailable <= 0)
return;
player.GoldBalance += GoldAvailable;
GoldAvailable = 0;
}
}

这个问题在这种形式中并不能真正回答;我们需要更多信息。例如,您如何在代码中表示您的地雷?

但是,这里有几种可能的方法:

  1. 将方法移动到 Mine 类(如果存在(,以便调用该方法,如下所示:
var mine = new Mine();
mine.CollectGold();
  1. 将 Mine 对象或 mine 的 id 传递给该方法,以便签名如下所示:
public static void CollectGold(Mine mine)

public static void CollectGold(int mineId)

我已经删除了未使用的type参数。

方法 1 可能更可取,但它取决于您要实现的目标以及应用程序的复杂程度。

最新更新