Конкурс парсерных игр на платформе QSP
Друзья! Как насчет того чтобы провести на сайте отдельный конкурс чисто на тему парсерных игр на платформе qsp? Все таки жанр интересный, не хочется чтобы он ушел в небытие, тем более что на qsp парсерных игр раз-два и обчелся. Может дадим толчок к развитию этого жанра?
А я хотел не совсем того.))) Но зачин хороший.
Вот если игрок напишет “взглянуть на картину” или “поглядеть на картину” или (в качестве извращения) “бросить взгляд на картину”? Хотелось бы, чтоб был в игре действительно парсер, а не список заданных команд, которые приходится угадывать.
Вот на что я хочу посмотреть. :P Да, я хочу конкурс ради удовлетворения этого меркантильного желания.
Не знаю, чем вам так неугодил qsp с парсерным вводом. Это реалезуется довольно легко и не нужно от вас никаких мучений. Вы пунто свичер свой отключите при игре и не дуйте губу.
Не раз говорил, что если слега постараться, можно сделать весьма интересные и сложные конструкции для работы на qsp не сильно парясь над кодом.
Если вы не пробавали разобратся в этом, это не значит, что это не работает. Ищите возможности и лазейки.
Мне очень жаль, что некоторые люди воспринимают в штыки новые идеи:)
Думаю, что конкурс будет интересным.
Учитесь работать с тем, что есть и будете удевлены результату:)
Вперед конкурсу!)
Aleks Versus:
Хотелось бы, чтоб был в игре действительно парсер, а не список заданных команд, которые приходится угадывать.
Все можно, но в таком случае без тестеров никак не обойтись, так как логика мышления у всех несколько разная :)
Svartberg невозможно реализовать хороший парсер на русском языке из-за особенностей самого языка. Это факт. Так или иначе парсер будет ограничен и игра будет представлять собой угадайку. Вот кому интересно будет играть в угадайку? Парсер любят из-за иллюзии свободы действия, которая исчезает в играх с плохим парсером. Парсеру нужен хороший код, некая база откликов. На QSP такой базы нет. То есть разработчику придется гнаться за двумя зайцами, разрабатывать эту самую базу и, собственно, игру на ней. Одна из работ будет неудачной - игра выйдет плохой. Неблагодарное занятие.
Mioirel дело говорит! Кусп не заточен под парсеры, у него нет базы откликов, как у того же информа и тадса. И придется с нуля прописывать много откликов на кучу команд. Вы представляете, сколько всего можно сделать с картиной, помимо оглядеть, осмотреть, взглянуть на нее, посмотреть на нее, окинуть взглядом, рассмотреть и т.п…? Можно еще снять, сжечь, уничтожить и сделать еще с ней всякое :))Потому что это парсер, и игрок хочет иллюзию свободы!
Svartberg:
Учитесь работать с тем, что есть и будете удевлены результату
А смысл? Петр Косых не советует всем и вся использовать одну платформу для разных задач, в том числе и его творение. Но выбирать ту платформу, которая лучше реализует задумку разработчика игры. Да, наверное, можно написать некий парсер на qsp, без сарказма и иронии говорю - мне будет интересно посмотреть. Но зачем писать парсер на платформе qsp именно ради использования самой платформы qsp…
Зачем рисовать картинку простым карандашом, когда есть фломастеры? :=D
Шутка юмора такой. Цветную картинку простым карандашом, конечно, не нарисуешь.
Вета,
для менюшных игр тоже приходится прописывать кучу действий, чтобы мало-мальски разнообразить геймплей. Но я вот, честно, не видел ни одной парсерной игры на русском (ни на тадсе, ни на информе, в том числе), где парсер понимал бы то, что ты говоришь. Все парсеры имеют жутко ограниченный набор лексем/морфем, собственные правила синтаксиса, которые надо учить прежде, чем поиграть в игру, и списки тех же самых команд, которые в менюшной игре можно представить, как несколько подряд открываемых меню. Всё это игры, которые не понимают девять из десяти слов, при этом не могут на основе известных лексем выстроить подходящую команду и предложить игроку.
Понятно, нам не увидеть прорывной парсерной игры на QSP, но я лично не видел таких игр и на других платформах (англоязычные игры не беру, я в них не играл из-за убогого знания английского).
P.S.: Парсерные игры создают не иллюзию свободы, а иллюзию свободы общения человека и игры. Всегда приятно, когда тебя понимают. Кажется Mioirel создал что-то такое без всякого парсера? “I”, если не ошибаюсь.
Игра Материк (”Mainland” в стиме) помогает игроку писать. Если глагол начинается со знакомых букв, игра дает варианты первого слова, как интерактивный словарь в телефонах. После первого слова идет ввод второго, которое может быть как существительным так и служебной части речи. И так до 5 элементов связного предложения.
Последующее слово игра тоже помогает игроку вариантами, но можно на них и не нажимать, а продолжать печать. Там возможны конструкции не только “осмотреть монету” но и “осмотреть монету /через/ увеличительное стеко”. Даже если в инвентаре есть платок, это не означает, что любая команда “протереть” будет использовать именно его.
Инвентарь там не в списке, а как в жизни, то есть нужно осмотреть себя, найдя карман, пошарить в нем, чтоб что-то достать и использовать потом уже минуя поиск содержимого. Можно снимать и одевать обувь и т.д. Ветер может задуть свечу, свечу можно зажечь спичками, а не просто “зажечь свечу (пофиг чем)”.
Aleks Versus:
Кажется Mioirel создал что-то такое без всякого парсера? “I”, если не ошибаюсь.
Алекс, где эта игра? Не нашел ни в каталоге, ни через профиль нашего друга Mioirel.
Wol4ik:
Инвентарь там не в списке, а как в жизни, то есть нужно осмотреть себя, найдя карман, пошарить в нем, чтоб что-то достать и использовать потом уже минуя поиск содержимого. Можно снимать и одевать обувь и т.д. Ветер может задуть свечу, свечу можно зажечь спичками, а не просто “зажечь свечу (пофиг чем)”.
И для любого действия необходимо его сначала запрограмировать. Ничего никогда не происходит, если это не заготовлено изначально. Даже генератор событий использует уже заранее заготовленные шаблоны. Это важно понимать.
Да, для удобство создания какой либо части удобно использовать более заточенные движки, но как правильно сказал Алекс:
Все парсеры имеют жутко ограниченный набор лексем/морфем, собственные правила синтаксиса, которые надо учить прежде, чем поиграть в игру…
Русский язык очень сложен, разнообразен и под него практически невозможно сделать “идиальную” парсер игру, просто потому, что человек может написать так, как ему вздумается.Использовать те слова, которые не были прописаны в коде.
Вета:
Вы представляете, сколько всего можно сделать с картиной, помимо оглядеть, осмотреть, взглянуть на нее, посмотреть на нее, окинуть взглядом, рассмотреть и т.п…?
Не думаю, что это так сложно добавить. Заведите многомерный массив и просто запихните в один из массивов схожие действия и проходитесь по данной базе при каждом выводе.
Это не так сложно, сколько разглагольствовать. Просто, кому-то это делать лень, а кто-то просто не знает как правильно сделать=)
Ничего невозможного нет и даже если Вы потратите пару часов на структурирование вашей собственной базы, вы не прогадаете, поскольку будете точно знать как она устроена и как можно будет быстро добавить или исправить необходимые функции.
НЕ в рамках разглагольствований
Чтобы что-то представить и продумать, мне нужно знать, правильно ли я понимаю о чем речь. У парсеров для конкурса на QSP можно сделать условно общие требования, превышать которые можно, но не обязательно. Имею ввиду начать с двусложного ввода (глагол+сущ.). Как и любое соревнование, конкурс вполне может быть не только стимулом некого появления в сообществе очередных новых оригинальных игр, но и состязанием в умении укладываться в ограничения. В хорошем конкурсе всегда есть доля эксперимента, не частных экспериментов авторов, а именно сам конкурс может что-то выявить, некую серьезную вещь, которой не было раньше.
То есть, предположим, что мы условились сделать на QSP парсеры при помощи многомерных массивов, как предложил наш друг Svartberg. Кому-то проще, кому-то сложнее, предлагаю усреднить и оставить этот двухчастный подход к анализу вводимого текста (глагол+сущ.).
У нас есть статическая часть сцены - с существительными из нее можно взаимодействовать при помощи “осмотреть” (при этом мы понимаем, что “осмотреть”, это переводится как “подойти и осмотреть”), так как просто “посмотреть” не нужно, ведь описание сцены это и есть одно большое “посмотреть” (с расстояния 1,2,100,1000… метров от ГГ).
У нас еще есть активные декорации, которые являются игровыми объектами, но мы не можем их прикарманить. Но
можем не только “осмотреть”. Например Колодец, Наковальная и подобные. С ними можно пытаться взаимодействоать, но продуктивно, только при помощи предметов условно-инвентаря.
Ну и, собственно, предметы. “осмотреть ведро”, “взять ведро”, “осмотреть верёвку”, “взять веревку”. Правда уже начинаются проблемы. Чтобы опустить ведро в колодец, нужно привязать веревку к ведру. И то и другое действие невозможно задать при помощи нашей условной двухчастной команды.
*Привязать *Веревку *К *Ведру.
*Опустить *Ведро *В *колодец.
Я пока не знаю как это можно реализовать.
Еще можно все довести до абсурда, почему бы и нет. Все эти манипуляции с предметами не только скучны, но и утомительны. Зачем печатать и ломать пальцы для простейших действий, когда можно навести мышку на любое существительное (бочка) и вызвать контекстное меню типа “осмотреть, пнуть, ударить и т.п.”. При выборе “ударить”, меню уточняется “ударить ногой, головой, животом, мечом, молотком”. Меч и молоток в меню появлятся только, если они есть у нас или валяются в зоне видимости. Это все просто выстраивается в единое предложение выводом, которое можно выполнить при помощи пункта “выполнить”. “Ударить Бочку Молотком (y/n)”. Просто этот связный текст сложной команды мы не набивали ручками, а накликали мышкой, что с того.
Но самое интересное начнется при попытке сделать-таки машину Тюринга, так как это имплицитно присутствует в парсерных играх. Движок притворяется, что понимает нашу речь. Итак
“…Вы очнулись от сильной пощечины, голова гудит, а картинка расплывается. Перед вашим взором незнакомое место, на вас гневно смотрит девушка вся в слезах.”
- Какого черта ты вытворяешь?!!!
И тут появляется окно ввода. Вот это настоящий парсер, а не виртуальный тетрис с предметами. При команде “осмотреть себя” мы получим краткое описание, но это же неизбежно отмерит очередной такт игрового времени. Девушка не будет ждать, пока вы осмотрите ее, себя, асфальт и т.п.
- Не прикидывайся идиотом! Я вызываю полицию
Вот тут и предстоит нам опробовать свои способности в парсерной игре, основанной на диалогах)))
Wol4ik:
Ну и, собственно, предметы. “осмотреть ведро”, “взять ведро”, “осмотреть верёвку”, “взять веревку”. Правда уже начинаются проблемы. Чтобы опустить ведро в колодец, нужно привязать веревку к ведру. И то и другое действие невозможно задать при помощи нашей условной двухчастной команды.
*Привязать *Веревку *К *Ведру.
*Опустить *Ведро *В *колодец.
Я вот как раз этим занимаюсь. Что могу сказать. Есть до безумия простой способ:
- Создай многомерные массивы с типами действий (простой пример ниже);
Spoiler
$DATA.ACT.word[’INSPECT’] = ‘осмотреть#посмотреть#взглянуть#оглядеть#рассмотреть#окинуть взором#изучить’
-
Привяжи выводимые данные из $USRTXT к регулярным выражениям (но не фиксированным!);
-
Сделай нарезку по отдельным словам и при каждом проходе проверяй находится ли данное слово в массиве с определенным типом действий;
-
При условии нахождения и определения действия - запомни их;
-
Проведи проверку ассоциаций действий с предметов; (проверку ассоциаций можно сделать с помощью разрешенных действий с предметом, при условии того, что данные действия прописаны в возможностях предмета);
-
Если есть разрешение на ту же привязку веревки к какому либо предмету, проведи повторную проверку для ведра и выяви есть ли доступное действие привязки по отношению к объекту;
-
Если данные совпадают, выполняй действие по удалению объектов взаимодействия и созданию нового предмета; (ВНИМАНИЕ! Не пользуйтесь встроенными функциями для предметов - они ужасны. Если нужна будет помощь по предметам, могу выслать исходники с системой инвентаря)
Повторять до достижения успеха)
Wol4ik:
Но самое интересное начнется при попытке сделать-таки машину Тюринга, так как это имплицитно присутствует в парсерных играх. Движок притворяется, что понимает нашу речь. Итак
“…Вы очнулись от сильной пощечины, голова гудит, а картинка расплывается. Перед вашим взором незнакомое место, на вас гневно смотрит девушка вся в слезах.”
- Какого черта ты вытворяешь?!!!
И тут появляется окно ввода. Вот это настоящий парсер, а не виртуальный тетрис с предметами. При команде “осмотреть себя” мы получим краткое описание, но это же неизбежно отмерит очередной такт игрового времени. Девушка не будет ждать, пока вы осмотрите ее, себя, асфальт и т.п.
- Не прикидывайся идиотом! Я вызываю полицию
Вот тут и предстоит нам опробовать свои способности в парсерной игре, основанной на диалогах)))
Тоже не вижу трудностей, при выполнении каких либо действий и отклике движка на выполненные действия, считать каждый запрос как отслеживаемое действие (как в пошаговых играх - сделал ход, пошла реакция на проделанный ход)
Если нужно привязать по времени, на qsp хорошо работает $COUNTER. (научитесь им только пользоваться, он очень полезен во многих делах)
))) я не об этом. В этом примере ситуация требует от ГГ не просто что-то осмотреть, скрафтить, разломать, поджечь, протереть, а прямую речь сказать, чтобы выйти из ситуации. При помощи ввода текста с клавиатуры, без подсказок, без предложенных вариантов. Чистый парсер.
На самом деле, если отойти в сторону от темы парсерных игр, было бы интересно сделать такую напряженную игру на менюшном управлении (где в выборе “действий” из меню были бы не только действия, но и фразы и даже мысли). И нельзя было бы выбрать что-то не потеряв или не видоизменив другие варианты с каждым игровым тактом, тем самым необратимо изменив и направление сюжета.
Svartberg:
- Создай многомерные массивы с типами действий (простой пример ниже); - Привяжи выводимые данные из $USRTXT к регулярным выражениям (но не фиксированным!); …
…
Спасибо, вот это мне пригодится.