0

少し背景... 私は単純な迷路ゲームに取り組んでいます。基本的に、プログラムは次の形式のテキスト ファイルを取得します。

A * B * *
B*C*A
CGD * B
D * * * C
EIF * *
FJG * E
G*HCF
H * * * G
私 * * E *
J * KF *
K*L*J
L * * * K

ここで、最初の文字は現在のノード、2 番目の文字はその北のノード、次の文字は東、次に南、西のノードです。各線は、ノードと、接続できる 4 つのノードを表します。

ゲームはテキストベースで、プレイヤーはノード A から開始し、4 つの方向 (N/E/S/W) のいずれかに移動できます。ノード A の場合、唯一の正当な移動は東のノード B であり、そこからプレイヤーは東のノード C に移動するか、西に移動してノード D に戻ることができます。ノード C で、ユーザーは北のノード G に移動し、などなど。* がある場所には、その方向にノードはありません (したがって、NULL に設定します)

私はまだこれをプログラミングする比較的初期の段階にあり、これはノードやクラスを使用する必要がある私の最初の割り当てであるため、ゲームに取り組む前にゲームに取り組む方法をよく理解していることを確認したい.プログラミングの本質に入ります。

ゲームの実際のプレイはかなり簡単だと思います。私の問題は、ゲームボードをセットアップすることです。ファイルストリームを作成して文字を読み込む方法を理解しています。

int BuildGraph()
{
    ifstream build;
    build.open("file.txt");
    char tempChar;

build >> tempChar;

while(tempChar != '\n')
{
    for(int a = 0; a <= 4; a++)
    {
        switch (a)
        {
            case 0:
                Node tempChar; // NEED HELP HERE
                                    build >> tempChar; // Grabs the next character
                break;
            case 1:
                // set Node.north to tempChar
                break;
            case 2:
                // set Node.east to tempChar
                break;
            case 3:
                // set Node.south to tempChar
                break;
            case 4:
                // set Node.west to tempChar
                break;
        }
    }
}
}

私の質問は、読み取られている文字から外れている場合、ノードと名前を作成するにはどうすればよいですか? この場合、最初のノードは A で、a.east は B に設定され、a.south、a.north、および a.west はすべて NULL に設定されます。

この形式でこれを達成するにはどうすればよいですか? 私が取るべき別の、より単純な、またはより良いアプローチはありますか?

また、現在次のように設定されている Node というクラスを使用していることにも注意してください。

    クラスノード()
{
公衆:
    char *node_north = ;
    char *node_east = ;
    char *node_south = ;
    char *node_west = ;
};  

4

1 に答える 1

1

次のようなノードを作成できます。

struct Node {
    char name;
    char north;
    char east;
    char south;
    char west;
};

ノードを保持するベクトル

std::vector<Node> nodes;

そして、次のように読みます。

Node node;
build >> node.name >> node.north >> node.east >> node.south >> node.west;
nodes.push_back(node);

または、次のようなノードを持つこともできます。

struct Node {
    char north;
    char east;
    char south;
    char west;
};

ノードのマップ

std::map<char,Node> nodes;

次のように読みます。

char name;
Node node;
build >> name >> node.north >> node.east >> node.south >> node.west;
nodes[name] = node;
于 2013-07-24T18:29:25.463 に答える