C++-如何创建具有更改名称的类的实例

C++ - How to create an instance of a class with changing name

本文关键字:实例 何创建 创建 C++-      更新时间:2023-10-16

一个小背景。。。我正在做一个简单的迷宫游戏。从本质上讲,该程序是采用以下形式的文本文件:

A*B**B*C*AC G D*BD***CE I F**F J G*EG*H C FH***G我*J*K F*K*L*JL***K

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

游戏是基于文本的,其中玩家从节点a开始并且可以在四个方向之一(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=;};

您可以创建这样的节点:

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;