C ++ - 如何使用更改名称创建类的实例

时间:2013-07-24 18:18:42

标签: c++ pointers graph nodes

一点背景......我正在制作一个简单的迷宫游戏。本质上,程序是采用以下形式的文本文件:

A * B * *
B * C * A
C G D * B
D * * * C
E I F * *
F J G * E
G * H C F
H * * * G
I * * E *
J * K F *
K * L * J
L * * * K

其中第一个字符是当前节点,第二个字符是其北部的节点,下一个是东部的节点,然后是南部,然后是西部。每行代表一个节点和它可以连接的4个节点。

游戏是基于文本的,其中玩家在节点A处开始并且可以在四个方向中的一个方向上移动(N / E / S / W)。对于节点A,唯一的合法移动是从节点B向东,然后从那里播放器可以向东移动到节点C或者在节点C向西移回节点D.然后用户可以向北移动到节点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的类,目前设置如下:


    class Node()
{
public:
    char *node_north = ;
    char *node_east = ;
    char *node_south = ;
    char *node_west = ;
};  

1 个答案:

答案 0 :(得分: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;