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

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

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

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

Korwin: noname пишет: если бы милена была не ПОЧТИ а совсем совместима- я бы проверил на ней свою прогу. не смеши мои тапочки, дружище... задача установления полной совместимости является НЕТРИВИАЛЬНОЙ. Проще сразу писать на Милене, благо автор "жив" и работает над системой регулярно. Или уж тогда правда на QSP, где много действий на одной кнопке присутствуют изначально. Но QSP работает только с целыми числами - если это важно, то надо думать.

Борщевский: noname пишет: а что если в моём примере получится 90 кнопок, как досурка на это отреагирует? Я знаю как я на это отреагирую Если я увижу игру в которой 90 кнопок, я закрою ее сразу же, и больше никогда не буду даже пытаться в нее играть noname пишет: а то пишут милену, которая с ними совместима, она совместима никогда не будет, это даже теоретически невозможно, потому что досурка и акурка несовместимы между собой, а акурка еще и между версиями

noname: Korwin пишет: Спроси у Виктора его программу по конвертации xbtn в подпрограммы. такая прога или невозможна, или не сработает в моём случае. и где спросить Виктора? впрочем, я придумал, как выкрутиться из положения. обойдусь со скрипом без xbtn. уменя на подходе новый концепт - в старом слишком много проблем предвидится на горизонте. буду теперь изучать текстовый ввод и работу со строками. предполагаемая платформа- досурка. хотя, хорошо бы и QSP изучить...


noname: ознакомился с описанием QSP, и вот что я про него скажу: в отличие от урки это НЕ универсальный язык. в урке я могу смело игнорировать их инвентарь и неточное сравнение строк, которые, если я и буду использовать, то не так, как это предполагалось авторами. в QSP я не могу(ведь так?)игнорировать их систему добавления объектов и действий и писать всё по своему. почему это важно: я не терплю ограничений, так как из-за них на каком-то этапе окажется, что я не в состоянии реализовать очередной этап своего замысла. поэтому до урки я выбирал либо C++ либо Delphi. побаловавшись с уркой я понял, что некоторые вещи писать на ней быстрее и проще. При этом моё видение игрового мира таково, что RTADS меня не устроил (это было около полутора лет назад). в моём видении игрового мира персонажи не перемещаются по локациям. даже ГГ. они только думают, что перемещаются. такая иллюзия создаётся переменной "актёр#номер_актёра$_место", которая хранит предполагаемое местонахождение данного персонажа(аналогично и для других объектов). создание иллюзии игрового мира заключается в правильной обработке набора таких переменных каждого объекта. такой подход даёт максимальные возможности автору. вплоть до создания и удаления объектов, персонажей, локаций во время игры, как результат их взаимодействия.(например, если у пары рождается ребёнок- даём ему наугад имя из списка имён его пола, фамилию родителей и отчество, задаём некоторые отношения с родителями и его личные характеристики- и так может смениться сколь угодно много поколений).(или например игрок может редактировать игровой мир в процессе игры, пользуясь мастер-командами, как это делается в MUD-ах, а затем сохранить получившийся квест). когда я писал предыдущий пост, я склонялся к QSP, думая, что он похож на урку... я не могу сказать, что я определился с выбором языка окончательно, но повторюсь, что и RTADS недостаточно универсален для меня. хорошо бы изучить Милену... но есть ли на неё описание, и насколько она страдает багами?

noname: а ещё посты Guest и Борщевского мне не нравятся то ли своим духом антирекламы, то ли какой-то въедливой ехидцей... ну как-то не увидел я рыцарей РИЛ в сверкающих доспехах. в урк-сообществе общение как-то более приятно.

noname: вроде всё продумал, но жаль отказываться от самого начала моего второго примера. полюбуйтесь, как удобно использовать xbtn в этом куске программы: ... instr актёр6имя = Выносливый Пещерный Гном актёр6место = 33 актёр6сила = 4 актёр6ловкость = 3 актёр6вещей = 0 поле33_актёров = поле33_актёров+1 макс_актёров = 6; обязательно должен быть хотя бы один актёр // игрок pln Выбери своего персонажа: выбор =0 счётчик=0 :инициализация_метка_1 счётчик=счётчик+1 xbtn предварительный_выбор_игрока_локация,{выбор=#счётчик$},#%актёр#счётчик$имя$ if счётчик<макс_актёров then goto инициализация_метка_1 // завершение инициализации end ;------------------------------------------------ :предварительный_выбор_игрока_локация pln Твой выбор - #%актёр#выбор$имя$ pln Сила = #актёр#выбор$Сила$ pln Ловкость = #актёр#выбор$Ловкость$ btn окончательный_выбор_игрока_локация, играть этим персонажем xbtn инициализация_метка_1,{счётчик=0 & pln Выбери своего персонажа:}, вернуться в меню выбора end ;------------------------------------------------ :окончательный_выбор_игрока_локация игрок = выбор goto главная_локация end ;------------------------------------------------ ;************************************************ :главная_локация proc мотор_локация ; ходят все NPC proc отображение_локация goto ход_игрока_локация ; последний в очереди end ;************************************************ ... да, два удобных xbtn: коротко и ясно! ну ничего, мучиться буду не я, а игроки... да, и вот ещё что: ну сделай Victor переключение на русский! представь: скачал новый посетитель твою досурку, поиграл в игру про Таню Одел (Горафовская вроде бы), и раз- надо вводить текст по русски. что делать? вышел из игры, почитал тексты- ага, нужен unikbd. что можно сказать по этому поводу? даже если чел вкурсе, что такое unikbd и как его запустить под винду в батнике с игрой, всё равно его это напряжёт. а большинство после такой засады вообще забьёт на досурку. а мой игровой мир с текстовым вводом (делаю) напряжёт его ещё раз. и не раз.

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

Евгений: Можно использовать любой переключатель клавиатуры, начиная с keyrus( http://ru.wikipedia.org/wiki/KeyRus ). А если запускать игры в фаре, то там раскладка переключается вместе с виндовской. А ещё я как то написал для досурки декодер в кирилицу через аски коды и anykey. Правда, он не совсем корректен, но его даже использовали. Кажется, Корвин в своем "Джинне из машины".

Mioirel: Смелая задумка. Желаю успехов noname. Кстати, qsp достаточно универсален, и на нем в принципе можно реализовать текстовую игру любой сложности задумки. От cya до roguelike и “чистокровной парсерной if”.

noname: Евгений пишет: Можно использовать любой переключатель клавиатуры, начиная с keyrus Евгений пишет: А ещё я как то написал для досурки декодер в кирилицу через аски коды и anykey. Правда, он не совсем корректен, keyrus тоже несовсем корректен. давным-давно он подглючивал на 386-ых, но и сейчас я слыхал, с ним могут быть проблемы. Евгений пишет: А если запускать игры в фаре, то там раскладка переключается вместе с виндовской. хорошая новость! буду пробовать... вообще-то можно и винду так настроить, что б в дос-окне раскладка переключалась особыми клавишами, но там свои заморочки.

noname: Mioirel пишет: Кстати, qsp достаточно универсален, и на нем в принципе можно реализовать текстовую игру любой сложности задумки. От cya до roguelike и “чистокровной парсерной if”. когда я постнул (год - полтора назад) про трудности в реализации кой-чего на досурке, мне через час-два кинули ссылку на свежеиспечённый qwerty-bench-vic. что касается QSP, то с первого взгляда его описалово выглядит непривычно, а фэны QSP только расхваливают его и хвастаются хорошей технической поддержкой, но кода я не вижу. P.S. на RTADS тоже быстро отвечали на мои запросы, что очень приятно P.P.S. что мне нужно от QSP-мастера (если есть такой, заинтересованный в продвижении этого языка): код проги, в которой будет возможность перемещаться, брать/выкладывать предметы, игрок выбирает любого персонажа для игры, каждый персонаж на своём ходу выбирает любое из возможных действий (наугад с равной вероятностью) и выполняет его. у игрока столько же возможностей, сколько у любого другого персонажа (собственно игрока там и нет- есть номер управляемого им персонажа). только сравнив краткость и читаемость полученного кода с тем, что у меня получается на URQL я смогу оценить QSP, а заодно это будет хорошим пособием для изучения его языка.

noname: Mioirel пишет: Смелая задумка. Желаю успехов noname. пока что моя очередная моя задумка полностью описана в предыдущем посте. у меня там 6-ть персонажей, 9-ть локаций(3х3), предметы пока толком не сделал, но для тестинга их нужно штук 9-ть (а то один из персонажей может утащить их сразу 6-ть за раз). действительно смелая задумка. сейчас долблюсь с вводом игрока, а как доделаю- станет возможным доделать работу с предметами- тогда и выложу полный код.

Byte: noname пишет: в урке я могу смело игнорировать их инвентарь и неточное сравнение строк, которые, если я и буду использовать, то не так, как это предполагалось авторами. в QSP я не могу(ведь так?)игнорировать их систему добавления объектов и действий и писать всё по своему. Не понял, что ты имеешь в виду, но в куспе изначально "система добавления предметов и действий" реализована так, что ты можешь использовать это как угодно. Про "сравнение строк" - вообще без комментариев..

noname: что я могу ответить на все хвалебные статьи о QSP см в моём посте чуть выше: Отправлено: Сегодня 09:07. Заголовок: Mioirel пишет: Кста.. к этому мне нечего добавить. обещаю, что буду изучать QSP, но особого энтузиазма его описание не вызывает. пока склоняюсь к URQL. может сам когда-нибудь напишу на него интерпретатор под винду.

noname: Евгений пишет: А если запускать игры в фаре, то там раскладка переключается вместе с виндовской. эт правда... только, если из-под фара запустить досурку, то ей это переключение раскладки нипочём... а я тебе уже спасибо ляпнул. P.S. прошу проверять свои советы до того, как их постить- всяких непроверенных идей у меня у самого вагон. а я, блин с этим фаром времени хоть и мало потерял, но всё равно жалко. да ладно, пригодится мне Far ещё не раз- знатная программулина. P.P.S. unikbd.com должен лежать в одном архиве с досуркой, или хотя бы поблизости.

noname: читал в другой теме этого форума, что Акурка1.28pre1 нормально работает... слухи не подтвердились. то, что нормально прокатывало в pre6, первая не хавает. неправильно работает такой кусок кода: ... instr актёр6имя = Выносливый Пещерный Гном актёр6место = 33 актёр6сила = 4 актёр6ловкость = 3 актёр6вещей = 0 поле33_актёров = поле33_актёров+1 макс_актёров = 6; обязательно должен быть хотя бы один актёр ; игрок pln Выбери своего персонажа: выбор =0 счётчик=0 :инициализация_метка_1 счётчик=счётчик+1 xbtn предварительный_выбор_игрока_локация,{выбор=#счётчик$},#%актёр#счётчик$имя$ if счётчик<макс_актёров then goto инициализация_метка_1 ... вроде и xbtn отдельно работает и всё остальное, запускаю на pre6- выводит список персонажей, на pre1 - синтакс ерроры, а если обрубить остальную часть программы и дать кусок сначала досюда(см выше), то даёт одну кнопку с капчионом "0". может {выбор=#счётчик$} не так понимает? вобщем, плюнул я на Акурку. попробую доделать свой пример№2 на досурке, а затем начну свой интерпретатор URQL под винду. 100% совместимый с досуркой + некоторые доп возможности.

noname: прошу прощения, что засыпал вас постами. боюсь, из-за их обилия никто не будет их читать. но на следующий мой пост стоит обратить внимание. что я изменил в своём примере: (у меня был почти доделан 2-й пример, но не работал) переделал его концепт дважды расширил игровой мир и пару раз запутался в наполовину переделанной программе доделал обработку ввода игрока (простейший парсер) убрал пока все вещи и действия с ними (опустился до 1-го примера) оттестил прогу и убрал все баги (странности интерфейса- не баг!) и сейчас выложу его следующим постом. просьба: опишите, кто как запускает досовские квесты с русификатором я, блин, мучаюсь с keyrus.com, который виснет в Far-е и с VC, который не понимает длинных имён и вообще не любит мой большой винт. продолжу работу до полностью работающего примера№2 и подумаю, то ли писать пример№3, то ли интерпретатор URQL

noname: ;ex1pars.qst ;первый пример. парсерная версия ;------------------------------------------------ :инициализация_локация ; начало инициализации invkill perkill ; поля instr поле11вид = на яркой солнечной поляне поле11_се = 12; куда переход, если 0- перехода нет поле11_за = 0 поле11_юг = 0 поле11_во = 21 поле11актёров = 0 поле11вещей = 0 instr поле21вид = у красивого, освежающего водопада поле21_се = 22 поле21_за = 11 поле21_юг = 0 поле21_во = 31 поле21актёров = 0 поле21вещей = 0 instr поле31вид = на холме, покрытом множеством цветов поле31_се = 32 поле31_за = 21 поле31_юг = 0 поле31_во = 0 поле31актёров = 0 поле31вещей = 0 instr поле12вид = в лесу, наполненном весёлым щебетом поле12_се = 13 поле12_за = 0 поле12_юг = 11 поле12_во = 22 поле12актёров = 0 поле12вещей = 0 instr поле22вид = в удивительно прозрачном мелком ручейке поле22_се = 23 поле22_за = 12 поле22_юг = 21 поле22_во = 32 поле22актёров = 0 поле22вещей = 0 instr поле32вид = в лесу, устланном ароматными листьями поле32_се = 33 поле32_за = 22 поле32_юг = 31 поле32_во = 0 поле32актёров = 0 поле32вещей = 0 instr поле13вид = в уютном домике лесного эльфа поле13_се = 0 поле13_за = 0 поле13_юг = 12 поле13_во = 0 поле13актёров = 0 поле13вещей = 0 instr поле23вид = под отвесной величественной скалой поле23_се = 0 поле23_за = 0 поле23_юг = 22 поле23_во = 0 поле23актёров = 0 поле23вещей = 0 instr поле33вид = в богато украшенной гномьей пещере поле33_се = 0 поле33_за = 0 поле33_юг = 32 поле33_во = 0 поле33актёров = 0 поле33вещей = 0 макс_полей = 33;максимумы по горизонтали и по вертикали ;просматриваем прямоугольник от 11 до 33. он может и не весь быть заполнен локациями ;пришла в голову идея составлять таблицу переходов отдельным редактором, как в Adrift. ; актёры instr актёр1имя = Честный Галантный Рыцарь актёр1место = 12; номер поля актёр1сила = 5 актёр1ловкость = 6 актёр1вещей = 0 поле12_актёров = поле12_актёров+1 ; актёр добавлен instr актёр2имя = Умиротворённый Обаятельный Мудрец актёр2место = 21 актёр2сила = 2 актёр2ловкость = 1 актёр2вещей = 0 поле21_актёров = поле21_актёров+1 instr актёр3имя = Нежная Добрая Принцесса актёр3место = 32 актёр3сила = 1 актёр3ловкость = 2 актёр3вещей = 0 поле32_актёров = поле32_актёров+1 instr актёр4имя = Бесшабашный Развязный Дракон актёр4место = 22 актёр4сила = 6 актёр4ловкость = 5 актёр4вещей = 0 поле22_актёров = поле22_актёров+1 instr актёр5имя = Ловкий Лесной Эльф актёр5место = 13 актёр5сила = 3 актёр5ловкость = 4 актёр5вещей = 0 поле13_актёров = поле13_актёров+1 instr актёр6имя = Выносливый Пещерный Гном актёр6место = 33 актёр6сила = 4 актёр6ловкость = 3 актёр6вещей = 0 поле33_актёров = поле33_актёров+1 макс_актёров = 6; обязательно должен быть хотя бы один актёр ; игрок выбор = rnd#макс_актёров$ :инициализация_метка_1 goto предварительный_выбор_игрока_локация ; завершение инициализации end ;------------------------------------------------ :предварительный_выбор_игрока_локация выбор = выбор+rnd#макс_актёров-1$ ; выбираем любого персонажа, кроме того же самого if выбор>макс_актёров then выбор=выбор-макс_актёров pln Имя : #%актёр#выбор$имя$ pln Сила = #актёр#выбор$Сила$ pln Ловкость = #актёр#выбор$Ловкость$ btn окончательный_выбор_игрока_локация, играть этим персонажем btn инициализация_метка_1, выбрать другого персонажа btn выбор_персонажа_с_клавиатуры_локация, ввести имя персонажа end ;------------------------------------------------ :окончательный_выбор_игрока_локация игрок = выбор pln #%игрок$ goto главная_локация end ;------------------------------------------------ :выбор_персонажа_с_клавиатуры_локация instr name= input name выбор = 0 счётчик = 0 :выбор_персонажа_с_клавиатуры_метка_1 счётчик = счётчик+1 if name=актёр#счётчик$имя then выбор=счётчик if счётчик<макс_актёров then goto выбор_персонажа_с_клавиатуры_метка_1 ;в следующей строчке "выбор = rnd#макс_актёров$" добавлено, что бы следующий персонаж был выбран из всего списка с равной вероятностью (подумайте сами) if выбор=0 then pln нет такого персонажа в нашем мире & pln & выбор = rnd#макс_актёров$ & goto предварительный_выбор_игрока_локация else goto окончательный_выбор_игрока_локация end ;------------------------------------------------ ;************************************************ :главная_локация proc мотор_локация ; ходят все if (vvod="конец")or(vvod="end") then end else goto главная_локация end ;************************************************ ;------------------------------------------------ :мотор_локация ;начало движения чей_ход = 0 :мотор_метка_1 чей_ход = чей_ход+1 ;if (rnd12)>(актёр#чей_ход$ловкость+6) then goto мотор_метка_2; пропуск хода дел = 0 ;идти по направлению if поле#актёр#чей_ход$место$_се <> 0 then дел=дел+1 & дело#дел$="идти на" & арг1#дел$="север" if поле#актёр#чей_ход$место$_за <> 0 then дел=дел+1 & дело#дел$="идти на" & арг1#дел$="запад" if поле#актёр#чей_ход$место$_юг <> 0 then дел=дел+1 & дело#дел$="идти на" & арг1#дел$="юг" if поле#актёр#чей_ход$место$_во <> 0 then дел=дел+1 & дело#дел$="идти на" & арг1#дел$="восток" ;ждать - всегда доступное действие без аргументов (необходимо всегда иметь хотя бы одно доступное действие) дел=дел+1 & дело#дел$="ждать" ;взять предмет ;выложить предмет ;пускаем список на обработку if игрок = чей_ход then proc ввод_игрока_локация else proc ход_актёра_локация ;:мотор_метка_2 if чей_ход < макс_актёров then goto мотор_метка_1 ;конец всех действий end ;------------------------------------------------ :отображение_локация pln pln Вы #%поле#актёр#игрок$место$вид$ pln Здесь находятся: счётчик = 0 :отображение_метка_1 счётчик = счётчик + 1 if актёр#счётчик$место = актёр#игрок$место then pln - #%актёр#счётчик$имя$ if счётчик<макс_актёров then goto отображение_метка_1 end ;------------------------------------------------ :ход_актёра_локация выбор = rnd#дел$ if дело#выбор$="ждать" then proc ждать_актёр_локация if дело#выбор$="идти на" then proc идти_на_актёр_локация end ;------------------------------------------------ :ввод_игрока_локация instr vvod= proc отображение_локация ; игрок должен видеть текущую ситуацию pln pln Введите, что сделать: input vvod tokens vvod if token1="ждать" then proc ждать_игрок_локация if token1="идти" then proc идти_на_1_игрок_локация end ;------------------------------------------------ :ждать_актёр_локация if актёр#чей_ход$место = актёр#игрок$место then pln + #%актёр#чей_ход$имя$ чего-то ждёт end ;------------------------------------------------ :ждать_игрок_локация pln #%актёр#игрок$имя$ чего-то ждёт end ;------------------------------------------------ :идти_на_актёр_локация if актёр#чей_ход$место = актёр#игрок$место then pln + #%актёр#чей_ход$имя$ ушёл на #%арг1#выбор$$ if арг1#выбор$="север" then актёр#чей_ход$место = поле#актёр#чей_ход$место$_се if арг1#выбор$="запад" then актёр#чей_ход$место = поле#актёр#чей_ход$место$_за if арг1#выбор$="юг" then актёр#чей_ход$место = поле#актёр#чей_ход$место$_юг if арг1#выбор$="восток" then актёр#чей_ход$место = поле#актёр#чей_ход$место$_во if актёр#чей_ход$место = актёр#игрок$место then pln + вошёл #%актёр#чей_ход$имя$ end ;------------------------------------------------ :идти_на_1_игрок_локация if token2="на" then goto идти_на_2_игрок_локация end ;------------------------------------------------ :идти_на_2_игрок_локация pln #%актёр#игрок$имя$ ушёл на #%token3$ if (token3="север")and(поле#актёр#игрок$место$_се<>0) then актёр#игрок$место = поле#актёр#игрок$место$_се if (token3="запад")and(поле#актёр#игрок$место$_за<>0) then актёр#игрок$место = поле#актёр#игрок$место$_за if (token3="юг")and(поле#актёр#игрок$место$_юг<>0) then актёр#игрок$место = поле#актёр#игрок$место$_юг if (token3="восток")and(поле#актёр#игрок$место$_во<>0) then актёр#игрок$место = поле#актёр#игрок$место$_во pln и оказался #%поле#актёр#игрок$место$вид$ end

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

noname: кроме xbtn нужна ещё bpause, которая будет приостанавливать работу программы до выбора игроком btn . пример: :процедура pln ответьте ДА или НЕТ btn вложенная_процедура_да , да btn вложенная_процедура_нет, нет end такая ПРОЦЕДУРА невозможна в нынешней досурке (угадайте, что произойдёт?) а с кнопкой xbtn вместо вложенная_процедура_да и вложенная_процедура_нет можно было бы использовать одну и ту же процедуру. это удобно, если кол-во кнопок у нас меняется в зависимости от ситуации. работа над пример№2 по-любому затормозится: мне не нравится получающийся код- он должен быть более кратким и простым, буду думать над новым концептом.



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