Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Совет по организации программы, разработка квеста 
:(
    Опции темы
G_R_E_M_L_I_N
  Дата 2.5.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 3.10.2006

Репутация: нет
Всего: нет



Доброго всем времени суток.Объясню ситуацию.
Это пока все умозаключительно,в мыслях так сказать,хочу услышать Ваши советы по поводу всего этого.

Итак:
Код

Существует игровой мир,просто статичная картинка,на которой нарисовано 10 дверей,входы в локации.
Открыта только первая дверь,куда и может(пока)зайти главный герой.Каждая локация населена 1 персонажем,который может,
согласно сценария давать ГГ предметы.После посещения ГГ локации,он выходит из нее с какими-то предметами,
на главный экран(тот что с дверьми),причем в зависимости от полученных предметов открываются дополнительные локации.
Потом мы заходим в любую открытую локацию,и начинаем общение с персонажем.Мы можем как дать ему предмет(если он в нем нуждается),
так и получить от него предмет(ну например поменять на какой либо из своих либо уговорить отдать).



Вот в кратце игровой мир и процесс.Все поведение персонажей прописывается в текстовом файле,причем для каждой локации он свой.

Что я думаю.

Мне нужно загрузить эти текстовые файлы в,например, массив loc[10];где они будут у меня храниться и куда я в зависимости от локации смогу обращаться по индексу.
В каждом из текстовых файлов будет стоять метка на выполнения того или иного действия в зависимости от того,какие предметы есть у ГГ.Тоесть,например у ГГ есть топор,и он находится в локации 2,тогда я беру текст из loc[1]-и по тексту ползу до тега [topor/] после чего происходит разговор,обмен предметами,снова разговор до такого тега[/topor].Если же в тексте loc[1] тега [topor/] не встречается то перс говорит фразу по умолчанию.Если у нас например 10 предметов из которых 3 встречаются,то начинается произвольный диалог из этих 3-х.

Посему нам нужен как минимум класс Hero:
Код

class CHero
{
public:
    CHero();
    ~CHero();

    void AddItem(char* name_item);      //Получаем предмет от персонажа
    void  PutItem(char* name_item);     //отдаем предмет персонажу

    void AddLoc(int num_loc);           //получаем номер локации которую открывает персонаж
private:
    std::map<std::string ,bool,std::less<std::string> > map_item_hero;//для хранения предметов
    std::map<std::string ,bool,std::less<std::string> >::iterator iter_item;//итератор

    std::vector<int> loc_open;//локации 0-закрыта,1-открыта
};

я его написал вот так,но думаю что у умных людей будут мысли как улучшить.
Затем нам нужна какая-то структура данных что бы в ней хранить все эти 10 текстовых файлов(ужос)какая - ума не приложу.
С остальным вроде просто,потому как,если заходим в локацию с нужным предметом,то в сценарии получим то что надо,а если пока такового нет,то все равно ничего не получим.
В общем очень нужны Ваши дельные и не очень советы.Голову ломаю уже неделю,не знаю как реализовать. 
PM MAIL   Вверх
Gelos
Дата 5.5.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 29.4.2007

Репутация: нет
Всего: нет



G_R_E_M_L_I_N
Теги = ключевые слова в файлах? Если да, то просто ищешь в тексте его.  Потом, не совсем понял,зачем хранить  файлы в структуре.  Имеется ввиду имена файлов, или ты хочешь сами файлы в память загнать?
PM MAIL   Вверх
Жуть
Дата 6.5.2007, 04:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



Код

typedef std::string item;
typedef std::vector<item> itemSet;

//Узел диалога
//
class DialogNode
{
    std::string promt;    // реплика "дерева" в данном узле
    std::vector<std::string> answers;    //набор возможных ответов
    std::vector<DialogNode*> subNodes;    //"соседние" узлы, т.е. узлы, в которые возможна навигация
    //std::map<std::string, DialogNode*> answerTable;
public:
    bool isLeaf() const;    //отвечать нельзя, тока бери или давай предмет
    DialogNode* GetItem(item& newItem); //если предмет отдан - указатель на следущий узел диалога, иначе 0
    DialogNode* GiveItem(item);    //если предмет принят - указатель на следущий узел диалога, иначе 0
    DialogNode* ChooseAnswer(int index);    // указатель на узел, соответствуущий данному ответу
    int GetAnswersCount() const;    //кол-во ответов
    const std::string GetAnswerText(int index) const;    // получаем строку варианта ответов
    ~DialogNode();
};

class Room
{
    itemSet &required;    //предмет, необходимый для входа в комнату
    
    //Вместо персонажа в комнате сидит дерево диалогов, по которому можно перемеаться давая ответы.
    std::vector<DialogNode*> nodes;
    DialogNode *rootDialog;    //Корневой узел диалога, с него начинаеться диалог в данной локации
public:
    DialogNode* GetRootDialog();    //начало диалога
    virtual bool isOpen(itemSet &herosInventory) const;    //есть ли у героя в рюкзаке предмет, позволяющий войти в локацию
    virtual ~Room()
    {};
};

В аттаче пример дерева диалога, с переходами. Синий - просто узел. Красный - дать вещь. Зеленый - получить. Черный - выход из комнаты.
В сером прямоугольнике "реплика" данного узла.
Логики в диалогах нет, но у меня уже 4 часа утра, такчто не обессудь  smile .
Тебе нужно будет создавать класс "парсер", который из файла для данной комнаты построит дерево диалога и передаст его "комнате".
Оч. сильно рекомендую создать xml файл для описания локации.
набросок для рисунка:
Код

<items>
       <item id="chocolate" name="Шоколад"/>
       <item id="FlashLight" name="Фонарик"/>
</items>

<room name="Имя" description="Описание">
      <requeres>
                <item id="chocolate"/>
      </requeres>
      <nodes rootId="root" count="10">
             <node id="root">
                   <text>
                         Привет !
                   </text>
                   <options count="2">
                            <action gotoNode="foo" type="select">
                                    Пока
                            </action>
                            <action gotoNode="askForChocolate" type="select">
                                    Привет!
                            </action>
                   </options>
             ...
             ...
             ...
             <node id="askForChocolate">
                   <text>
                         У тебя есть шоколад?
                   </text>
                   <options count="2">
                            <action gotoNode="Sorry" type="select">
                                    Нет
                            </action>
                            <action gotoNode="giveChocolate" type="select">
                                    Да
                            </action>
                   </options>
             </node>
             <node id="giveChocolate">
                   <text>
                         Это мой любимый шоколад !
                   </text>
                   <options count="1">
                            <action gotoNode="takeFlashLight" type="give" item="chocolate">
                                    Дать шоколад
                            </action>
                   </options>
             </node>
             <node id="takeFlashLight">
                   <text>
                         Держи фонарик
                   </text>
                   <options count="1">
                            <action gotoNode="byebye" type="take" item="FlashLight">
                                   Взять фонарик
                            </action>
                   </options>
             </node>
             ...
             ...
             ...
             <node id="exit">
                   <text>
                         приходи в седующий раз
                   </text>
                   <options count="0">
                   </options>
             </node>
             <node id="byebye">
                   <text>
                         Пока ))
                   </text>
                   <options count="0">
                   </options>
             </node>
      </nodes>
</room>

Впринципе никто не мешает сделать более 2х ответов, или цикл в графе дерева...

Это сообщение отредактировал(а) Жуть - 6.5.2007, 12:01

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  DialogTree.gif 12,61 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.