Форум » » живой игровой мир (продолжение) » Ответить

живой игровой мир (продолжение)

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

Ответов - 45, стр: 1 2 3 All

noname: помню, в теме http://urq.borda.ru/?1-0-40-00000140-000-400-0-1210940054 (последнее сообщение на странице), Chicago1920 задал некую задачу. а после её решения Korwin-ом спросил: А как сделать его[алгоритм] универсальным? допустим пусть будет 100х100 клеток. (Главное прописать физ. свойства клеток). Плюс допустим ввести n-количество npc. Главное указать их координаты и направление движения. выкладываю некоторое приближение к решению: монстр пока всего один, но это легко исправимо. полей 8х8, но, как видно из проги в предыдущем сообщении, их кол-во не ограничено. буду благодарен за любые рекомендации по упрощению алгоритма. да, тем, кто в консоль пускает не часто: у меня монитор ЖК "20, и я, запуская досурковское приложение в свойствах(левый верхний угол окна/свойства) давно настроил шрифт Luicida Console, размер 28. выглядит- отлично! тем, у кого монитор поменьше, могу порекомендовать шрифт поменьше, или какой-нибудь из точечных шрифтов. пользуйтесь значками разворачивания окна(справа сверху). для 15" и меньше- полноэкранный режим. итак, вот прога: ; монстр в лабиринте ; УТОЧНЕНИЕ: n монстров в лабиринте 100х100(?) клеточек :генератор invkill perkill maxxr = 8 ; кол-во комнат по горизонтали maxyr = 8 ; кол-во комнат по вертикали maxx = maxxr*2+1 ; кол-во ячеек(комнаты+стены/проходы) по горизонтали maxy = maxyr*2+1 ; кол-во ячеек по горизонтали crx=0 ; переменные- счётчики :цикл1_x crx=crx+1 cry=0 :цикл1_y cry=cry+1 world_#crx$_#cry$ = 1 ; заполняем мир if cry<maxy then goto цикл1_y if crx<maxx then goto цикл1_x maxap=1 ; кол-во активных точек x1=2*rnd#maxxr$ ; координаты первой активной точки y1=2*rnd#maxyr$ ; точки всегда указывают на комнаты world_#x1$_#y1$=2 ; создаём первую пустую комнату :генератор_выбор_точки t=rnd#maxap$ ; выбираем текущую активную точку crn=0 ; счётчик направлений пробива dir1=0 & dir2=0 & dir3=0 & dir4=0 if world_#x#t$ $_#y#t$ -2$= 1 then crn=crn+1 & dir1=1; пробив возможен: север if world_#x#t$ -2$_#y#t$ $= 1 then crn=crn+1 & dir2=1; запад if world_#x#t$ $_#y#t$ +2$= 1 then crn=crn+1 & dir3=1; юг if world_#x#t$ +2$_#y#t$ $= 1 then crn=crn+1 & dir4=1; восток if crn>0 then dir=rnd#crn$ & goto пробиватор if crn=0 then x#t$= x#maxap$ & y#t$= y#maxap$ & maxap=maxap-1 ; гасим точку if maxap>0 then goto генератор_выбор_точки if maxap=0 then goto начало end :пробиватор ndir=0 if dir1=1 then ndir=ndir+1 if dir=ndir then goto пробив1 if dir2=1 then ndir=ndir+1 if dir=ndir then goto пробив2 if dir3=1 then ndir=ndir+1 if dir=ndir then goto пробив3 if dir4=1 then ndir=ndir+1 if dir=ndir then goto пробив4 end :пробив1 world_#x#t$ $_#y#t$ -1$=2 & world_#x#t$ $_#y#t$ -2$=2 ; пробиваем проход и делаем комнату maxap=maxap+1 ; добавляем новую активную точку x#maxap$=x#t$ ; указывающую на эту комнату y#maxap$=y#t$-2 goto генератор_выбор_точки end :пробив2 world_#x#t$ -1$_#y#t$ $=2 & world_#x#t$ -2$_#y#t$ $=2 maxap=maxap+1 ; добавляем новую активную точку x#maxap$=x#t$-2 ; указывающую на эту комнату y#maxap$=y#t$ goto генератор_выбор_точки end :пробив3 world_#x#t$ $_#y#t$ +1$=2 & world_#x#t$ $_#y#t$ +2$=2 maxap=maxap+1 ; добавляем новую активную точку x#maxap$=x#t$ ; указывающую на эту комнату y#maxap$=y#t$+2 goto генератор_выбор_точки end :пробив4 world_#x#t$ +1$_#y#t$ $=2 & world_#x#t$ +2$_#y#t$ $=2 ; пробиваем проход и делаем комнату maxap=maxap+1 ; добавляем новую активную точку x#maxap$=x#t$+2 ; указывающую на эту комнату y#maxap$=y#t$ goto генератор_выбор_точки end :начало ggrx= 2 & ggry= 7 & instr ggface= север ggx=ggrx*2 & ggy=ggry*2 instr letters= a b c d e f g h tokens letters instr w1= стена instr w2= выход instr ситуац= /в тупике/на прямом пути/на повороте/на развилке/на перекрёстке/ :начало_метка_1 pln pln я- монстр. стою в комнате #%token#ggrx$$#9-ggry$, мордой на #%ggface$. pln на севере- #%w#world_#ggx$_#ggy-1$$$, на западе- #%w#world_#ggx-1$_#ggy$$$, на юге- #%w#world_#ggx$_#ggy+1$$$, на востоке- #%w#world_#ggx+1$_#ggy$$$. crn=0 dir1=0 & dir2=0 & dir3=0 & dir4=0 if world_#ggx$_#ggy-1$= 2 then crn=crn+1 & dir1=1; выход: север if world_#ggx-1$_#ggy$= 2 then crn=crn+1 & dir2=1; выход: запад if world_#ggx$_#ggy+1$= 2 then crn=crn+1 & dir3=1; выход: юг if world_#ggx+1$_#ggy$= 2 then crn=crn+1 & dir4=1; выход: восток if crn=1 then ситуац = "в тупике" & goto м_назад ; идём в единств возм сторону ; на момент начала игры монстр может оказаться в тупике лицом в любую сторону if (crn=2)and(dir1=dir3) then ситуац = "на прямом пути" & goto м_дальше ; идём куда угодно, Только НЕ назад ; монстр теоретически может оказаться на прямом пути лицом к стене на момент начала игры if (crn=2)and(dir1<>dir3) then ситуац = "на повороте" & goto м_дальше ; идём куда угодно, Только НЕ назад if crn=3 then ситуац = "на развилке" & goto м_дальше ; идём куда угодно, Только НЕ назад if crn=4 then ситуац = "на перекрёстке" & goto м_дальше ; идём куда угодно, Только НЕ назад : начало_метка_2 pln так что я нахожусь #%ситуац$, и пойду теперь на #%ggface$ ; перемещаем монстра: if ggface="север" then ggry=ggry-1 & ggy=ggy-2 if ggface="запад" then ggrx=ggrx-1 & ggx=ggx-2 if ggface="юг" then ggry=ggry+1 & ggy=ggy+2 if ggface="восток" then ggrx=ggrx+1 & ggx=ggx+2 btn начало_метка_1, press ENTER end :м_назад if dir1=1 then ggface="север" if dir2=1 then ggface="запад" if dir3=1 then ggface="юг" if dir4=1 then ggface="восток" goto начало_метка_2 end :м_дальше crn=crn-1 ; отбрасываем одно направление (назад) dir = rnd#crn$ if ((dir<=1)and(not(ggface="юг" )))and(dir1=1) then ggface="север" & goto начало_метка_2 if ((dir<=2)and(not(ggface="восток")))and(dir2=1) then ggface="запад" & goto начало_метка_2 if ((dir<=3)and(not(ggface="север" )))and(dir3=1) then ggface="юг" & goto начало_метка_2 if ((dir<=4)and(not(ggface="запад" )))and(dir4=1) then ggface="восток" & goto начало_метка_2 end

noname: опс! пойман баг: 1) монстр на развилках никогда не шёл на восток //в 'правильном' варианте монстр случайными блужданиями в конце-концов обойдёт все комнаты лабиринта. преймущества этого метода перед правилом левой руки можно рассмотреть на примере лабиринта, предложенного Чикагой по ссылке см выше. предполагаем, что мелков/ниток/камешков для отмечания пути у монстра нет, тогда это- самый лучший метод. 2) почему-то предыдущий пример не шёл на fireurq //причина 2-го бага пока не ясна. выкладываю обезбаженный и идущий на fireurq вариант (только несколько пробелов подряд почему-то заменяются на 1-н. но тут уж я ни при чём- это что-то на сайте): ; исправлен баг поведения: раньше на развилках никогда не шёл на восток ; не выводить стены, только выходы :генератор invkill perkill maxxr = 8 ; кол-во комнат по горизонтали maxyr = 8 ; кол-во комнат по вертикали maxx = maxxr*2+1 ; кол-во ячеек(комнаты+стены/проходы) по горизонтали maxy = maxyr*2+1 ; кол-во ячеек по горизонтали crx=0 ; переменные- счётчики :цикл1_x crx=crx+1 cry=0 :цикл1_y cry=cry+1 world_#crx$_#cry$ = 1 ; заполняем мир if cry<maxy then goto цикл1_y if crx<maxx then goto цикл1_x maxap=1 ; кол-во активных точек x1=2*rnd#maxxr$ ; координаты первой активной точки y1=2*rnd#maxyr$ ; точки всегда указывают на комнаты world_#x1$_#y1$=2 ; создаём первую пустую комнату :генератор_выбор_точки t=rnd#maxap$ ; выбираем текущую активную точку crn=0 ; счётчик направлений пробива dir1=0 & dir2=0 & dir3=0 & dir4=0 if world_#x#t$ $_#y#t$ -2$= 1 then crn=crn+1 & dir1=1; пробив возможен: север if world_#x#t$ -2$_#y#t$ $= 1 then crn=crn+1 & dir2=1; запад if world_#x#t$ $_#y#t$ +2$= 1 then crn=crn+1 & dir3=1; юг if world_#x#t$ +2$_#y#t$ $= 1 then crn=crn+1 & dir4=1; восток if crn>0 then dir=rnd#crn$ & goto пробиватор if crn=0 then x#t$= x#maxap$ & y#t$= y#maxap$ & maxap=maxap-1 ; гасим точку if maxap>0 then goto генератор_выбор_точки if maxap=0 then goto начало end :пробиватор ndir=0 if dir1=1 then ndir=ndir+1 if dir=ndir then goto пробив1 if dir2=1 then ndir=ndir+1 if dir=ndir then goto пробив2 if dir3=1 then ndir=ndir+1 if dir=ndir then goto пробив3 if dir4=1 then ndir=ndir+1 if dir=ndir then goto пробив4 end :пробив1 world_#x#t$ $_#y#t$ -1$=2 & world_#x#t$ $_#y#t$ -2$=2 ; пробиваем проход и делаем комнату maxap=maxap+1 ; добавляем новую активную точку x#maxap$=x#t$ ; указывающую на эту комнату y#maxap$=y#t$-2 goto генератор_выбор_точки end :пробив2 world_#x#t$ -1$_#y#t$ $=2 & world_#x#t$ -2$_#y#t$ $=2 maxap=maxap+1 ; добавляем новую активную точку x#maxap$=x#t$-2 ; указывающую на эту комнату y#maxap$=y#t$ goto генератор_выбор_точки end :пробив3 world_#x#t$ $_#y#t$ +1$=2 & world_#x#t$ $_#y#t$ +2$=2 maxap=maxap+1 ; добавляем новую активную точку x#maxap$=x#t$ ; указывающую на эту комнату y#maxap$=y#t$+2 goto генератор_выбор_точки end :пробив4 world_#x#t$ +1$_#y#t$ $=2 & world_#x#t$ +2$_#y#t$ $=2 ; пробиваем проход и делаем комнату maxap=maxap+1 ; добавляем новую активную точку x#maxap$=x#t$+2 ; указывающую на эту комнату y#maxap$=y#t$ goto генератор_выбор_точки end :начало ggrx= 2 & ggry= 7 & instr ggface= север ggx=ggrx*2 & ggy=ggry*2 instr letters= a b c d e f g h tokens letters instr w1= стена instr w2= выход instr ситуац= /в тупике/на прямом пути/на повороте/на развилке/на перекрёстке/ :начало_метка_1 pln pln я- монстр. стою в комнате #%token#ggrx$$#9-ggry$, мордой на #%ggface$. pln на севере- #%w#world_#ggx$_#ggy-1$$$, на западе- #%w#world_#ggx-1$_#ggy$$$, на юге- #%w#world_#ggx$_#ggy+1$$$, на востоке- #%w#world_#ggx+1$_#ggy$$$. crn=0 dir1=0 & dir2=0 & dir3=0 & dir4=0 if world_#ggx$_#ggy-1$= 2 then crn=crn+1 & dir1=1; выход: север if world_#ggx-1$_#ggy$= 2 then crn=crn+1 & dir2=1; выход: запад if world_#ggx$_#ggy+1$= 2 then crn=crn+1 & dir3=1; выход: юг if world_#ggx+1$_#ggy$= 2 then crn=crn+1 & dir4=1; выход: восток if crn=1 then ситуац = "в тупике" & goto м_назад ; идём в единств возм сторону ; на момент начала игры монстр может оказаться в тупике лицом в любую сторону if (crn=2)and(dir1=dir3) then ситуац = "на прямом пути" & goto м_дальше ; идём куда угодно, Только НЕ назад ; монстр теоретически может оказаться на прямом пути лицом к стене на момент начала игры if (crn=2)and(dir1<>dir3) then ситуац = "на повороте" & goto м_дальше ; идём куда угодно, Только НЕ назад if crn=3 then ситуац = "на развилке" & goto м_дальше ; идём куда угодно, Только НЕ назад if crn=4 then ситуац = "на перекрёстке" & goto м_дальше ; идём куда угодно, Только НЕ назад :начало_метка_2 pln так что я нахожусь #%ситуац$, и пойду теперь на #%ggface$ ; перемещаем монстра: if ggface="север" then ggry=ggry-1 & ggy=ggy-2 if ggface="запад" then ggrx=ggrx-1 & ggx=ggx-2 if ggface="юг" then ggry=ggry+1 & ggy=ggy+2 if ggface="восток" then ggrx=ggrx+1 & ggx=ggx+2 btn начало_метка_1, press ENTER end :м_назад if dir1=1 then ggface="север" if dir2=1 then ggface="запад" if dir3=1 then ggface="юг" if dir4=1 then ggface="восток" goto начало_метка_2 end :м_дальше crn=crn-1 ; отбрасываем одно направление (назад) и получаем кол-во допускаемых алгоритмом выходов dir = rnd#crn$ ; выбираем номер допустимого выхода, в который выйдем ndir=0 if (dir1=1)and(not(ggface="юг" )) then ndir=ndir+1 if dir=ndir then ggface="север" & goto начало_метка_2 if (dir2=1)and(not(ggface="восток")) then ndir=ndir+1 if dir=ndir then ggface="запад" & goto начало_метка_2 if (dir3=1)and(not(ggface="север" )) then ndir=ndir+1 if dir=ndir then ggface="юг" & goto начало_метка_2 if (dir4=1)and(not(ggface="запад" )) then ndir=ndir+1 if dir=ndir then ggface="восток" & goto начало_метка_2 end

noname: вернёмся к началу. вначале темы http://urq.borda.ru/?1-0-0-00000231-000-0-0-1229450475 был выложен код, который так никогда и не был запущен. под файрурку код выглядит так: :инициализация // начало инициализации 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 btn идёт_куда(поле#актёр#игрок$место$_се), пойти на север if поле#актёр#игрок$место$_за <> 0 then btn идёт_куда(поле#актёр#игрок$место$_за), пойти на запад if поле#актёр#игрок$место$_юг <> 0 then btn идёт_куда(поле#актёр#игрок$место$_юг), пойти на юг if поле#актёр#игрок$место$_во <> 0 then btn идёт_куда(поле#актёр#игрок$место$_во), пойти на восток btn ГЛАВНАЯ_ЛОКАЦИЯ, ждать end :идёт_куда актёр#игрок$место = идёт_куда_1 goto ГЛАВНАЯ_ЛОКАЦИЯ end --- более продвинутый пример (где можно ещё и брать/выкладывать шмотки) переделывать не буду. это был тупиковый путь. очередная идея ЖИМ пока в процессе созревания, хотя ясно, что в ближайшие годы ничего интереснее тупого поведения тупых монстров я от ЖИМ не добьюсь... UPD ОПС! ошибка! щаззз исправлю... UPD щазз всё нормально. поначалу напрягло постоянное присутствие долбанного мудреца, но потом сообразил, что это- ГГ и есть. т е ты(игрок) сам и есть он(мудрец), который задан в переменной игрок(=2). так что это- не ошибка. ошибка исправлена. UPD да, и ещё одно необходимое пояснение: как правило, все свои проги я тестирую на dos_urq. и только на нём. но, выложенную в ЭТОМ сообщении прогу следует пускать под fireurq. надеюсь, автор привинтит ему нормальный интерфейс. UPD да, и в последней версии файрурки идёт пример с лабиринтом, который под неё не шёл.


qwerty: ЗИФ Второе название этого квеста, "Гоббит" - тоже что говорит непосвященным, но это в принципе та же избитая URQ-квестами тема: главный герой в легком беспамятстве после вчерашней гулянки и самое трудное - это привести свои мысли в порядок и понять, если не "ой, где был я вчера!" - то хотя бы "что вчера было-то?".Прикинь, я оказывается ещё многого не видел. Код содержит одну новинку- как раз для твоего ЖИМ. Надо бы почаще рыться на плуте. И на иф-вики. Можно многому научиться. Респект авторам!

Korwin: noname, спрашиваю разрешения использовать идеи твоего кода для своего квеста. Разумеется, с указанием авторства.

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

ASBer: Специально для noname

qwerty: спасибо :)

noname: почитал немного ( не всю тему прочёл :) из прочитанного можно выудить ( зауши притянуть) пару натянутых выводов: 1. людям нравится/хочется, чего-то типа первой Готики, но штоп человечки имели более разнообразное поведение ( хорошая задумка ) 2. они думают это реализовывать через имитацию физического мира и эволюции ( бред ) какая нафик в Готике физика? зло и однообразие тупизма неписей Готики не в скриптах- раз плюнуть создать бродягу, который будет лазить по всему миру и убегать от монстров. НО такого не делают. каждый персонаж строго ограничен в своём поведении. почему- ? да просто потому, что таков подход к реализации игрушек- во внутренней документации бывает перечисленно всё, вплоть до(для игр попроще) всех возможных состояний игры. сделать, что бы неписи могли разбредаться по миру Готики совсем не сложно- скрипты простейшие далее: да, самый крутой интеллект в играх пока у Симсов. но мне Готика горааздо интереснее именно за счёт мира. смотрим на название их темы: 'Саморазвивающийся мир'. что бы сделать такой мир достаточно 'испортить' правила игры Конвея, и выпустить популяцию на большое поле. для бесконечных возможностей саморазвития понадобится бесконечно большой мир. (почему испортить? - да потому, что Конвей специально подбирал их так, чтоб популяция не могла бесконечно расти) вообще, тема модификации правил игры Конвея 'Жизнь' было бы интересно обсудить в отдельной теме. т е, что я хотел в этом абзаце сказать: сделать саморазвивающийся мир можно, и не слишком сложно делать 'настоящий' интеллект смысла никакого нет- вот у людей мозгов полно, а они ими не пользуются. так что скрипты рулят! как я представляю себе ЖИМ на последнем этапе реализации: это мир, состоящий из большого кол-ва объектов. поведение каждого объекта строго задано изначально, и довольно простое. НО нет никаких заранее заданных линий поведения(в T:00 просыпаемся, идём из точки X в точку Y), или специальных ограничений (за X=255 не заплывать!), НАОБОРОТ- скрипты будут ещё проще, но их ориентация будет другой. в результате получим большое кол-во простых объектов, взаимодействующих друг с другом, и реагирующих друг на друга, исходя только из значений каких-то свойств субъекта взаимодействия. т е для непися вообще все объекты на одно лицо, он работает лишь со свойствами // можно спросить/ можно взять и т п - это даже не свойства, а некий упрощённый их вариант специально для простоты обработки самое сложное в этом деле- сделать неписей умными. но этого особо-то и не надо. достаточно, что бы они были последовательными. ударил кого-то => ухудшились отношения => в следующий раз вероятность 'деструктивного' поведения по отношению именно к этому персонажу будет ещё выше, а 'поощряющего'- ниже. а стоило ли на кого-то наезжать, а другому доверять- это вопрос сложный, тут только уж очень крутой ИИ сможет переплюнуть обычого random. а что касается тупизны, то сделать непися, который всегда будет обыгрывать остальных в шахматы довольно просто- ставим ему навык 'интеллект' выше крыши, и готово: 'Вы сыграли партию с Непис-сан, и поразились мощи его интеллекта' тема сложная, интересная, но на геймдеве они вообще чё-та как-то куда-то пошли не то, чтобы не туда, а скорее даже сами не знают куда. а в данном случае важно представлять, что желаем получить в итоге- иначе можно кучу времени и сил истратить на гениальнейшую прогу, которая будет уметь только рисовать квадраты Малевича (фигурально говоря, образно выражаясь) надо бы когда-нить это дело продолжить...

fireton: Самая большая беда в недетерминированных моделях - как раз их недетерменированность. "Живой игровой мир" редко бывает интересным. На этом недавно здорово наелись создатели "Кризиса". На открытых пространствах там как раз "самоопределяющаяся система". С одной стороны прикольно, что могут возникать ситуации, никак не предусмотренные разработчиками (джип заехал на пандус, на него упало дерево, "срубленное" игроком, джип подбрасывает, он падает на дом, дом разрушается), но, с другой стороны, интересные ситуации возникают весьма нечасто (как и в реальном мире) и их тупо не хватает для поддержания интереса к игре. Мне лично намного милей хорошо прописанная и срежиссированная история. В этом смысле Call Of Duty 4: Modern Warfare выгодно отличается от того же Crysis. В текстовых квестах это еще более заметно, на мой взгляд. Заблудиться в тексте намного проще, чем на трехмерной карте.

Григорий: fireton пишет: интересные ситуации возникают весьма нечасто (как и в реальном мире) и их тупо не хватает для поддержания интереса к игре. Имхо рулит примерно такой подход - 20-30% игры срежиссировано, остальная часть "самоопределяющаяся". Так и интересных ситуаций будет достаточно, и будет достаточно высокий реплейабилити. Как в адоме.

ASBer: fireton пишет: Самая большая беда в недетерминированных моделях - как раз их недетерменированность. "Живой игровой мир" редко бывает интересным. Интересно было бы применить принцип из шахматных программ - на каждом ходу просчитывать дерево возможных вариантов развития событий, оценивать перспективность и интересность каждого варианта и выбирать самый интересный. Жалко что реализовать эту идею не на чем.

Nex: Григорий на мой взгляд, лучшее сочетание - Fallout.

Ajenta: Я согласна с noname'мом, лучше оставить разнообразие на стыковку или не стыковку параметров. И согласна, что хаотично меняющийся мир будет в лучшем случае неинтересен. А может ведь быть и такая ситуация - там завёлся дракон, неписи собрались и убили дракона, пока ты путешествовал в других местах. B много таких ситуаций, ведь мир живой, он не будет тебя ждать. В результате получаем везде не успевшего и всем недовольного пользователя. Нет, так тоже нельзя. Всё равно должна быть какая-то фиксированность.

ASBer: Ajenta пишет: неписи собрались и убили дракона, Надо чтоб неписи боялись дракона и сразу собирали все деньги и бежали героя звать на помощь

qwerty: "Живой игровой мир" редко бывает интересным да? и где можно посмотреть хоть один? конечно, лучше посмотреть те редкие, которые интересные, но вообще любой для ознакомления- было бы неплохо

noname: если считать живым игровым миром такой мир, который просто живёт по своим законам, не заботясь о том, в каком именно месте находится ГГ, и есть ли он вообще, то ещё в школе меня поразила игра BoulderDash. не как головоломка, а именно потому, что какждый уровень этой игры я представлял как некий замкнутый мир, живущий по своим законам. так, например кислота(в той версии это было кислотой) , расширяясь могла поглотить с равным успехом как ГГ, так и других обитателей. при этом эти самые 'другие обитатели' не гоняются целенаправленно за игроком, а следуют каждый своему простому алгоритму поведения. моё воображение будоражила идея построения подобного мира бо'льших размеров, с устранением некоторых его недостатков, главным из которых я считал необратимость многих процессов. самой лучшей виденной мной игрой на эту тему является Bettle Ju первым настоящим ЖИМ, с которым я столкнулся, был мир игры Конвея. несколько простых правил, и- производительность труда программистов во всём мире заметно снизилась из-за того, что они гоняли эту игрушку(это было, насколько я помню, в 70-х. я читал об этом наамного позже). хотя интересной её не назовёшь, но мне она много лет не давала покоя. сначала был интерес в построении конфигураций с необычным поведением. потом- в разработке собственных правил. я даже написал прогу, выводящую на поле 30х40 конфигурацию-цикл с максимальным периодом. для этого я применял генетический алгоритм. прогу, выводящую новые правила игры я так и не написал- слишком нереальные сроки потребовались бы ей для работы. а ведь нужно ещё и обкатать, отловить глюки вторым ЖИМ были, наверное Creatures. первые слегка разочаровали. умеют буржуи наобещать с три короба, а в результате- необычная игрушка, которая могла бы стать одной из моих любимых игр(если б я не читал рекламы), вместо этого здорово меня разочаровала третьим- космические рейнджеры 1,2. поскольку в этой игре уже есть сюжет, то проявились и некоторые сложности увязки ЖИМа с сюжетом: во-первых, обитатели этого мира могут справиться с клиссанами и без ГГ. кроме Махпеллы(её не трогают, видимо, из сюжетных соображений). в результате несчастный ГГ будет вынужден раскачать свой корабль для финальной битвы без вообще без боёв с клиссанами, что довольно муторно, если вообще возможно. ну, может возникнуть и обратная ситуация- ГГ может быть неинтересно оказаться в ситуации, когда всё почти захвачено клиссанами, и для ремонта и покупок ему придётся возвращаться постоянно в одни и те же места четвёртым, и последним, известным мне- Тургор. если бы в ней были полегче бои, и не приходилось бы выполнять многократно однообразных действий; короче- если бы вам захотелось пройти её несколько раз подряд, вы были бы поражены тому, насколько непохожей может быть одна игра на другую. отчасти, непохожесть вынужденная и зависит от того, какой цвет преобладает в начале, и ещё больше- от того, какие знаки вы соберёте. и это хорошо- не даёт игроку второй раз пройти по накатанным рельсам, пропустив мимо внимания другие варианты --- Oblivion жестоко обманул мои надежды. к сожалению, для нормального ЖИМ в нём нужно во-первых самому прописать персонажам соотв поведение, для чего имеющийся скриптовый язык мало подходит; во-вторых, если так сделать, то можно будет заметить, что просчитывается поведение далеко не всех персонажей. точных правил я не выяснил: может, просчитывается сектор с ГГ, и все соседние, или что-то в этом духе

Ajenta: qwerty пишет: да? и где можно посмотреть хоть один? конечно, лучше посмотреть те редкие, которые интересные, но вообще любой для ознакомления- было бы неплохо Наш мир Уберите все развлечения - кино, музыка, телевидение - вот скукотища-то получится. Вот так в играх лучше не делать. noname Вообще ни одной игрушки не видела с по-настоящему живым миром. Наверное мало играла, но мои представления об этом больше основаны на реальном мире и на воображении, чем на играх.

Ajenta: ASBer пишет: Надо чтоб неписи боялись дракона и сразу собирали все деньги и бежали героя звать на помощь (А это та самая фиксированность поведения, о которой я говорила.) Но как же? Они же живые, кто-то убегает, а кто-то тоже хочет драться с драконом!

ASBer: Ajenta пишет: А это та самая фиксированность поведения, о которой я говорила а абсолютной свободы нет и быть не может - есть жестокая реальность, которая ее ограничивает. Насколько бы мир небыл живым - он все равно создан для одного человека - Игрока.

Ajenta: ASBer пишет: а абсолютной свободы нет и быть не может - есть жестокая реальность, которая ее ограничивает. Насколько бы мир небыл живым - он все равно создан для одного человека - Игрока. Угу, и об этом никогда не стоит забывать.

qwerty: кажется, у меня хорошо получилось сформулировать идею ЖИМ: живой игровой мир- такой мир, который просто живёт по своим законам, не заботясь о том, кем конкретно из персонажей игры управляет игрок, и управляет ли он кем-нибудь вообще (при этом это может быть и походовая игра) насчёт саморазвивающегося мира: я думаю, что если ЖИМ будет состоять из большого кол-ва объектов, c хорошо продуманной системой взаимодействий, то эффекты самоорганизации будут неизбежны. с саморазвитием сложнее // тема ЖИМ интересуются ОЧЕНЬ многие (см последнее сообщение от noname). отсюда и берутся такие проекты, как GTA, Spores; тщательная проработка игрового мира в Oblivion и Fallaut3 (в ущерб сюжету). тянется народ к ЖИМ, и игроделы это знают

fireton: Да никто никуда не тянется. Игра должна быть интересной. Если недетерминированный мир интересный - то и игра интересная. Недетерминированность - инструмент, а не цель. "Живой игровой мир" ради "живого игрового мира" - вещь просто глупая.

Ajenta: fireton Полностью согласна. qwerty пишет: кажется, у меня хорошо получилось сформулировать идею ЖИМ: живой игровой мир- такой мир, который просто живёт по своим законам, не заботясь о том, кем конкретно из персонажей игры управляет игрок, и управляет ли он кем-нибудь вообще (при этом это может быть и походовая игра) А по мне так мир должен реагировать на каждое действие игрока - по своему, но реагировать - тогда он живой. А если мир будет жить независимо - скучно будет.

noname: fireton, суть в том, что интересна сама идея ЖИМ. так же, как некоторым интересны текстовые игры, или стрелялки. и бесполезно в теме на gamedev.ru, посвящённой обсуждению стрелялок повторять о том, что стрелялки могут быть неинтересны, или что игра не обязательно должна быть стрелялкой (так же, как и в теме о диалогах говорить о том, что игры могут быть и без диалогов) А по мне так мир должен реагировать на каждое действие игрока - по своему, но реагироватьэто называется интерактивностью. для большинства видов игр чем выше интерактивность- тем лучше. но есть так же и любители таких игр, в которых игрок только создаёт начальные условия, а потом- наблюдает за развитием мира. ЖИМ может быть как с высокой, так и с низкой интерактивностью- это не связанные понятия А если мир будет жить независимопредставьте себе такую (воображаемую и намеренно гипертрофированную) ситуацию: в какой-то теме некто выразил сомнение в том, что игры совсем без стрельбы могут быть интересными. некто другой привёл в качестве контр-довода популярность игры Sims(наиболее продаваемой игры в течении нескольких лет). после этого некто третий говорит: "А если игра будет совсем без стрельбы- скучно будет". что можно подумать об этом третьем? впрочем, ты права- перечисленные мной в предыдущем сообщ игры мне уже порядком надоели. с другой стороны, если делать такую игру, в которую самому автору будет интересно играть, то- какой она должна быть? наверное такой, в которой может появиться нечто, автором непредвиденное p.s. да, и не хотел никого задеть p.p.s. пора бы уже и куски кода выкладывать. идей пока никаких

Ajenta: noname пишет: пора бы уже и куски кода выкладывать. идей пока никаких Гммм, ну вообще-то я собиралась на куспе что-то такое наваять, но позже позже. Хотя твоя идея с монстриком мне понравилась.

qwerty: игра в тему(или- почти в тему?): http://ru.wikipedia.org/wiki/Dwarf_Fortress Прежде чем начать игру, необходимо создать мир. Его генерация занимает значительное количество времени, в среднем 5—15 минут на средней системе (Например, P IV 3000 создает мир около 7 минут). Это объяснимо: мир очень большой, с неслучайными локациями. Кроме того, должно пройти определенное количество лет существования мира, прежде чем в нём сможет появиться игрок. За это время персонажи мира рождаются и умирают, рожают детей, основывают новые города. В версии 0.27.173.38a добавлена имитация семейных отношений, взросление и смерть от возраста, рождение детей; в новой версии добавлена религия: каждый народ теперь имеет определённый пантеон богов, которым он поклоняется. В ближайших планах ввести войны между разными цивилизациями во время генерации мира, а потом — и в обычной игре

noname: что меня привлекает в ЖИМ?: --- 1. создание модели социума; хотя бы очень простой, но уже представляющей из себя взаимосвязанный механизм. зачем? а затем, что бы в этом мире можно было немного 'похулиганить': --- напр дать одному из персонажей(или ГГ) возможность становиться невидимым, и посмотреть, как он использует свою власть // так в книге Герберта Уэллса невидимка всерьёз собирался стать диктатором, что так же перекликается с притчей Платона о Гиге- честном пастухе, которого 'развратило' обладание кольцом невидимости, и который даже захватил трон Лидии --- но дело, естественно, НЕ в невидимости, а в том, чтбы вносить какие-то разные 'помехи' в работу саморегулирующегося механизма, И наблюдать его работу в этих условиях 2. возможность самовозникновения в ЖИМ чего-то такого, что будет неожиданным для самого автора. трудно сказать, что это может быть. скорее всего- какие-то оригинальные способы завоевания соседей, которые будут практиковаться отдельными кланами; или- странные взаимоотношения, которые установятся м/ду группой кланов в процессе поиска своих ниш выживания пожалуй, если наменьшей неделимой единицей моделируемого мира будут предметы и персонажи, то саморазвитие возможно только в плане усложнения их отношений => развитие кланов и пр социальных групп и формирований; для моделирования эволюции самих персонажей пришлось бы создавать их из большого набора частей со сложными взаимосвязями 3. возможность просто наблюдать развитие модели. напр проработать разнообразные варианты развития планет в мире наподобие мира Космических Рейнджеров; а затем- наблюдать за развитием их экономики и её регулярными, но разнообразными кризисами // особенно интересно было бы ввести для каждой из 5-ти цивилизаций свою валюту, а затем наблюдать за изменением курсов, в зависимости от различных событий --- ну, а пока я на ЖИМ надёжно забил. самое ближайшее, что я могу сделать, и что представляет для меня интерес, это- находить и наблюдать процессы самоорганизации в 'эволюции' клеточных автоматов ( наподобии Конвеевской игры 'жизнь' : http://ru.wikipedia.org/wiki/%D0%98%D0%B3%D1%80%D0%B0_%D0%B6%D0%B8%D0%B7%D0%BD%D1%8C )

Korwin: Перечитал всю тему. Есть идеи. В том смысле, что 1. FireURQ дает новые возможности - параметры в кнопке. 2. Есть идея как живой мир "запихнуть" в сюжет...

qwerty: http://www.ludomancy.com/games/StoryTeller.html вариантов развития событий больше, чем может показаться на первый взгляд. и на второй.

Eten: noname пишет: третьим- космические рейнджеры 1,2. поскольку в этой игре уже есть сюжет, то проявились и некоторые сложности увязки ЖИМа с сюжетом: во-первых, обитатели этого мира могут справиться с клиссанами и без ГГ. кроме Махпеллы(её не трогают, видимо, из сюжетных соображений). в результате несчастный ГГ будет вынужден раскачать свой корабль для финальной битвы без вообще без боёв с клиссанами, что довольно муторно, если вообще возможно. ну, может возникнуть и обратная ситуация- ГГ может быть неинтересно оказаться в ситуации, когда всё почти захвачено клиссанами, и для ремонта и покупок ему придётся возвращаться постоянно в одни и те же места noname, уж не знаю, с какой целью ты в них играл. Но все в КР обставленно так, что мир хоть и живет своей жизнью без вмешательства игрока, но он остается не изменным. Т.е. сколько неписи клисан с доминаторами не гоняют, столько они и отхапывают у неписей в другом месте. Только выглядит все это гармонично и создает ощущение живости этого мира. Т.к. здесь ставка на сюжет больше. Но говорить, что неписи справятся без ГГ, это значит не сыграть в самый сложный уровень сложности в КР 2. У меня лично ни разу не получалось, а вот там-то реализм довольно суровый, доминаторы прямо напасть какая-то! А насчет ситуации с драконом и жителями. Хм, в КР получилось так же, кто-то уносит ноги, а кто-то сражается до смерти! ИМХО, почти ЖИМ у создателей КР получился именно таким, каким ему и стоит быть. (достаточно хорошенько в играться и уже забываешь, что непись это непись) При этом все это, осущевствимо и в текстовой игре. З.Ы. Стоит понимать, для чего вы используете ЖИМ в своей игре.

noname: необычная игрушка: http://www.eyezmaze.com/eyezblog_en/blog/2005/09/grow_cube.html#more наберитесь терпения при загрузке)) смысл в том, что бы выкладывать предметы(выбирая на панелях в левой и правой части окна), эти предметы взаимодействуют друг с другом, и во взаимодействии- развиваются. смысл игры в том, чтобы добиться максимального развития всех предметов(уровень развития каждого показывают по окончании игры). выбор игрока заключается в порядке использования предметов. там же есть и другие игры из этой серии- слева. обратите внимание на список 'My Favorites', в котором находятся 7-мь избранных игр этого типа.

Dark[Ol(U23)leneri]: http://lib.ru/INOFANT/SILVERBERG/basileus.txt

noname: Русскоязычный ЖИМ: http://themosk.narod.ru/drakensdaad.htm Это не игра - поэтому тут нет сюжета, события не кружатся вокруг главного героя. Более того, главного героя тут вообще нет. Все герои равноправны и могут делать что угодно в рамках модели. Вы можете зайти в модель кем угодно из персонажей города, временно позаимствовав его тело. ... выполнено на экселе. чтобы играть, разрешите исполняться макросам.

qwerty: вначале этой темы есть прога генерации лабиринта с бродячим монстром в нём, который имеет какой-то простой ИИ. и вот я набросал другую небольшую игрушку с простенькими ИИ и дабы не открывать под такую мелочь отдельной темы, решил положить её сюда. немного об игре: как вы думаете, чем будет заниматься большинство ныне живущих людей после зомби-апокалипсиса? искать свежие мозги! предлагаю вашему вниманию игру на эту тему: "Весёлая охота до 13 мозгов!". эта игра является упрощённой версией настольной игры в кости "Zombie Dice". без проблем можно было бы сделать и полную версию, но пока- влом. саму игру в формате *.qsz можно скачать здесь: http://yadi.sk/d/9j_9TjIq4dcCX

Ajenta: noname пишет: noname пишет: Перечитал всю тему. Есть идеи. В том смысле, что 1. FireURQ дает новые возможности - параметры в кнопке. 2. Есть идея как живой мир "запихнуть" в сюжет... Мне кажется, всё-таки мир не должен быть совершенно живым и независимым. А вот несколько "оживлённый" мир игре не помешает, если это бродилка или рпг. Иллюзия жизни...

Farfignugen: Я пытался и пытаюсь решить подобную задачу на qsp. Лично мне эта задача интересна как раз из за построения живого мира, а не из за создания интересной игры. На данном этапе я уже вижу что это возможно, но если нпс будет мало. Например в моей игрушке при 100 нпс играть невозможно из за тормозов. При 60 еще терпимо, хотя тормоза есть. Все телодвижения нпс обрабатываются при помощи циклов, и чем больше действий нужно обрабатывать, тем больше нужно циклов, и привет тормоза. Выхода из этой проблемы я не вижу. Ну не возможно сложить слово вечность из букв й, х, у

kerber: Однако, учитывается ли в ЖИМ эффект взаимодействия нпс друг с другом? Ну, что-то вроде chainreaction. Было бы забавно.

noname: kerber пишет: Однако, учитывается ли в ЖИМ эффект взаимодействия нпс друг с другом? Ну, что-то вроде chainreaction. Было бы забавно. разумеется, в ЖИМ неписи должны уметь взаимодействовать друг с другом. без этого просто не будет ЖИМ.

qwerty: и противники идеи живого игрового мира и, надеюсь, его сторонники тоже, понимают, что сам по себе ЖИМ не интересен как игра. в теме была рекомендация брать ЖИМ за основу мира и вносить 30% сюжета ( в этом случае весь ЖИМ можно автогенерить), но есть ещё и такой момент: чтобы описать приключения человека в городе с миллионным населением, вовсе не зачем моделировать миллион жителей. автор вполне способен продумать варианты выборов и их последствия самостоятельно. и описать соответствующие сцены. точно так же, если предполагается, что в каком-то мире с большим количеством обитателей должны наблюдаться какие-то сложные процессы, то всё, вплоть до постепенного развития социального устройства, возможно сделать без всякого ЖИМ*, а с ЖИМ- вряд ли удастся такое сделать, а даже если какой-то гений на супер-компе и сделает, то это вряд ли будет наглядным. то есть- для игр, в которых важен сюжет, история или важно показать идею(пусть даже эта идея- живой мир), ЖИМ- как рыбке зонтик. возможно, ЖИМ можно попробовать пригрутить к стрелялке или к рогалику.. в последнем случае как раз легко можно позволить игроку наблюдать результаты каких-то взаимодействий неписей. там это может быть спорным. но что касается именно РИЛ, то тут и спорить не о чем- РИЛе ЖИМ не нужен. (кроме того большой автогенерённый мир с элементами "живого мира" может быть интересен как фон для многопользовательской игры). --- *- что-то подобное, например, показал Азимов в своём цикле "Основатели".

Prime: Ну насчёт бесполезности ЖМ в интерактивной литературе я не совсем согласен. Конечно, в одноконцовочных квестах с более менее жёсткой сюжетной линией, чрезмерное увлечение самостоятельно действующими персонажами может только навредить игре. Если же создавать по-настоящему большую и разнообразную по вариантам действий игру, то ЖМ - неплохое и интересное средство. Но в любом случае необходимость "живых" квестов в жанре ИЛ - это вопрос дисскуссионный. Безусловно, интерактивные литературные произведения могут существовать и без ЖМ. Другое дело - различные симуляторы или, как сказал в предыдущем сообщении qwerty, стрелялки. Вообще у меня была концепция "псевдо-игры", где игроку и вовсе не следовало выполнять никаких действий, а надо было просто следить за практически полностью рандомным развитием событий. Это естественно уже перегиб жм-овской палки (на урке делаются всё-таки не текстовые постановки, а текстовые игры), но такой эксперимент был для меня интересен именно возможностью увидеть живой игровой мир в чистом виде. Так что я бы не был так категоричен в отношении ЖМ, в том числе и в рамках РИЛ. Можно, к примеру, с его помощью изобразить работу в команде, выполняющей определённую задачу (возможно каждый участник - разными способами). Ну а для альтернативных квестовых жанров живой мир - очень важная деталь, которая возможно когда-нибудь станет и вовсе незаменимой.

qwerty: про генерацию лабиринтов: http://gcup.ru/forum/7-30888-1

qwerty: есть такой анимэ-сериал "Кайдзи"(Ultimate Survivor Kaiji). в основе сериала- что-то очень отдалённо напоминающее примитивнейшую коллекционную карточную игру; но гораздо более напоминающее игру "камень-ножницы-бумага" )) сама идея зацепила, но конкретная реализация провоцирует на размышления о том, как можно было сделать аниме логичнее. ещё засада в том, что переводчик не всегда внятно передаёт смысл рассуждений. приходится додумывать. к чему я об этом здесь: ЖИМ- это не обязательно просторы и города населённые персонажами. сотня персонажей, пытающихся выжить в игре подобно тому как показано в сериале Кайдзи- вполне себе ЖИМ. в игре существует богатое разнообразие возможностей(включая торговлю, мухлёж, сговор и предательство). игровая ситуация состоит из имеющихся у игроков ресурсов и каждый пытается вертеться по-своему. на такой идее могло бы получиться что-то вроде особой разновидности рогалика без стен и без оружия. полностью на социальных взаимодействиях. опять же- это получилась бы такая игра, которая идёт своим чередом, не заботясь о развлечении игрока. но кому-нибудь может быть интересен такой стиль. к сожалению, у меня не получается детально продумать, как это можно было бы годно реализовать. я бы сделал так, что игрок(и все персонажи) как бы находятся в отдельных маленьких комнатушках с компьютером и запертой бронированной дверью. с помощью компьютера игроки могут отслеживать всякую текущую статистику, а так же находить собеседников и всячески взаимодействовать. гибкую систему общения я бы организовал через продажу разнообразных взятых на себя обязательств, в которых должен быть указан штраф в случае невыполнения обязательства. самым сложным остаётся хороший(подходящий для такой игры) ИИ. пожалуй, в первый день персонажи должны бы следовать простым стратегиям(случайной стратегии или стратегии баланса), а с каждым днём интеллект каждого из выживших персонажей повышается с вероятностью 20%. более высокий интеллект означает следование более продвинутой стратегии.

Korwin: http://gcup.ru/forum/83-45288-1 - В тему? ;-)

qwerty: Интерактивное повествование: Использование разумных cистем



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