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

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

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 пишет: А это та самая фиксированность поведения, о которой я говорила а абсолютной свободы нет и быть не может - есть жестокая реальность, которая ее ограничивает. Насколько бы мир небыл живым - он все равно создан для одного человека - Игрока.



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