0

我正在制作一个基于文本的游戏,我希望我的英雄能够在 3x3 网格内移动。我尝试用二维数组相当容易地做到这一点。我遇到的问题是我想为英雄所在的每个网格调用一个方法。因此,如果英雄在网格 0,0 中,那么我将调用 atHouse() 方法,如果他进入 0,1 我调用atTree() 方法。这些方法中的每一个都会给出该区域的描述,其中的项目等等......

因此,由于我无法将方法存储在数组中,我正在考虑可能采用另一种方式。我只是不知道哪种方式可能是最好的。有没有人以比我描述的更好的质量方式建立一个世界?

4

3 回答 3

1

您可以定义一个将位置作为参数的方法,而不是将对象存储在数组中。说位置 1 意味着英雄在 0,0 中,位置 2 意味着英雄在 0,1 中。您可以将方法定义为:

public void heroMoved(int position){
  switch(position){
    case 1:
           call method associated
           break;
    case 2:
           call method associated
           break;
        .
        .
        so on
}
}
于 2012-11-14T18:48:12.387 回答
1

最简单的解决方案是创建工厂方法:

我建议一个二维数组,每个位置都有名称:

[
    ["House", "Tree", "etc"],
    ["etc", "etc", "etc"],
    ["etc", "etc", "etc"]
]

然后,您将该位置传递给您的工厂方法,该方法将获取函数名称以在开关中使用。显然,此解决方案不是最好的,因为您必须显式定义每个方法调用。

public void runMethod(int row, int col)
{
    string mName = myArray[row][col];

    switch(mName)
    {
        case "House":
            atHouse();
        break;
        //etc
    }
}
于 2012-11-14T18:48:22.277 回答
1

我认为基类的数组,locationdescribe()方法调用它是最好的方法。然后你可以子类一个house类和一个tree类。

或者您可以创建实例location并设置描述属性。

于 2012-11-14T18:43:56.390 回答