Существует игровой мир,просто статичная картинка,
на которой нарисовано 10 дверей,входы в локации.
Открыта только первая дверь,куда и может(пока)зайти
главный герой.Каждая локация населена 1 персонажем,
который может,согласно сценария давать ГГ предметы.
После посещения ГГ локации,он выходит из нее с
какими-то предметами,на главный экран(тот что с
дверьми),причем в зависимости от полученных предметов
открываются дополнительные локации.Потом мы заходим
в любую открытую локацию,и начинаем общение с
персонажем.Мы можем как дать ему предмет(если он в
нем нуждается),так и получить от него предмет(ну
например поменять на какой либо из своих либо
уговорить отдать).
Подскажите как реализовать
Это пока все умозаключительно,в мыслях так сказать,хочу услышать Ваши советы по поводу всего этого.
Итак:
Код:
Вот в кратце игровой мир и процесс.Все поведение персонажей прописывается в текстовом файле,причем для каждой локации он свой.
Что я думаю.
Мне нужно загрузить эти текстовые файлы в,например, массив loc[10];где они будут у меня храниться и куда я в зависимости от локации смогу обращаться по индексу.
В каждом из текстовых файлов будет стоять метка на выполнения того или иного действия в зависимости от того,какие предметы есть у ГГ.Тоесть,например у ГГ есть топор,и он находится в локации 2,тогда я беру текст из loc[1]-и по тексту ползу до тега [topor/] после чего происходит разговор,обмен предметами,снова разговор до такого тега[/topor].Если же в тексте loc[1] тега [topor/] не встречается то перс говорит фразу по умолчанию.Если у нас например 10 предметов из которых 3 встречаются,то начинается произвольный диалог из этих 3-х.
Посему нам нужен как минимум класс Hero:
Код:
#ifndef HERO_H
#define HERO_H
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <map>
class CHero
{
public:
CHero();
~CHero();
bool GetFlag(std::string name_item); //получить значение флага для предмета
void Display();
void AddItem(std::string name_item); //добавить предмет
void PutItem(std::string name_item); //отдать предмет
void AddLoc(int num_loc); //открытые локации
private:
std::map<std::string,bool,std::less<std::string> > map_hero_item;
std::vector<int> loc_open;
};
#endif
#define HERO_H
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <map>
class CHero
{
public:
CHero();
~CHero();
bool GetFlag(std::string name_item); //получить значение флага для предмета
void Display();
void AddItem(std::string name_item); //добавить предмет
void PutItem(std::string name_item); //отдать предмет
void AddLoc(int num_loc); //открытые локации
private:
std::map<std::string,bool,std::less<std::string> > map_hero_item;
std::vector<int> loc_open;
};
#endif
и его реализация
Код:
#include "Hero.h"
CHero::CHero():loc_open(10,0)
{
loc_open[0]=1;
std::ifstream file("item.txt");
if(file)
{
// пока не конец
while(!file.eof())
{
// читаем строку
std::string line;
file >>line;
// ищем разделитель
std::string::size_type off = line.find('=');
if(off != std::string::npos)
{
// пишем в map пару имя/флаг
map_hero_item[line.substr(0, off)] = false;
}
}
}
}
CHero::~CHero()
{}
bool CHero::GetFlag(std::string name_item)
{
return map_hero_item[name_item];
}
void CHero::Display()
{
for(int i=0;i<loc_open.size();i++)
std::cout<<loc_open;
}
void CHero::AddItem(std::string name_item)
{
map_hero_item[name_item]=true;
}
void CHero::PutItem(std::string name_item)
{
map_hero_item[name_item]=false;
}
void CHero::AddLoc(int num_loc)
{
loc_open[num_loc]=1;
}
CHero::CHero():loc_open(10,0)
{
loc_open[0]=1;
std::ifstream file("item.txt");
if(file)
{
// пока не конец
while(!file.eof())
{
// читаем строку
std::string line;
file >>line;
// ищем разделитель
std::string::size_type off = line.find('=');
if(off != std::string::npos)
{
// пишем в map пару имя/флаг
map_hero_item[line.substr(0, off)] = false;
}
}
}
}
CHero::~CHero()
{}
bool CHero::GetFlag(std::string name_item)
{
return map_hero_item[name_item];
}
void CHero::Display()
{
for(int i=0;i<loc_open.size();i++)
std::cout<<loc_open;
}
void CHero::AddItem(std::string name_item)
{
map_hero_item[name_item]=true;
}
void CHero::PutItem(std::string name_item)
{
map_hero_item[name_item]=false;
}
void CHero::AddLoc(int num_loc)
{
loc_open[num_loc]=1;
}
я его написал вот так,но думаю что у умных людей будут мысли как улучшить.
Затем нам нужна какая-то структура данных что бы в ней хранить все эти 10 текстовых файлов(ужос)какая - ума не приложу.
С остальным вроде просто,потому как,если заходим в локацию с нужным предметом,то в сценарии получим то что надо,а если пока такового нет,то все равно ничего не получим.
В общем очень нужны Ваши дельные и не очень советы.Голову ломаю уже неделю,не знаю как реализовать.
C++ язык.