0

私はテキストベースのゲームを作成していますが、ヒーローが3x3グリッド内を移動できるようにしたいと考えています。私はこれを2次元配列でかなり簡単にやってみました。私が遭遇した問題は、ヒーローがいるグリッドごとにメソッドを呼び出したいということでした。したがって、ヒーローがグリッド0,0にある場合は、atHouse()メソッドを呼び出し、彼が0,1に移動した場合は、 atTree()メソッド。これらの各メソッドは、その領域、その中のアイテムなどの説明を提供します。

したがって、メソッドを配列に格納できなかったため、別の方法を実行することを考えていました。どうすればいいのかわからない。私が説明したよりも優れた品質の方法で世界を設定した人はいますか?

4

3 に答える 3

1

location基本クラスの配列は、メソッドで呼び出すdescribe()のがこれを行うための最良の方法だと思います。house次に、クラスとクラスをサブクラス化できますtree

locationまたは、のインスタンスを作成して、descriptionプロパティを設定することもできます。

于 2012-11-14T18:43:56.390 に答える
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

最も簡単な解決策は、ファクトリメソッドを作成することです。

各位置に名前を付けた2次元配列をお勧めします。

[
    ["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 に答える