Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
19.03.2002 09:21

Namor
Участник
Откуда: Довольно Средняя Азия
Зарегистрирован: 03.05.2001
Сообщений: 33
Вебсайт

Устройство программы на стандартном языке

Народы, вот у нас много человек писало на всяких левых языках типа бейсика, паскаля и даже экшнскрипта. Я пробовал на С++. Внимание, вопрос.

Как у вас там всё было устроено, и как устраивать надо? Чисто конкретно программёрский вопрос. Как представлена карта? Двуменрый массив чтоли? Если да то как вверх и вниз ходить?  Трёхмерный чтоли? Как вы обрабатываете команды и где находятся обработчики? У меня мелькает картинка, что в самой дубовой слепленной абы побыстрее игрушке каждая локация - это функция:

function Kuhnya()
begin
  command:=WaitForCommand();
  case command of
     'юг': Gostinnaya();
     'север': Say('сюда нельзя')
  end;
end

Ну что-то в этом роде. Каждая комната - это вот такая функция. Мне бы узнать как сам каркас программы устраивается. Думаю, и всем будет интересно посмотреть кто и как делает.

А?

Неактивен

0    0    #2
16.07.2002 12:22

Ar.A.B.
Участник
Откуда: Moscow
Зарегистрирован: 30.05.2002
Сообщений: 49

Все Боги были бессмертны.....

Re: Устройство программы на стандартном языке

Namor написал:

А сколько километров у тебя эта процедурина?  big_smile Умереть же можно!

;D
// основной модуль
// my_game.cpp
# include "my_lib.h"

void main()
{
MyGame G("game_name.dat", "default.txt", 1);
};

Все!  wink ;D smile big_smile 8)

А если серьезно.... то - да... километры.  yikes
А конца-края все еще не видно...

Но уже есть несколько вещей, которые хочется обсудить... а также несколько идей, которыми, даже, может стоит поделиться... Если это хоть кому-то интересно...

Неактивен

0    0    #3
02.08.2002 13:14

Ar.A.B.
Участник
Откуда: Moscow
Зарегистрирован: 30.05.2002
Сообщений: 49

Все Боги были бессмертны.....

Re: Устройство программы на стандартном языке

WildWizard написал:

Думаю, все же, что для ИФ будет полезен более объектно-ориентированный подход.

Никто не спорит.

Не надо привязывать обработку команд к отдельным комнатам. Тем более не надо сваливать их все в одну кучу..

Я привязываюсь к объектам игрового мира. Мне так кажется логичнее. И пока меня никто не разубедил.

Само же движение игрока вместе с необходимыми проверками происходит там, где оно и должно происходить - в обработчике глагола "идти". (кстати, глаголы - тоже объекты. Очень удобно).

Я использую внутреннию переменную типа Phrase.
Думаю - полный аналог твоих объектов-глаголов.

Комнаты - объекты (впрочем, как и все остальное). В каждом комната-объекте хранятся ссылки на др. комнаты-объекты по направлениям.

Мне больше по душе метод передвижения, реализованный Olegus'ом в "Мути".

Поделюсь одной идеей (Вдруг кому будет интересно). Каждый объект может быть контейнером (обладать свойством). И отличаться от локации только тем, что в него нельзя войти, к примеру. Это мне позволило во-первых, использовать единообразную обработку осмотра ко всем объектам, во вторых, использовав рекурсию (см ниже), разнообразить выдаваемые программой описания.
Пример:
>осм стол
.. Какой еще стол???
[стол == еще не видим]
>осм комнату
[(все, чья локация == ID комнаты) = видимо]
... ля-ля-ля стены-пол-потолок-всякий хлам, стоит стол...
(все что в комнате и видимо)
[стол == видим, шкатулка == еще нет]
>осм стол
... окурки-бутылки, шкатулка...
[шкатулка = видима]
>осм шкатулку
... то-се, пыль - паутина, лежит ключ...
[ключ = видим]
>осм ключ
ключ...
>осм комнату
... туда-сюда,
[комната == локация, контейнер -> выдаем описание всего, чья локация == ID комнаты]
стены-пол-потолок-всякий хлам, стоит стол 
[==контейнер-> выдаем описание всего, чья локация == ID стола]
, на нем -окурки-бутылки, шкатулка
[=контейнер-> выдаем описание всего, чья локация == ID шкатулки]
, в ней - пыль - паутина, лежит ключ
[==не контейнер]. Ну - ключ... (конец ветви)
[продолжение перечисления предметов в комнате]
wink А теперь... Гы! 8)
> положи стол в шкатулку
[стол.Location = шкатулка.ID]
> осм стол wink big_smile smile  tongue
или там wink > осм комнату
..тыр-пыр.."У вас тоже Де-Жа-Вю, товарищ! Лечиться надо!"
В принципе - ни чего не стоит ограничить вложенность, чтоб не загромождать описания всякой всячиной. (кажется, чем что-то наглядное изобретать, можно было бы код вставить...ю sad)

А вообще, если интересно, смотрите исходники - они на Питоне

А просто идеи-алгоритмы рассказать? ? ? sad Лениво или жалко?

Неактивен

0    0    #4
08.08.2002 15:52

Ar.A.B.
Участник
Откуда: Moscow
Зарегистрирован: 30.05.2002
Сообщений: 49

Все Боги были бессмертны.....

Re: Устройство программы на стандартном языке

WildWizard написал:

Да лениво пересказывать алгоритмы. Это же просто один к одному по исходникам читать - какой смысл?

Согласен.


В Hydra все объекты - контейнеры. ...Хотя, наверное, стоит разделить находиться В чем-то и находиться НА чем-то, а то возникают определенные проблемы, как с той стиральной машинкой, В которую можно ложить предметы и НА кот. можно ложить что-нибудь...

Что может быть проще!! ;D Стол - локация? (подрзумевается - на столе) Чем не локация? Ну и: под столом, за столом, в столе ets. - тоже локации.
К примеру - "смотри под стол".  wink
На столе ну, скажем пепельница. Под ней - тоже что-нить быть может? Пусть будет отдельная локация. А раз локация - то и контейнер.

И потом - "поставить" и "положить" - разные действия с разным результатом.  wink

Неактивен

0    0    #5
24.09.2002 10:29

Ar.A.B.
Участник
Откуда: Moscow
Зарегистрирован: 30.05.2002
Сообщений: 49

Все Боги были бессмертны.....

Re: Устройство программы на стандартном языке

RealSonic написал:

Зачем локация? Можно просто отдельные объекты сделать, работающие в качестве контейнеров.

Так и есть. Объект любой может быть локацией (или контейнером - не вижу разницы). А может и не быть.

Неактивен

0    0    #6
25.09.2002 09:35

Ar.A.B.
Участник
Откуда: Moscow
Зарегистрирован: 30.05.2002
Сообщений: 49

Все Боги были бессмертны.....

Re: Устройство программы на стандартном языке

RealSonic написал:

Локация может содержать игрока, а контейнер - только другие предметы.

Возможны варианты wink моей фантазии вполне хватает чтоб с ходу придумать несколько ситуаций, когда возможны исключения. wink)
Не вижу смысла разводить множество разных сущностей, когда можно обойтись и небольшим их количеством smile

1. В локацию перейти можно, а в не_локацию нельзя никак.
2. В контейнер можно поместить предмет (при условиях) а в не_контейнер - нельзя.

Для простоты можно считать каждую локацию контейнером по умолчанию.  А можно и нет. Все в руках автора. smile

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru