我正在编写一个 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;
}
}
这个问题在这种形式中并不能真正回答;我们需要更多信息。例如,您如何在代码中表示您的地雷?
但是,这里有几种可能的方法:
- 将方法移动到 Mine 类(如果存在(,以便调用该方法,如下所示:
var mine = new Mine();
mine.CollectGold();
- 将 Mine 对象或 mine 的 id 传递给该方法,以便签名如下所示:
public static void CollectGold(Mine mine)
或
public static void CollectGold(int mineId)
我已经删除了未使用的type
参数。
方法 1 可能更可取,但它取决于您要实现的目标以及应用程序的复杂程度。