2013-07-24 16 views
0

有点背景...我工作的一个简单的迷宫游戏创建一个类的实例。从本质上讲,该方案是采取一个文本文件中的格式如下:C++ - 如何不断变化的名称

 
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或者向后移动到节点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,至少应该设置为B,并且.outh,a.north和a.west都应该设置为NULL。

我如何做到这一点的这种格式?有什么不同的,更简单的,或更好的方法,我应该采取?

我也应该注意到,我使用的一类,称为节点,当前设置是这样的:

 

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

回答

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; 
+0

@ sakau2007:后你读了你需要存储它的节点 - 也许是一个std :: vector 。 –

+0

我看到你是如何添加名称字段的,但我不知道这对我有什么帮助。不仅会保存最后一个节点的信息? 我如何参考成员? 我在想这个方法是node.A.north(将返回NULL)node.A.东(将返回节点B或char B,具体取决于我如何设置它;我认为返回整个节点,因此方向指针将是最好的) – sakau2007

+0

@ sakau2007:可以有一个函数通过节点并找到一个使用特定名称,或者使用'std :: map '。 –