我如何仅对一个对象使用属于两个对象的一个 函数?

问题描述 投票:0回答:2

我正在编写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,因为有一次我想在我的代码中构建很多地雷。我认为有一种比复制并粘贴方法更好的方法。

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

c# function object monogame
2个回答
0
投票

您应该为矿井使用一个自定义类,并在此处创建非静态方法,而不要使用静态方法。然后,您应该只找到所需的矿山并收集金矿。示例:

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
投票

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

但是,有两种可能的方法:

  1. 将您的方法移至Mine类(如果存在),以便您像这样调用该方法:
var mine = new Mine();
mine.CollectGold();
  1. 将Mine对象或地雷ID传递给方法,以使签名看起来像这样:
public static void CollectGold(Mine mine)

public static void CollectGold(int mineId)

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

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

© www.soinside.com 2019 - 2024. All rights reserved.