据我了解,您希望能够从文件中读取节点的描述并将它们存储在内存中的数据结构中。看起来像一个文字冒险地图。
我已将您的迷宫游戏地图复制到名为“maze.dat”的文本文件中
这是一个简单的程序,它逐行解析 maze.dat 文件,将每一行存储到一个名为 Node 的用户定义数据结构中。然后将每个节点放置在另一个称为向量的数据结构中。
在程序结束时,我打印出向量中的每个节点,以便您可以看到它与原始输入文件匹配。这是我的例子:
#include <iostream>
#include <fstream>
#include <vector>
// storing each node in a data structure
class Node
{
public:
Node(char name, char north, char east, char south, char west)
{
this->name = name;
this->north = north;
this->east = east;
this->south = south;
this->west = west;
};
char name;
char north;
char east;
char south;
char west;
};
// function to print out a node
void print_node(Node n)
{
std::cout << n.name << " " << n.north << " " << n.east << " " << n.south << " " << n.west << " " << std::endl;
}
int main(int argc, const char * argv[])
{
// first off let's read in our maze data file
std::ifstream maze_file("maze.dat");
// create somewhere to store our nodes
std::vector<Node> nodes;
// check that we opened the file, then parse each line
if( maze_file.is_open() )
{
while( maze_file.good() )
{
// temporary node_data for each line in the file
std::string node_data;
// read the current line
getline( maze_file, node_data );
// parse the line into tokens (e.g. A, ,*, ,B, ,*, ,* )
std::vector<char> tokens(node_data.begin(), node_data.end());
// strip out the blanks ' ' (e.g. A,*,B,*,*)
tokens.erase( std::remove(tokens.begin(), tokens.end(), ' '), tokens.end() );
// there should be 5 tokens for a node description
if( tokens.size() == 5 )
{
Node node( tokens[0], tokens[1], tokens[2], tokens[3], tokens[4] );
nodes.push_back(node);
}
else
std::cout << "There weren't 5 tokens in the node description, there were: " << tokens.size() << std::endl;
}
// clean-up the open file handle
maze_file.close();
}
else
std::cout << "Unable to open file maze.dat";
// now we can prove that we've stored the nodes in the same way as they were in the file
// let's print them out from the vector of nodes
std::for_each(nodes.begin(), nodes.end(), print_node);
return 0;
}
这是一种将文件转换为数据结构的非常简单的方法。这对于加载文件很有用,然后您可以创建一种保存地图的方法,从而构建一个地图创建程序。
在实际游戏中实际使用迷宫地图时,这可能没有多大帮助。根据您是否要向北、向东、向南、向西旅行,您更有可能想要检索相关房间。为此,您将需要使用 Str1101 先前描述的 std::map 构建图形数据结构