0

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

A * B * *
B * C * A
CGD * B
D * * * C
EIF * *
FJG * E
G * HCF
H * * * G
IE *
J * KF *
K * L * J
L * * * 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 的类,当前设置如下:

    类节点()
{
上市:
    字符 *node_north = ;
    字符 *node_east = ;
    字符 *node_south = ;
    字符 *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 回答