我正在编写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;
}
}
这个问题用这种形式并不是真的可以回答;我们需要更多信息。例如,您如何用代码表示地雷?
但是,有两种可能的方法:
var mine = new Mine();
mine.CollectGold();
public static void CollectGold(Mine mine)
或
public static void CollectGold(int mineId)
我已删除未使用的type
参数。
方法1可能更可取,但它取决于您要实现的目标以及应用程序的复杂程度。