Форум » » Парсер (синтаксический анализатор) на урке » Ответить

Парсер (синтаксический анализатор) на урке

Korwin: Вопросы, на один из которых я сам ответил отрицательно: 1. Можно ли на URQL сделать работающий парсер (т.е. текстовый ввод команд игрока), который бы: - нормально работал, уверенно распознавая не менее 25 (до 70 с синонимами) глаголов, до 300 существительных, предлоги, прилагательные и т.д; - позволял бы обогатить игру собственной инициативой игрока, не зажатого более в рамки меню; - не затруднял бы игрового процесса. 2. Нужно ли это делать. Ваше мнение?

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

der stein: сюжет... ...сюжет отходит на второй план... Ну почему же. Если делать хороший, качественный, продуманный квест, то сюжет может оказаться и на первом месте

Евгений: «позволял бы обогатить игру собственной инициативой игрока, не зажатого более в рамки меню» - Это все фикция :) Игрок зажат так же как и прежде... Просто в меню мы не будем писать таки бредовые варианты, как «взять луч» и т.д. :)

Korwin: Евгений пишет: цитатаЭто все фикция :) Игрок зажат так же как и прежде... Просто в меню мы не будем писать таки бредовые варианты, как «взять луч» и т.д. :) - в самую точку! Но парсер я все-таки сделаю - очень уж это интересно. Вот Евгений сделал - и утратил интерес :) Может быть, этим надо переболеть? :)


HIman: 1. Сделать можно всё! 1.1. инициативу не прибавит только что интуицию будет развивать 1.2. из-за плохой интуции у игрока, игровой процесс только усложнит. 2. Для менюшных квестов не нужно! 3. Чтобы игрок чувствовал себя комфортно и сухо, нужно в меню ставить простые естесственные команды, перейти+взять+поговорить+и.т.п. Отсальные дейсвия делаются на предметах (в QSP), вариант для URQ, появлением новых команд в зависимости от наличия/отсутствия предмета. На долю «парсера» хотя это уже не парсер будет остается вод кодов к сейфам, назывании паролей, набора номеров телефонов и т.п. Вот такое мое мнение :)

Korwin: HIman пишет: цитата1. Сделать можно всё! ... Попробуйте укусить локоть :) Или поднять себя за свои же волосы... HIman пишет: цитата1.1. инициативу не прибавит только что интуицию будет развивать Хоть что-то разовьется... HIman пишет: цитата1.2. из-за плохой интуции у игрока, игровой процесс только усложнит. Хмм... Так надо равняться не на узкие места. А то мы скатимся к видеоквестам, где думать практически совсем не надо... HIman пишет: цитата2. Для менюшных квестов не нужно! Парсер - это уже не менюшный квест. Главное преимущество текстового ввода - отсутствие заранее известного выбора. Он есть, разумеется, но об этих вариантах нужно догадаться... По крайней мере, развиваются: а) мозги; б)пальчики - что тоже не вредно для развития мозга... в) знание русского языка (при условии наличия таковых знаний у автора квеста (трудно догадаться ввести команду «ПАЛОЖИТЬ МЕЧЬ НА КАМИНЬ») HIman пишет: цитата3. Чтобы игрок чувствовал себя комфортно и сухо, нужно в меню ставить простые естесственные команды, перейти+взять+поговорить+и.т.п. Отсальные дейсвия делаются на предметах (в QSP), вариант для URQ, появлением новых команд в зависимости от наличия/отсутствия предмета. На долю «парсера» хотя это уже не парсер будет остается вод кодов к сейфам, назывании паролей, набора номеров телефонов и т.п. Вот такое мое мнение :) - ХОРОШИЙ ВАРИАНТ КВЕСТА... НО СЕЙЧАС РЕЧЬ НЕ О ТОМ НЕМНОГО...

Saruman: Ну так чем там дело кончилось? С этим Вашим парсером? Или все как всегда - одни разговоры...

Дженни: Скажу по секрету - кое что готовится к зимней олимпиаде именно по-этой теме... Но: Тсс!

Капитан Блуд: Сделать парсер очень легко. Для этого достаточно одного дня. :) Чтоб сделать хороший парсер, да еще и русского языка нужно потратить очень очень много времени. Скорее всего на это уйдут годы. Korwin пишет: По крайней мере, развиваются: а) мозги; Бред. При примерно одинаковом количестве затраченного на паззл количства времени програмиста, паззл не должен и не будет решаться быстрее или легче в менюшной игре. Если конечно это не паззл типа "угадай слово", что есть плохо, надеюсь не надо объяснять почему. Разница между менюшными и парсерными паззлами только в том, что на программирование менюшных тратят минуты, а на программирование парсерных дни (хороших парсерных паззлов конечно, можно написать парсерный паззл за 15 минут, но запоминаются не такие). Миф о том что парсерные игры проще парсерных, связан думаю с тем, что они непопулярны на западе (что понятно - английский язык намного проще русского и написать хороший парсер не так сложно). Японцы и китайцы почемуто пока не пишут для своих игр парсеры, и вроде никто не жалуется. А парсер на японском или китайском языке, это не менее дико чем парсер на русском (насколько я знаю, русский считается вторым по сложности языком в мире, после японского). Korwin пишет: б)пальчики - что тоже не вредно для развития мозга... С этим не поспоришь. :) Korwin пишет: в) знание русского языка (при условии наличия таковых знаний у автора квеста (трудно догадаться ввести команду «ПАЛОЖИТЬ МЕЧЬ НА КАМИНЬ») Вообще-то хороший парсер такую команду должен понять и правильно обработать. В крайнем случае переспросить - "на камень или на камин?". В парсере игры Валгалла, которая была написана на бейсике(!) для Спектрума 48кб(!) в 1984 году (!) команды типа "tak swod" или "tke sord" понимались. Да, там был достаточно маленький словарь. Но там была графика, а мы не в 84м году, и у нас нет ограничения в 48 килобайт. Если ты хочешь сделать еще один парсер в стиле "угадай слово" (такое впечатление создается), так это никому не надо. Кстати чем не устраивает парсер в тадсах? Да он неидеален, но чтоб сделать лучше нужно очень очень много времени. Выучить тадс даже с нуля, даже не програмисту и довести его до ума думаю проще. Кстати подход, что тадс мол сложно, я свой парсер напишу, почемуто часто очень встречается - хотя какой парсер может написать человек неспособный разобраться даже с тадсом? Какой-то может. Я тоже могу написать парсер за час. Только в эту игру невозможно будет играть. ЗЫ: Свой парсер я тоже делал. И не один. Переболел

VampirE: Есть же готовый RTADS, зачем на урке делать парсер? Хотя, если чисто из спортивного интереса, то можно. )

][ломидоманад: VampirE Можно начать. Можно даже сделать. Но так, чтобы он был по крайней мере не хуже, чем тот же тадсовский (не говоря уж, допустим, об инфокомовском) - почти нереально. Во всяком случае, одному человеку, работающему на собственном энтузиазме. Если бы вот, скажем, Абрамович вложился в URQ, то таких парсеров, наверно, сразу десяток бы появился:).

Belial : и рухнул бы наш маленький, уютный мирок :(

GHOST: Где Все Друг Друга знают.

Korwin: ][ломидоманад пишет: Можно начать. Можно даже сделать. Но так, чтобы он был по крайней мере не хуже, чем тот же тадсовский (не говоря уж, допустим, об инфокомовском) - почти нереально. Во всяком случае, одному человеку, работающему на собственном энтузиазме. Стоп! 1. А сколько надо человек, работающих на собственном энутзиазме, чтобы сделать хороший парсер? 2. А что такое хороший парсер? Может для игры достаточно удобного? Работающего по определенным соглашениям? А то правда, всегда найдется тип, который сел не играть, а парсер испытывать и состроив мудрёную фразу: "Лихо плюнуть в левый глаз правой головы Змей Горыныча и быстро-быстро убежать, закрывая спину мифриловым щитом!" - убедятся, что парсер ее не понимает, и скажут - "фиговая игра". Может достаточно, чтобы парсер понимал: 1. Общепринятые сокращения из одного слова/буквы (и - инвентарь, с-север, ю-юг, в-восток, з-запад, п-повтор пред.команды, о-осмотреться и т.п.); 2. Первым словом - глагол в неопределенной форме или повелительном наклонении (искать, ищи) - и выдавала ошибку ("не вижу здесь знакомого глагола") если первое слово не входит в список сокращений или известных глаголов; 3. Прочие слова - после глагола - являлись бы объектом на который направлено действие. "Взять зеленую палочку" - правильно, "Подцепить зеленую палочку крючком" - неправильно. 4. Допускаем, что запятые=точке=точке с запятой=союзу и и могут применяться только для разделения действий в одном предложении как-то "взять меч и стукнуть стражника"="Взять меч. Ударить гвардейца." 5. Для того, чтобы оперировать с несколькими объектами вводим понятие "предмета инвентаря в руках". Т.е. в вышеприведенном примере "взять меч" - мы "активируем объект меч в руках" - стукнуть стражника понимается как "стукнуть стражника мечом" (а не пальцами по носу) 6. Осталось добавить что при отсутсвии глагола во втором предложении он берется из первого и оп-ля - пригодный к работе парсер готов! ("Взять ягодку и гриб"="взять ягодку. взять гриб.") Всё это вполне можно сделать на урке... только занят я.

][ломидоманад: Korwin пишет: 1. А сколько надо человек, работающих на собственном энутзиазме, чтобы сделать хороший парсер? Несколько. Два-три по крайней мере, чтобы подгонять друг друга и отвечать за разные стороны работы. Один, например, занимается анализатором, другой словарем, а третий - падежными формами, склонением и т.п. А в идеале кто-нибудь еще все это и контролирует. Плюс нужны еще тестеры, но с этим проблем, думаю, не возникнет. А то правда, всегда найдется тип, который сел не играть, а парсер испытывать и состроив мудрёную фразу: "Лихо плюнуть в левый глаз правой головы Змей Горыныча и быстро-быстро убежать, закрывая спину мифриловым щитом!" - убедятся, что парсер ее не понимает, и скажут - "фиговая игра". А что, если бы парсер понимал такое предложение, это было бы недостатком?))) К программе "минимум" от себя могу добавить механизм уточнения: >>Осмотреть замок Готический замок или замок на воротах? И третий пункт убрать бы... так сделать сложнее, но, если бы "подцепить палку крючком" понималось и обрабатывалось (так же, как, например "убить гоблина дубиной" и "убить гоблина из пистолета" - разница-то есть), это было бы идеально.

Korwin: ][ломидоманад пишет: "Лихо плюнуть в левый глаз правой головы Змей Горыныча и быстро-быстро убежать, закрывая спину мифриловым щитом!" ... А что, если бы парсер понимал такое предложение, это было бы недостатком?))) И как-это игрок должен догадаться плюнуть именно в левый глаз правой головы? :) Мы игру делать собираемся или же отрабатывать систему распознавания речи? Вторая задача - могу Вас заверить вполне компетентно, гораздо сложнее. ][ломидоманад пишет: К программе "минимум" от себя могу добавить механизм уточнения: >>Осмотреть замок Готический замок или замок на воротах? Угу. Это надо. Но это ж опять RTADS получается! ][ломидоманад пишет: И третий пункт убрать бы... так сделать сложнее, но, если бы "подцепить палку крючком" понималось и обрабатывалось (так же, как, например "убить гоблина дубиной" и "убить гоблина из пистолета" - разница-то есть), это было бы идеально. Ну так см. п.5 Взять пистолет. Убить гоблина. - вроде несложно?

Капитан Блуд: Korwin пишет: Всё это вполне можно сделать на урке... только занят я. Можно и на урке. Можно на бейсике. Можно даже в бат файлах такое написать. Вопрос только зачем? Korwin пишет: Угу. Это надо. Но это ж опять RTADS получается! Можно вопрос? Чем всетаки РТАДС не устраивает? Что ты так упорно защищаешь идею заведомо худшего парсера? Я тут поиграл в игру Белиала про расхитительницу варенья. Все тексты локаций написаны здорово, это мне понравилось, но... играть я в это немогу. Впрочем довести до ума игру можно, если потратить на доводку еще часов 10-15, что кстати совсем немного для парсерной игры. :) Дальше будет спойлер, кто хочет в это играть не читайте! [Warning, spoiler ahead] Скажу только что я 15 минут угадывал какой командой надо пролезть под кроватью. И не угадал. Хотя что именно это надо делать, было както сначала очевидно (просто других вариантов у меня не было). Правильным ответом было (не уверен что это так пишется - я посмотрел в коде, но в игре не проверял)... "лечь на пол". В игре нет ни нормального хелпа, ни системы подсказок, ни элементарно списка всех понимаемых ей слов... Не хочу я играть в такую игру. Я лучше пойду допройду Vespers или перепройду All Roads. [end of spoiler] При всех недостатках РТАДС у него есть 2 достоинства. Первое - это лучший парсер русского языка на сегодняшний день, сравнимых с ним нет и что-то лучшее напишут только после того как рак на горе свистнет, а Вик сделает гуй. Второе - при всех его недостатках, после 2-3 игр привыкаешь к тому что парсер понимает и что нет, и проблемы с парсером сводятся к минимуму. И я искренне считаю что человек знакомый с основами програмирования, читая английский мануал (а не тот что гранд сотоварищи на русский перевели меньше половины), может разобраться с РТАДС за 2-3 дня, после чего писать на нем значительно проще чем на урке. Правда буржуи почемуто считают, что для этого нужен месяц.

Korwin: Капитан Блуд пишет: какой командой надо пролезть под кроватью. И не угадал. Хотя что именно это надо делать, было както сначала очевидно Ну что сказать? Я застрял на том же самом месте. Искал обходные пути... Но потом угадал :) за 1 минуту. (Возможно, дело в том, что когда-то я начинал с ZX - а там было много квестов, где требовалось именно угадать слово - я не утверждаю что это хорошо). Однако попытка написать на этой платформе что-то свое - несмотря на очень дружественную помощь со стороны Belial, убедила меня в том, что RTADS - всё таки лучше... и примеров там больше, и специалистов...

][ломидоманад: Korwin пишет: RTADS - всё таки лучше... и примеров там больше, и специалистов... Потому и лучше, что примеров создано много и специалистов набралась толпа. Именно то, чего не хватает урке. Имхо. А что касается RTADSа, то да, он хорош, хотя и не совершенен. Но создано ведь МОРЕ англоязычных движков, многие из которых адаптированы и под другие языки. Почему не может быть такого разнообразия в русскоязычном IF? Адаптировать сложно, это понятно, такой уж язык у нас... но значит надо создавать?.. (Это не призыв к действию, а просто конечный пункт моих рассуждений).

Ultrafox: Ребят, а подскажите, как правильно командую строку сделать? А то поднадоели мне эти варианты действий. Как-то с ними слишком легко получается. Хочу, чтобы как в старых добрых – пишешь «открой дверь», он и открывает. На URQ я таких игр что-то не встречал, а сам додуматься не могу.

Акела: вик, предлагаю создать тред "для новичков" и перенести подобные вопросы туда Ultrafox, urq - менюшная платформа, а не парсерная. Т.е. расчитана именно на "варианты действий", хотя есть некоторые инструменты для работы со строками, к примеру: input <переменная> - ввести строку в переменную. ну а потом можно использовать "==" и "=". (if x=="*пароль*" then ... итд)



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