Форум » » живой игровой мир » Ответить

живой игровой мир

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

Ответов - 136, стр: 1 2 3 4 5 6 7 All

noname: :инициализация // начало инициализации 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: что дальше: 1. персонажи должны выполнять дейсвтия наугад одно из доступных действий важно научиться составлять списки доступных действий 2. дифференцировать персонажей по свойствам может ли некто сдвинуть шкаф зависит от его силы я абсолютно против того, что бы в действии явно прописывалось, кто его может сделать. взаимодействия персонажей и действия с вещами должны строиться на обработке значений их свойств. 3. добавить чуточку интеллекта. очень просто: у каждого персонажа будет список желаний и список страхов,персонаж не станет делать действия из списка страхов, а если в списке доступных действий есть то, что он хочет- он делает это (в данном случае все желания одинаково желанны) 4. добавить экономику: расставим в мире прилавки с товарами действия персонажей могут приводить к увеличению или уменьшению кол-ва товаров на прилавках. при смене дня продавец уменьшает на 1 цену тоаров, которых стало больше и увеличивает на 2 цену товаров, которых стало меньше. это ориентировочно. 5. добавить особые свойства персонажей например: дракон наступил на ногу торговцу теперь торговец не любит дракона(свойство отношение к) теперь он не станет дарить дракону подарок, а при встрече с рыцарем сможет сделать заказ: "вызвать дракона на дуэль". здесь действие подарить подарок зависит от отношения действие заказать на кого-либо дуэль возможно, если рыцарь рядом и так же сависит от отношения. ну или усложнить их поведение можно так: рыцарь может поцеловать принцессу только после того, как она ему улыбнётся 6. это всё для обычных тупых NPC, что бы создать взаимосвязанный социум, а для некоторых NPC поведение будет дописано дополнительно, если они задействованы в сюжетной линии.

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


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

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

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

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

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

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

noname: Хломидоманад пишет: Без 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: Евгений пишет: Идея живого мира, меня тоже всегда занимала, но там и правда сложновато описанные тобой сложности- далеко впереди. путь в тысячу ли начинается с одного шага - китайская поговорка (для сравнения- путь вокруг китайской стены около 30 ли) что я УЖЕ сделал: см второй пост темы. 1.герои не просто ходят(и ждут)- они ходят везде, где ВОЗМОЖНО, а не там, где им положено 2.человек может играть за ЛЮБОГО персонажа что я ПОЧТИ сделал: переписал свою прогу. мир стал больше, больше персонажей (- мой код ЛЕГКО расширяем), у персонажей появились АТРИБУТЫ сила и ловкость, персонажи :(могли_бы:( брать и выкладывать предметы, а главное- прога переписана в новом стиле- теперь можно будет(когда я пойму, как заставить это работать) ЛЕГКО добавлять новые действия. добавил действие - и все персонажи умеют делать это добавил персонажа - он умеет делать всё, что возможно добавить локацию? - запросто!

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

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

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

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

Korwin: 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: Korwin пишет: if поле#актёр#игрок$место$_се <> 0 then btn идётсе, пойти на север тут ты прав. я бестолково обрисовал проблему и решение получилось простое, НО суть глубже: идти так реализовано, потому что направлений мало и их проще перечислить, чем создавать переменную направление_N, а что с остальными командами? команда взять что-либо генерит все кнопки в одном ифе: if ... then xbtn ход_игрока,{дело#дел$="взять" & арг1#дел$=вещь#счётчик$_имя},#%...$ это позволяет легко добавлять вещи в разделе инициализации, не затрагивая кода. какую именно из вещей игрок решил взять- ясно будет только ПОСЛЕ нажатия кнопки. а если аргумент не один, а три?- как тогда? создавать массив процедур NхMxK? теоретически можно в локации ход_игрока выцепить название вещи из btn_caption, НО это уже сложности- прийдётся писать парсер, разбирающий, что НАЖАЛ игрок. в-общем, мысль была такова: с помощью xbtn можно делать то, что без него- нельзя.

noname: а что если в моём примере получится 90 кнопок, как досурка на это отреагирует? да и текст с учётом отображений кто/что сделал в локации, где сидит игрок может быть длиннее 90 строк. но выход - есть! а мэтры пусть мучаются и дописывают досурку с акуркой, а то пишут милену, которая с ними совместима, в то время, как в них не поддерживаются заявленные в описании возможности. если бы милена была не ПОЧТИ а совсем совместима- я бы проверил на ней свою прогу.

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



полная версия страницы