一点背景......我正在制作一个简单的迷宫游戏。本质上,程序是采用以下形式的文本文件:
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 = ; };
答案 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;