首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将属于两个对象的一个函数仅用于一个对象?

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

Stack Overflow用户
提问于 2019-12-15 21:39:54
回答 2查看 46关注 0票数 0

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

代码语言:javascript
复制
 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,因为有一次我想在我的代码中构建很多矿。我认为有一种比复制和粘贴方法更好的方法。

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

EN

回答 2

Stack Overflow用户

发布于 2019-12-16 00:08:56

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-12-15 21:53:38

这个问题实际上不能以这种形式回答;我们需要更多的信息。例如,您如何在代码中表示您的矿山?

然而,这里有几种可能的方法:

  1. 将您的方法移动到Mine类(如果存在),这样您就可以像这样调用该方法:

代码语言:javascript
复制
var mine = new Mine();
mine.CollectGold();

  1. 将一个矿山对象或矿山的id传递给该方法,以便签名如下所示:

代码语言:javascript
复制
public static void CollectGold(Mine mine)

代码语言:javascript
复制
public static void CollectGold(int mineId)

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

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59344440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档