АвторСообщение
noname
постоянный участник




Сообщение: 2
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 19.03.08 14:05. Заголовок: живой игровой мир


это особое направление для УРК-работ:

пусть все NPC живут своей жизнью, а не ждут ГГ. я подготовил пример, где они могут ходить по всем доступным локациям или не ходить (всего 4-ре персонажа, номер персонажа, которым будет управлять игрок задан в переменной 'игрок')

Спасибо: 0 
Профиль
Ответов - 136 , стр: 1 2 3 4 5 6 7 All [только новые]


noname
постоянный участник




Сообщение: 3
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 19.03.08 14:05. Заголовок: :инициализация // н..



:инициализация
// начало инициализации
invkill
perkill
игрок = 2 ; номер актёра
// актёры
instr актёр1имя = Честный Галантный Рыцарь
актёр1место = 11; номер поля
instr актёр2имя = Умиротворённый Обаятельный Мудрец
актёр2место = 21
instr актёр3имя = Нежная Добрая Принцесса
актёр3место = 22
instr актёр4имя = Бесшабашный Развязный Дракон
актёр4место = 12
актёров = 4; обязательно должен быть хотя бы один актёр
// поля
instr поле11вид = на яркой солнечной поляне
поле11_се = 12; куда переход, если 0- перехода нет
поле11_за = 0
поле11_юг = 0
поле11_во = 21
instr поле21вид = у красивого, освежающего водопада
поле21_се = 22
поле21_за = 11
поле21_юг = 0
поле21_во = 0
instr поле22вид = под отвесной величественной скалой
поле22_се = 0
поле22_за = 12
поле22_юг = 21
поле22_во = 0
instr поле12вид = в удивительно прозрачном мелком ручейке
поле12_се = 0
поле12_за = 0
поле12_юг = 11
поле12_во = 22
полей = 22;максимумы по горизонтали и по вертикали
// завершение инициализации
goto ГЛАВНАЯ_ЛОКАЦИЯ
end

:ГЛАВНАЯ_ЛОКАЦИЯ
proc мотор ; ходят все остальные
proc отображение
goto идёт_игрок ; вне очереди, иначе- невероятно усложнится алгоритм
end

:отображение
pln Вы #%поле#актёр#игрок$место$вид$
pln Здесь находятся:
pln
счётчик = 0
:loop_2
счётчик = счётчик + 1
if актёр#счётчик$место = актёр#игрок$место then pln - #%актёр#счётчик$имя$
if счётчик<актёров then goto loop_2
end

:мотор
// начало движения
идёт_кто = 0
:loop_1
идёт_кто=идёт_кто+1
дел = 0
if поле#актёр#идёт_кто$место$_се <> 0 then дел=дел+1 & идёт_куда#дел$=поле#актёр#идёт_кто$место$_се
if поле#актёр#идёт_кто$место$_за <> 0 then дел=дел+1 & идёт_куда#дел$=поле#актёр#идёт_кто$место$_за
if поле#актёр#идёт_кто$место$_юг <> 0 then дел=дел+1 & идёт_куда#дел$=поле#актёр#идёт_кто$место$_юг
if поле#актёр#идёт_кто$место$_во <> 0 then дел=дел+1 & идёт_куда#дел$=поле#актёр#идёт_кто$место$_во
if игрок <> идёт_кто then proc идёт_актёр
if идёт_кто < актёров then goto loop_1
// конец всех действий
pln
end

:идёт_актёр
дел=дел+1 ; добавляем ожидание
выбранное_дело = rnd#дел$ ; от 1 до 'дел' включительно
if выбранное_дело = дел then goto skip
if актёр#идёт_кто$место = актёр#игрок$место then pln #%актёр#идёт_кто$имя$ вышел
актёр#идёт_кто$место = идёт_куда#выбранное_дело$
if актёр#идёт_кто$место = актёр#игрок$место then pln вошёл #%актёр#идёт_кто$имя$
:skip
end

:идёт_игрок
if поле#актёр#игрок$место$_се <> 0 then xbtn идёт,{идёт_куда1 = поле#актёр#игрок$место$_се}, пойти на север
if поле#актёр#игрок$место$_за <> 0 then xbtn идёт,{идёт_куда1 = поле#актёр#игрок$место$_за}, пойти на запад
if поле#актёр#игрок$место$_юг <> 0 then xbtn идёт,{идёт_куда1 = поле#актёр#игрок$место$_юг}, пойти на юг
if поле#актёр#игрок$место$_во <> 0 then xbtn идёт,{идёт_куда1 = поле#актёр#игрок$место$_во}, пойти на восток
btn ГЛАВНАЯ_ЛОКАЦИЯ, ждать
end

:идёт
актёр#игрок$место = идёт_куда1
goto ГЛАВНАЯ_ЛОКАЦИЯ
end

Спасибо: 0 
Профиль
noname
постоянный участник




Сообщение: 4
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 19.03.08 14:23. Заголовок: что дальше: 1. персо..


что дальше:
1. персонажи должны выполнять дейсвтия
наугад одно из доступных действий
важно научиться составлять списки доступных действий
2. дифференцировать персонажей по свойствам
может ли некто сдвинуть шкаф зависит от его силы
я абсолютно против того, что бы в действии явно прописывалось,
кто его может сделать.
взаимодействия персонажей и действия с вещами должны строиться
на обработке значений их свойств.
3. добавить чуточку интеллекта.
очень просто: у каждого персонажа будет список желаний и
список страхов,персонаж не станет делать действия из списка
страхов, а если в списке доступных действий есть то,
что он хочет- он делает это
(в данном случае все желания одинаково желанны)
4. добавить экономику:
расставим в мире прилавки с товарами
действия персонажей могут приводить к увеличению или уменьшению кол-ва товаров на прилавках. при смене дня продавец уменьшает на 1 цену тоаров, которых стало больше и
увеличивает на 2 цену товаров, которых стало меньше. это ориентировочно.
5. добавить особые свойства персонажей
например: дракон наступил на ногу торговцу
теперь торговец не любит дракона(свойство отношение к)
теперь он не станет дарить дракону подарок,
а при встрече с рыцарем сможет сделать заказ:
"вызвать дракона на дуэль".
здесь действие подарить подарок зависит от отношения
действие заказать на кого-либо дуэль возможно, если рыцарь рядом
и так же сависит от отношения.

ну или усложнить их поведение можно так: рыцарь может поцеловать принцессу
только после того, как она ему улыбнётся
6. это всё для обычных тупых NPC, что бы создать взаимосвязанный социум, а для некоторых NPC поведение будет дописано дополнительно, если они задействованы в сюжетной линии.


Спасибо: 0 
Профиль
Хломидоманад
постоянный участник




Сообщение: 182
Зарегистрирован: 20.12.05
ссылка на сообщение  Отправлено: 19.03.08 23:16. Заголовок: У меня в "Корпор..


У меня в "Корпорации" был, кажется, один (а может, больше, но я забыл) действительно автономный актер - турист на вокзале. Был, кроме того, народец у лифта и еще кучка "псевдоавтономных"... А в 300,000 евро был Гэри, который таскался следом за гг и тоже претендовал на некоторую самостоятельность... не совсем такую, как пишешь ты, но тоже вносящую определенный оживляж в геймплей.
Особого направления, соответственно, здесь не вижу. Ни для урки, ни, тем более, для текстовых игр в целом. Просто никто пока не брался написать на урке игру, где эти элементы автономии нпц играли бы существенную роль в игровом процессе. Если ты хочешь этим заняться - обеими руками поддерживаю инициативу. Только тогда нет смысла выкладывать какой-то промежуточный код:). Пункты в последнем посте забавные, неплохо бы еще в последствии проработать для каждого обитателя специфический маршрут (скажем, дракон не потащится в город, а принцесса - к дракону в пещеру). Главное - не делать идею "своей жизни" самоцелью. Все равно в первую очередь важна нормальная игра с полноценным сюжетом. А "живые" нпц - только средство для достижения эффекта погружения в эту игру.

Спасибо: 1 
Профиль
noname
постоянный участник




Сообщение: 6
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 19.03.08 23:46. Заголовок: на самом деле мне хо..


на самом деле мне хочется сделать не игру, а некоторую фэнтезюшную модель социума. поэтому пункт 6 меня не интересует напрочь (скажем, дракон не потащится в город, а принцесса - к дракону в пещеру). она не войдёт к нему в пещеру, если у неё по свойствам будет прописано, что она порядочная девушка и в правилах поведения будет прописано что порядочные девушки не заходят в жилище плохих парней и для дракона будет прописано что он плохой парень и для пещеры будет прописано, чьё это жилище... фууу-ух!
P.S.
ну до такой проработки мира дойдёт не скоро, но по чуть-чуть улучшать ИИ можно
меня интересуют общие правила, программирование конкретных событий- нет
впрочем просчёт маршрута исходя из конечной цели- тоже задача
(штоп не болтались туда-сюда, а шли куда-то конкретно)
P.P.S.
1 больше всего меня интересуют самоорганизующиеся процессы
2 ещё меня интересует моделирование социума
3 разве не здорово создать живой мир?

Спасибо: 0 
Профиль
noname
постоянный участник




Сообщение: 7
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 19.03.08 23:56. Заголовок: у меня проблема: сл..


у меня проблема:
следующий код досурка понимает, а акурка- нет:

qqq = "ждать"
if qqq = "ждать" then pln horray
pln ok

досурка даёт оба сообщения, акурка- ни одного...
это катастрофа!

см кусок моего следующего примера:

if поле#актёр#чей_ход$место$_во <> 0 then дел=дел+1 & дело#дел$="идти на" & арг1#дел$="восток"
// ждать - всегда доступное действие без аргументов (необходимо всегда иметь хотя бы одно доступное действие)
дел=дел+1 & дело#дел$="ждать"

в этом примере делоN хранит действие, которое надо делать
арг1N, арг2N и арг3N - аргументы, например дело №73:
дело73="привязать"&арг173="лошадь"&арг273="верёвкой"&арг373="к забору"

в приведённом куске я составляю список доступных дел
потом из них выбираю одно и запускаю на исполнение

в досурке мне не хватает xbtn
акурка мне начала нравиться, но пусть, блин она работает,
и ПОЖАЛУЙСТА- поближе к досурке по системе комманд,
чтоб не учить два языка
(я с досуркой еле разобрался, а на акурку описалова похуже будут)

Спасибо: 0 
Профиль
Platov



Сообщение: 9
Зарегистрирован: 05.03.08
ссылка на сообщение  Отправлено: 20.03.08 01:50. Заголовок: noname, ничего лично..


noname, ничего личного, но меньше паники. ) Зачем дублировать сообщение во все темы которые хоть как-то соприкасаются с проблемой? Темы на форуме обновляются нечасто, народ особо не флудит, потому проблем с прочтением всех новых сообщений обычно не возникает. )

Спасибо: 0 
Профиль
Хломидоманад
постоянный участник




Сообщение: 183
Зарегистрирован: 20.12.05
ссылка на сообщение  Отправлено: 20.03.08 01:57. Заголовок: noname пишет: qqq =..


noname пишет:

 цитата:
qqq = "ждать"
if qqq = "ждать" then pln horray
pln ok


С точки зрения правил хорошего тона досурки код присвоения должен выглядеть так:
instr qqq=ждать
А акурка не выдает ни одного сообщения, потому что повисает... лично у меня. В последних версиях действительно что-то веселое со строками (не работает даже код Корва из учебника, оказывается). Пинать Акелу по этому поводу (и по любому другому) в ближайшую вечность совершенно бесполезно, так как Акурка нынче находится, что называется, on a hiatus.
Без xbtn можно прописать абсолютно все, уверяю тебя.

Спасибо: 0 
Профиль
Korwin
постоянный участник


Сообщение: 336
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 20.03.08 06:37. Заголовок: Xbtn


Xbtn в досурке сделать можно. Виктор делал программу, которая обрабатывала код квеста и преобразовала xbtn в понятные интерпретатору подпрограммы. По-моему в upload можно ее найти. Идея живого мира очень нравится, хотя сделать ее сложно. Пробовал.:)

Спасибо: 1 
Профиль
Евгений
почётное бревно




Сообщение: 354
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.03.08 11:23. Заголовок: Вообще, в досурке, п..


Вообще, в досурке, по-моему, правильнее писать так

instr qqq =ждать
if qqq == "ждать" then pln horray
pln ok

Идея живого мира, меня тоже всегда занимала, но там и правда сложновато. Например, взять перемещение, тот же маршрут нпцов - скорее всего для его создания придется и всю карту со всеми связями между локациями держать в какой-то хитрой структуре. Далее, по нарастающей появляются другие проблемы - двери(и ключи от них), препятствия, по какому маршруту идти нпц если невозможно идти по этому маршруту.. Что делать если гг задержал нпц на пути, отдал ему цель маршрута и теперь он неактуален и т.д. Придется так же прописать реакции нпц на все эти события и перемены. В итоге получится, что на одного нпц уйдет кода больше чем на среднюю игру :)

Спасибо: 1 
Профиль
Хломидоманад
постоянный участник




Сообщение: 184
Зарегистрирован: 20.12.05
ссылка на сообщение  Отправлено: 20.03.08 18:28. Заголовок: Евгений пишет: if ..


Евгений пишет:

 цитата:

if qqq == "ждать" then pln horray


Тоже всегда писал так и собирался было поправить, но глянул на код Корва в "Джинне" и, в общем, осекся:).
Живой мир - это, конечно, интересно, но вне какого-то конкретного сюжета лично я вряд ли мог бы наслаждаться его живостью больше минут 10-15. Учитывая, что других по-настоящему живых обитателей, кроме меня, там нет, проще выйти на улицу:).

Спасибо: 0 
Профиль
noname
постоянный участник




Сообщение: 11
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 20.03.08 22:29. Заголовок: Хломидоманад пишет: ..


Хломидоманад пишет:

 цитата:
Без xbtn можно прописать абсолютно все, уверяю тебя.


скажи- как и буду писать в досурке.

и будет ли понят "instr qqq =ждать" после "then"?

например, как надо было писать вот эти четыре строчки:
(делоN= действие номерN, арг1N= его первый аргумент, .. ,аргMN= его аргумент номер M
переменная "дел" - счётчик возможных для данного персонажа дел)

"
if поле#актёр#чей_ход$место$_се <> 0 then дел=дел+1 & дело#дел$="идти на" & арг1#дел$="север"
if поле#актёр#чей_ход$место$_за <> 0 then дел=дел+1 & дело#дел$="идти на" & арг1#дел$="запад"
if поле#актёр#чей_ход$место$_юг <> 0 then дел=дел+1 & дело#дел$="идти на" & арг1#дел$="юг"
if поле#актёр#чей_ход$место$_во <> 0 then дел=дел+1 & дело#дел$="идти на" & арг1#дел$="восток"
"

Спасибо: 0 
Профиль
noname
постоянный участник




Сообщение: 12
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 20.03.08 22:40. Заголовок: Евгений пишет: Идея..


Евгений пишет:

 цитата:
Идея живого мира, меня тоже всегда занимала, но там и правда сложновато


описанные тобой сложности- далеко впереди.
путь в тысячу ли начинается с одного шага - китайская поговорка
(для сравнения- путь вокруг китайской стены около 30 ли)

что я УЖЕ сделал:
см второй пост темы.
1.герои не просто ходят(и ждут)- они ходят везде, где ВОЗМОЖНО, а не там, где им положено
2.человек может играть за ЛЮБОГО персонажа

что я ПОЧТИ сделал:
переписал свою прогу. мир стал больше, больше персонажей (- мой код ЛЕГКО расширяем),
у персонажей появились АТРИБУТЫ сила и ловкость, персонажи :(могли_бы:( брать и выкладывать предметы, а главное- прога переписана в новом стиле- теперь можно будет(когда я пойму, как заставить это работать) ЛЕГКО добавлять новые действия.

добавил действие - и все персонажи умеют делать это
добавил персонажа - он умеет делать всё, что возможно
добавить локацию? - запросто!

Спасибо: 0 
Профиль
noname
постоянный участник




Сообщение: 13
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 20.03.08 22:52. Заголовок: Евгений пишет: - ск..


Евгений пишет:

 цитата:
- скорее всего для его создания придется и всю карту со всеми связями между локациями держать в какой-то хитрой структуре. Далее, по нарастающей появляются другие проблемы - двери(и ключи от них), препятствия, по какому маршруту идти нпц если невозможно идти по этому маршруту..


таких хитрых неписей пока не сделала ни одна фирма ни гражданская ни (можешь поверить на слово) военная.

можно пока расширять прогу по чуть-чуть. явления самоорганизации должны проявляться после реализации вычисления изменения отношений персонажей друг к другу и ранжирования действий по отношениям- это делаем только плохим, это- только для хороших и т п

Евгений пишет:

 цитата:
В итоге получится, что на одного нпц уйдет кода больше чем на среднюю игру :)


что уйдёт на одного- тем будут пользоваться все.
просто у разных персонажей будут разные свойства, разное отношение к одному и тому же, возможно, какие-то личные воспоминания.(как в симах2: вспомнил про пожар и- заплакал)


Спасибо: 0 
Профиль
noname
постоянный участник




Сообщение: 14
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 20.03.08 22:55. Заголовок: Хломидоманад пишет: ..


Хломидоманад пишет:

 цитата:
Учитывая, что других по-настоящему живых обитателей, кроме меня, там нет, проще выйти на улицу:).


там их тоже нет.
Сократ, чи Диоген ходил днём по улицам с факелом и кричал: "ищу человека!"
я ищу в интернете. на ariom.ru. результат поиска пока в процессе обработки.

Спасибо: 0 
Профиль
noname
постоянный участник




Сообщение: 17
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 20.03.08 23:40. Заголовок: да, про строки я уже..


да, про строки я уже спросил,
а как обойтись без xbtn в данном примере:

"

:идёт_игрок
if поле#актёр#игрок$место$_се <> 0 then xbtn идёт,{идёт_куда1 = поле#актёр#игрок$место$_се}, пойти на север
if поле#актёр#игрок$место$_за <> 0 then xbtn идёт,{идёт_куда1 = поле#актёр#игрок$место$_за}, пойти на запад
if поле#актёр#игрок$место$_юг <> 0 then xbtn идёт,{идёт_куда1 = поле#актёр#игрок$место$_юг}, пойти на юг
if поле#актёр#игрок$место$_во <> 0 then xbtn идёт,{идёт_куда1 = поле#актёр#игрок$место$_во}, пойти на восток
btn ГЛАВНАЯ_ЛОКАЦИЯ, ждать
.....
end

"

Спасибо: 0 
Профиль
noname
постоянный участник




Сообщение: 18
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 20.03.08 23:42. Заголовок: прошу учесть, что вм..


прошу учесть, что вместо идёт_куда будет дело#дел$="идти на" & арг1#дел$="север"
аналогично примеру со строками

Спасибо: 0 
Профиль
Korwin
постоянный участник


Сообщение: 338
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 21.03.08 07:13. Заголовок: noname пишет: а как..


noname пишет:

 цитата:
а как обойтись без xbtn в данном примере:

"

:идёт_игрок
if поле#актёр#игрок$место$_се <> 0 then xbtn идёт,{идёт_куда1 = поле#актёр#игрок$место$_се}, пойти на север
if поле#актёр#игрок$место$_за <> 0 then xbtn идёт,{идёт_куда1 = поле#актёр#игрок$место$_за}, пойти на запад
if поле#актёр#игрок$место$_юг <> 0 then xbtn идёт,{идёт_куда1 = поле#актёр#игрок$место$_юг}, пойти на юг
if поле#актёр#игрок$место$_во <> 0 then xbtn идёт,{идёт_куда1 = поле#актёр#игрок$место$_во}, пойти на восток
btn ГЛАВНАЯ_ЛОКАЦИЯ, ждать
.....
end



Например так:
:идёт_игрок
if поле#актёр#игрок$место$_се <> 0 then btn идётсе, пойти на север
if поле#актёр#игрок$место$_за <> 0 then btn идётза, пойти на запад
...
btn ГЛАВНАЯ_ЛОКАЦИЯ, ждать
.....
end

:идётсе
идёт_куда1 = поле#актёр#игрок$место$_се
goto #%previous_loc$
end

:идётза
идёт_куда1 = поле#актёр#игрок$место$_за
goto #%previous_loc$
end



Спасибо: 0 
Профиль
noname
постоянный участник




Сообщение: 20
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 21.03.08 08:58. Заголовок: Korwin пишет: if по..


Korwin пишет:

 цитата:
if поле#актёр#игрок$место$_се <> 0 then btn идётсе, пойти на север


тут ты прав.
я бестолково обрисовал проблему и решение получилось простое,
НО суть глубже:

идти так реализовано, потому что направлений мало и их проще перечислить, чем создавать переменную направление_N,

а что с остальными командами?
команда взять что-либо генерит все кнопки в одном ифе:

if ... then xbtn ход_игрока,{дело#дел$="взять" & арг1#дел$=вещь#счётчик$_имя},#%...$

это позволяет легко добавлять вещи в разделе инициализации, не затрагивая кода.
какую именно из вещей игрок решил взять- ясно будет только ПОСЛЕ нажатия кнопки.
а если аргумент не один, а три?- как тогда?
создавать массив процедур NхMxK?
теоретически можно в локации ход_игрока выцепить название вещи из btn_caption,
НО это уже сложности- прийдётся писать парсер, разбирающий, что НАЖАЛ игрок.

в-общем, мысль была такова: с помощью xbtn можно делать то, что без него- нельзя.

Спасибо: 0 
Профиль
noname
постоянный участник




Сообщение: 21
Зарегистрирован: 17.03.08
ссылка на сообщение  Отправлено: 21.03.08 09:03. Заголовок: а что если в моём пр..


а что если в моём примере получится 90 кнопок, как досурка на это отреагирует?
да и текст с учётом отображений кто/что сделал в локации, где сидит игрок
может быть длиннее 90 строк.

но выход - есть!

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

если бы милена была не ПОЧТИ а совсем совместима- я бы проверил на ней свою прогу.

Спасибо: 0 
Профиль
Korwin
постоянный участник


Сообщение: 339
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 21.03.08 09:20. Заголовок: Спроси у Виктора его..


Спроси у Виктора его программу по конвертации xbtn в подпрограммы.

Спасибо: 0 
Профиль
Ответов - 136 , стр: 1 2 3 4 5 6 7 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 7
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет