RU

"QSP: Экран" — модуль для работы с экраном

Olegus t.Gl. #12 18.05.2011 15:44 13 comments 14031 views

Перечень операторов платформы QSP для работы с экраном основного описания ограничен очисткой, выводом и получением всего содержимого. Данный модуль расширяет этот функционал, добавляя возможность (в html-режиме) манипулировать отдельными областями экрана, не затрагивая остальные.

Ранее я выкладывал наброски подобного — теперь это полноценный модуль.

Текущая версия: 1.1 (скачать)
Документация on-line: http://ifiction.ru/h/otg_lib_screen_help.html

Пример работы с модулем:

!Выводим на экран текст, содержащий область, которую мы хотим менять.
*P '<b>Данные:</b><region id="data"></region>'

!Прописываем в область текст "Данных нет"
GS 'Экран.Установить', 'data', 'Данных нет'

После выполнения данного кода содержимое экрана будет такое:

<b>Данные:</b><region id="data">Данных нет</region>

Вопросы и комментарии можно оставлять как здесь, так и в основной теме модуля.

Edited at 24.05.2011 16:09 (14 years ago)

Что же, вещь весьма хорошая. Олегусу большой респект :) Пригодится как-нибудь в будущем.

Подход, развиваемый употреблением этого “модуля”, вреден!

Генерировать текст динамически - верно и надежно.
Сгенерировать текст один раз и потом “подправлять” его - неверно, чревато багами.

“Модуль” провоцирует авторов поступать по второму варианту, и усугубляет порочную практику.

Правильный способ для динамического формирования текста в QSP:

Описание выводим в коде “при посещении”.

*P 'Вы на кухне.'
IF роджер=1: ' Здесь находится Роджер.' ELSE ' Кроме вас, здесь никого нет.'

Приводить простейший пример реализации игрового процесса и говорить, что это единственно правильный путь, — как-то некорректно. Я не утверждаю, что весь вывод на экран необходимо пускать через этот модуль, однако в некоторых ситуациях это удобно.

Я набросал ещё одну небольшую демку (скриншот), где использовал базовые возможности модуля. Никакой порочности и резкого увеличения вероятности возникновения багов я, при её написании, не увидел.

В подтверждение же твоих слов (о порочности, ненадёжности и вредности) было бы интересно увидеть вариант реализации подобной игры с помощью лишь базового функционала QSP.

Olegus t.Gl.,
во-первых, я специально отметил, что вреден не сам “модуль”, а развиваемая им порочная привычка обновлять описание кусками “по событию”, вместо старой доброй динамической генерации текста.
Попытайся осмыслить разницу.

Именно поэтому, во-вторых, ты не сможешь увидеть плоды использования такого подхода сразу же. А вот при регулярном использовании, косяки дадут о себе знать. При этом не забудь, что новички, которых ты можешь повести за собой по этой гиблой тропке, не обладают багажом программерского опыта, соразмерным твоему. Поэтому там, где ты накосячишь, заметишь свой косяк и исправишь, они либо оставят за собой баги, либо застрянут надолго, пытаясь их выловить.

Порочная практика обновлять описание “кусками” - близкий родственник привычки к использованию DELACT, о вреде которой я не так давно писал. Совсем недавно в игре “Окей, я согласен!” вскрылся очередной баг, к которому такая привычка привела.

Ну и в-третьих, неужели ты всерьез считаешь, что без твоего модуля, на одной лишь динамической генерации текста, эту “игру” нельзя сделать?

в некоторых ситуациях это удобно

Чесать подбородок револьвером тоже “в некоторых ситуациях удобно”, но это слишком опасно, чтобы позволять себе к этому привыкнуть.

Nex:

во-первых, я специально отметил, что вреден не сам “модуль”, а развиваемая им порочная привычка обновлять описание кусками “по событию”, вместо старой доброй динамической генерации текста.
Попытайся осмыслить разницу.

Именно поэтому, во-вторых, ты не сможешь увидеть плоды использования такого подхода сразу же. А вот при регулярном использовании, косяки дадут о себе знать. При этом не забудь, что новички, которых ты можешь повести за собой по этой гиблой тропке, не обладают багажом программерского опыта, соразмерным твоему. Поэтому там, где ты накосячишь, заметишь свой косяк и исправишь, они либо оставят за собой баги, либо застрянут надолго, пытаясь их выловить.

Развитие компьютеров привело к тому, что многие программисты для отлова ошибок вместо того, чтобы хорошенько подумать над кодом, по сто раз сохраняют, компилируют и запускают свои программы (а что? сохраняется и загружается быстро, компилируется тоже). Но это не повод, чтобы говорить людям, что для наработки навыков правильнее пользоваться старыми компьютерами и использовать медленные носители информации.

И я никого не веду за собой. Я делюсь средством, которое в некоторых ситуациях использовать удобнее, чем штатные функции. Если человек пользуется этим средством неправильно, то это проблема конкретно этого человека, а вовсе не повод бойкотировать само средство.

Nex:

Ну и в-третьих, неужели ты всерьез считаешь, что без твоего модуля, на одной лишь динамической генерации текста, эту “игру” нельзя сделать?

Дело не в том, что это “нельзя сделать”. Просто не исключено, что это будет менее удобно, а код — гораздо сложнее и запутаннее.

Nex:

в некоторых ситуациях это удобно

Чесать подбородок револьвером тоже “в некоторых ситуациях удобно”, но это слишком опасно, чтобы позволять себе к этому привыкнуть.

Чесать подбородок камнем куда безопаснее, но если говорить о поражении цели, — использование револьвера будет в большинстве случаев явно эффективнее.

Аналогия со старыми компьютерами высосана из пальца. Неверный подход, который ты приукрасил своим “модулем” - это не “прорыв технологий”, а всего лишь грабля новичка, к которой ты, благодаря своим навыкам программирования, приделал реактивный двигатель, вместо того, чтобы ее обойти.

И я никого не веду за собой

Лицемерие оставь на ификшене. Если ты выкладываешь модуль в открытый доступ, публикуешь его на форуме, то ты уже предлагаешь им пользоваться. А его использование как раз и поведет неопытных авторов за тобой в пучину отчаяния.

Если человек пользуется этим средством неправильно, то это проблема конкретно этого человека, а вовсе не повод бойкотировать само средство.

Если кто-то прострелит себе голову, почесывая подбородок револьвером, то ответственность за несчастный случай, в значительной степени лежит на том, кто его этому научил.

Чесать подбородок камнем куда безопаснее, но если говорить о поражении цели, — использование револьвера будет в большинстве случаев явно эффективнее.

См. начало сообщения.

Dark[Ol(U23)leneri] #34 19.05.2011 09:56 (14 years ago)

Nex:

Порочная практика обновлять описание “кусками” - близкий родственник привычки к использованию DELACT, о вреде которой я не так давно писал. Совсем недавно в игре “Окей, я согласен!” вскрылся очередной баг, к которому такая привычка привела.

Эта была моя первая игра, к тому писалась на скорость и про CLA я тогда не знал. ^^ харе обо мне упоминать.

Dark[Ol(U23)leneri],
не нужно этого стыдиться, на эту граблю наступил почти каждый, кто увлекался использованием DELACT.

Dark[Ol(U23)leneri] #34 19.05.2011 12:03 (14 years ago)

я не стыжусь, меня бесит, что к игре, которая написана для конкурса Вжж, обращено такое серьезное внимание как-будто это сверхпроект какой-то

Dark[Ol(U23)leneri],
так часто бывает, оценка автором своих творений часто сильно расходится с откликом аудитории.

Версия 1.1: Исправлена ошибка, возникающая при одновременном использовании на экране свыше 10 тегов <region>.
В файл с модулем добавлена демка “Сейф”.

Есть одна особенность. В случае если текст достаточно большой, что не влезает целиком на экран, то при любом обновлении скролинг прыгает в начала текста (или в конец, если отключить DISABLESCROLL).

Ntropy:

Есть одна особенность. В случае если текст достаточно большой, что не влезает целиком на экран, то при любом обновлении скролинг прыгает в начала текста (или в конец, если отключить DISABLESCROLL).

Разумеется.
Тут уж ничего, используя только внутренний язык QSP, сделать нельзя.

Log in or Register to post comments.