2013-07-24 3 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 узла, к которым он может подключиться.

Игра представляет собой текст, основанный на том, что игрок начинает с узла А и может двигаться в одном из четырех направлений (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.

Как это сделать в этом формате? есть ли другой, более простой или просто лучший подход, который я должен принимать?

я должен также отметить, что я использую класс, называемый узел, который в настоящее время созданы так:

 

    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 '. –

Смежные вопросы