Автор | Сообщение |
noname
|
| постоянный участник
|
Сообщение: 2
Зарегистрирован: 17.03.08
|
|
Отправлено: 19.03.08 14:05. Заголовок: живой игровой мир
это особое направление для УРК-работ: пусть все NPC живут своей жизнью, а не ждут ГГ. я подготовил пример, где они могут ходить по всем доступным локациям или не ходить (всего 4-ре персонажа, номер персонажа, которым будет управлять игрок задан в переменной 'игрок')
|
|
Профиль
|
Ответов - 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
|
|
Профиль
|
noname
|
| постоянный участник
|
Сообщение: 4
Зарегистрирован: 17.03.08
|
|
Отправлено: 19.03.08 14:23. Заголовок: что дальше: 1. персо..
что дальше: 1. персонажи должны выполнять дейсвтия наугад одно из доступных действий важно научиться составлять списки доступных действий 2. дифференцировать персонажей по свойствам может ли некто сдвинуть шкаф зависит от его силы я абсолютно против того, что бы в действии явно прописывалось, кто его может сделать. взаимодействия персонажей и действия с вещами должны строиться на обработке значений их свойств. 3. добавить чуточку интеллекта. очень просто: у каждого персонажа будет список желаний и список страхов,персонаж не станет делать действия из списка страхов, а если в списке доступных действий есть то, что он хочет- он делает это (в данном случае все желания одинаково желанны) 4. добавить экономику: расставим в мире прилавки с товарами действия персонажей могут приводить к увеличению или уменьшению кол-ва товаров на прилавках. при смене дня продавец уменьшает на 1 цену тоаров, которых стало больше и увеличивает на 2 цену товаров, которых стало меньше. это ориентировочно. 5. добавить особые свойства персонажей например: дракон наступил на ногу торговцу теперь торговец не любит дракона(свойство отношение к) теперь он не станет дарить дракону подарок, а при встрече с рыцарем сможет сделать заказ: "вызвать дракона на дуэль". здесь действие подарить подарок зависит от отношения действие заказать на кого-либо дуэль возможно, если рыцарь рядом и так же сависит от отношения. ну или усложнить их поведение можно так: рыцарь может поцеловать принцессу только после того, как она ему улыбнётся 6. это всё для обычных тупых NPC, что бы создать взаимосвязанный социум, а для некоторых NPC поведение будет дописано дополнительно, если они задействованы в сюжетной линии.
|
|
Профиль
|
Хломидоманад
|
| постоянный участник
|
Сообщение: 182
Зарегистрирован: 20.12.05
|
|
Отправлено: 19.03.08 23:16. Заголовок: У меня в "Корпор..
У меня в "Корпорации" был, кажется, один (а может, больше, но я забыл) действительно автономный актер - турист на вокзале. Был, кроме того, народец у лифта и еще кучка "псевдоавтономных"... А в 300,000 евро был Гэри, который таскался следом за гг и тоже претендовал на некоторую самостоятельность... не совсем такую, как пишешь ты, но тоже вносящую определенный оживляж в геймплей. Особого направления, соответственно, здесь не вижу. Ни для урки, ни, тем более, для текстовых игр в целом. Просто никто пока не брался написать на урке игру, где эти элементы автономии нпц играли бы существенную роль в игровом процессе. Если ты хочешь этим заняться - обеими руками поддерживаю инициативу. Только тогда нет смысла выкладывать какой-то промежуточный код:). Пункты в последнем посте забавные, неплохо бы еще в последствии проработать для каждого обитателя специфический маршрут (скажем, дракон не потащится в город, а принцесса - к дракону в пещеру). Главное - не делать идею "своей жизни" самоцелью. Все равно в первую очередь важна нормальная игра с полноценным сюжетом. А "живые" нпц - только средство для достижения эффекта погружения в эту игру.
|
|
Профиль
|
noname
|
| постоянный участник
|
Сообщение: 6
Зарегистрирован: 17.03.08
|
|
Отправлено: 19.03.08 23:46. Заголовок: на самом деле мне хо..
на самом деле мне хочется сделать не игру, а некоторую фэнтезюшную модель социума. поэтому пункт 6 меня не интересует напрочь (скажем, дракон не потащится в город, а принцесса - к дракону в пещеру). она не войдёт к нему в пещеру, если у неё по свойствам будет прописано, что она порядочная девушка и в правилах поведения будет прописано что порядочные девушки не заходят в жилище плохих парней и для дракона будет прописано что он плохой парень и для пещеры будет прописано, чьё это жилище... фууу-ух! P.S. ну до такой проработки мира дойдёт не скоро, но по чуть-чуть улучшать ИИ можно меня интересуют общие правила, программирование конкретных событий- нет впрочем просчёт маршрута исходя из конечной цели- тоже задача (штоп не болтались туда-сюда, а шли куда-то конкретно) P.P.S. 1 больше всего меня интересуют самоорганизующиеся процессы 2 ещё меня интересует моделирование социума 3 разве не здорово создать живой мир?
|
|
Профиль
|
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 акурка мне начала нравиться, но пусть, блин она работает, и ПОЖАЛУЙСТА- поближе к досурке по системе комманд, чтоб не учить два языка (я с досуркой еле разобрался, а на акурку описалова похуже будут)
|
|
Профиль
|
Platov
|
| |
Сообщение: 9
Зарегистрирован: 05.03.08
|
|
Отправлено: 20.03.08 01:50. Заголовок: noname, ничего лично..
noname, ничего личного, но меньше паники. ) Зачем дублировать сообщение во все темы которые хоть как-то соприкасаются с проблемой? Темы на форуме обновляются нечасто, народ особо не флудит, потому проблем с прочтением всех новых сообщений обычно не возникает. )
|
|
Профиль
|
Хломидоманад
|
| постоянный участник
|
Сообщение: 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 можно прописать абсолютно все, уверяю тебя.
|
|
Профиль
|
Korwin
|
| постоянный участник
|
Сообщение: 336
Зарегистрирован: 25.05.05
|
|
Отправлено: 20.03.08 06:37. Заголовок: Xbtn
Xbtn в досурке сделать можно. Виктор делал программу, которая обрабатывала код квеста и преобразовала xbtn в понятные интерпретатору подпрограммы. По-моему в upload можно ее найти. Идея живого мира очень нравится, хотя сделать ее сложно. Пробовал.:)
|
|
Профиль
|
Евгений
|
| почётное бревно
|
Сообщение: 354
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.03.08 11:23. Заголовок: Вообще, в досурке, п..
Вообще, в досурке, по-моему, правильнее писать так instr qqq =ждать if qqq == "ждать" then pln horray pln ok Идея живого мира, меня тоже всегда занимала, но там и правда сложновато. Например, взять перемещение, тот же маршрут нпцов - скорее всего для его создания придется и всю карту со всеми связями между локациями держать в какой-то хитрой структуре. Далее, по нарастающей появляются другие проблемы - двери(и ключи от них), препятствия, по какому маршруту идти нпц если невозможно идти по этому маршруту.. Что делать если гг задержал нпц на пути, отдал ему цель маршрута и теперь он неактуален и т.д. Придется так же прописать реакции нпц на все эти события и перемены. В итоге получится, что на одного нпц уйдет кода больше чем на среднюю игру :)
|
|
Профиль
|
Хломидоманад
|
| постоянный участник
|
Сообщение: 184
Зарегистрирован: 20.12.05
|
|
Отправлено: 20.03.08 18:28. Заголовок: Евгений пишет: if ..
Евгений пишет: цитата: | if qqq == "ждать" then pln horray |
| Тоже всегда писал так и собирался было поправить, но глянул на код Корва в "Джинне" и, в общем, осекся:). Живой мир - это, конечно, интересно, но вне какого-то конкретного сюжета лично я вряд ли мог бы наслаждаться его живостью больше минут 10-15. Учитывая, что других по-настоящему живых обитателей, кроме меня, там нет, проще выйти на улицу:).
|
|
Профиль
|
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#дел$="восток" "
|
|
Профиль
|
|
noname
|
| постоянный участник
|
Сообщение: 12
Зарегистрирован: 17.03.08
|
|
Отправлено: 20.03.08 22:40. Заголовок: Евгений пишет: Идея..
Евгений пишет: цитата: | Идея живого мира, меня тоже всегда занимала, но там и правда сложновато |
| описанные тобой сложности- далеко впереди. путь в тысячу ли начинается с одного шага - китайская поговорка (для сравнения- путь вокруг китайской стены около 30 ли) что я УЖЕ сделал: см второй пост темы. 1.герои не просто ходят(и ждут)- они ходят везде, где ВОЗМОЖНО, а не там, где им положено 2.человек может играть за ЛЮБОГО персонажа что я ПОЧТИ сделал: переписал свою прогу. мир стал больше, больше персонажей (- мой код ЛЕГКО расширяем), у персонажей появились АТРИБУТЫ сила и ловкость, персонажи :(могли_бы:( брать и выкладывать предметы, а главное- прога переписана в новом стиле- теперь можно будет(когда я пойму, как заставить это работать) ЛЕГКО добавлять новые действия. добавил действие - и все персонажи умеют делать это добавил персонажа - он умеет делать всё, что возможно добавить локацию? - запросто!
|
|
Профиль
|
noname
|
| постоянный участник
|
Сообщение: 13
Зарегистрирован: 17.03.08
|
|
Отправлено: 20.03.08 22:52. Заголовок: Евгений пишет: - ск..
Евгений пишет: цитата: | - скорее всего для его создания придется и всю карту со всеми связями между локациями держать в какой-то хитрой структуре. Далее, по нарастающей появляются другие проблемы - двери(и ключи от них), препятствия, по какому маршруту идти нпц если невозможно идти по этому маршруту.. |
| таких хитрых неписей пока не сделала ни одна фирма ни гражданская ни (можешь поверить на слово) военная. можно пока расширять прогу по чуть-чуть. явления самоорганизации должны проявляться после реализации вычисления изменения отношений персонажей друг к другу и ранжирования действий по отношениям- это делаем только плохим, это- только для хороших и т п Евгений пишет: цитата: | В итоге получится, что на одного нпц уйдет кода больше чем на среднюю игру :) |
| что уйдёт на одного- тем будут пользоваться все. просто у разных персонажей будут разные свойства, разное отношение к одному и тому же, возможно, какие-то личные воспоминания.(как в симах2: вспомнил про пожар и- заплакал)
|
|
Профиль
|
noname
|
| постоянный участник
|
Сообщение: 14
Зарегистрирован: 17.03.08
|
|
Отправлено: 20.03.08 22:55. Заголовок: Хломидоманад пишет: ..
Хломидоманад пишет: цитата: | Учитывая, что других по-настоящему живых обитателей, кроме меня, там нет, проще выйти на улицу:). |
| там их тоже нет. Сократ, чи Диоген ходил днём по улицам с факелом и кричал: "ищу человека!" я ищу в интернете. на ariom.ru. результат поиска пока в процессе обработки.
|
|
Профиль
|
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 "
|
|
Профиль
|
noname
|
| постоянный участник
|
Сообщение: 18
Зарегистрирован: 17.03.08
|
|
Отправлено: 20.03.08 23:42. Заголовок: прошу учесть, что вм..
прошу учесть, что вместо идёт_куда будет дело#дел$="идти на" & арг1#дел$="север" аналогично примеру со строками
|
|
Профиль
|
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
|
|
Профиль
|
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 можно делать то, что без него- нельзя.
|
|
Профиль
|
noname
|
| постоянный участник
|
Сообщение: 21
Зарегистрирован: 17.03.08
|
|
Отправлено: 21.03.08 09:03. Заголовок: а что если в моём пр..
а что если в моём примере получится 90 кнопок, как досурка на это отреагирует? да и текст с учётом отображений кто/что сделал в локации, где сидит игрок может быть длиннее 90 строк. но выход - есть! а мэтры пусть мучаются и дописывают досурку с акуркой, а то пишут милену, которая с ними совместима, в то время, как в них не поддерживаются заявленные в описании возможности. если бы милена была не ПОЧТИ а совсем совместима- я бы проверил на ней свою прогу.
|
|
Профиль
|
Korwin
|
| постоянный участник
|
Сообщение: 339
Зарегистрирован: 25.05.05
|
|
Отправлено: 21.03.08 09:20. Заголовок: Спроси у Виктора его..
Спроси у Виктора его программу по конвертации xbtn в подпрограммы.
|
|
Профиль
|
Ответов - 136
, стр:
1
2
3
4
5
6
7
All
[только новые]
|
|