【问题标题】:How can I use one function, which belongs to two objects, for only one objects?如何只对一个对象使用属于两个对象的一个​​函数?
【发布时间】:2019-12-15 13:39:53
【问题描述】:

我正在编写一个 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


    【解决方案1】:

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

    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;
        }
    }
    

    【讨论】:

      【解决方案2】:

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

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

      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 可能更可取,但这取决于您要实现的目标以及应用程序的复杂程度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-10
        • 2014-03-09
        • 1970-01-01
        • 2023-02-15
        相关资源
        最近更新 更多