質問を理解しているので、ファイルからノードの説明を読み込んで、メモリ内のデータ構造に保存できるようにしたいと考えています。テキストの冒険マップのように見えます。
迷路ゲームのマップを「maze.dat」というテキスト ファイルにコピーしました。
これは、maze.dat ファイルを 1 行ずつ解析し、各行を 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 を使用してグラフ データ構造を構築する必要があります。