Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

  • Список
  •  » Quest Soft Player
  •  » Изменение синтаксиса QSP в части GS и func (текстовый редактор + vbs + txt2gam)

0    0    #1
19.12.2011 09:46

Olegus t.Gl.
Участник (+1053, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2879
Вебсайт

Изменение синтаксиса QSP в части GS и func (текстовый редактор + vbs + txt2gam)

Одной из любимых тем в части нападок на QSP является его синтаксис — видимо потому, что, как правило, с этим ничего нельзя поделать. Некоторые обходят это с помощью "препроцессинга" (см. заметку "Тем, кто применяет TXT2GAM (использование препроцессора)"), но по мне — это перебор.

Сразу оговорюсь, что любители QGen дальше могут не читать.

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

Модуль написан на VBScript и содержит следующую функцию:

Код:

Function ProcessCode (Code)
    ' Создаём объект для работы с регулярными выражениями
    Set RExp = CreateObject("VBScript.RegExp")
    RExp.Multiline=True
    RExp.Global=True
    '----------
    ' Заменяем <…FUNC(> на <func('FUNC',>
    RExp.Pattern="…([A-Za-zА-Яа-яЁё0-9_\-\.\{\}]*?)[\t|\x20]*\("
    Code=RExp.Replace(Code,"func('$1'§")
    '----------
    Code=Replace(Code,"§)",")")
    Code=Replace(Code,"§",",")
    '----------
    ' Заменяем <…PROC> на <GS 'PROC',>
    RExp.Pattern="…([A-Za-zА-Яа-яЁё0-9_\-\.\{\}]*?)[\t|\x20]*(,|&|$)"
    Code=RExp.Replace(Code,"GS '$1'$2")
    '----------
    ProcessCode=Code
End Function

Это даёт мне возможность избавиться в коде (ну кроме строковых участков кода для dynamic/dyneval) от конструкций <GS "процедура", параметры> и <func("функция", параметры)>.

Таким образом вместо кода:

Код:

GS 'ВывестиНаЭкран', 'ОписаниеЛокации'
Здоровье=func('ПолучитьСвойство', 'Игрок', 'Здоровье')

я пишу

Код:

…ВывестиНаЭкран, 'ОписаниеЛокации'
Здоровье=…ПолучитьСвойство('Игрок', 'Здоровье')

Для префикса конструкций я выбрал символ "…" потому что он не загромождает код, а с помощью клавиатурной раскладки Бирмана этот символ вызывается простой комбинацией.
Это удобно, и к тому же позволяет раскрасить вызываемые процедуры/функции в нужные цвета, что делает код более читаемым.

Как-то так.

Неактивен

0    0    #2
19.12.2011 21:19

Olegus t.Gl.
Участник (+1053, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2879
Вебсайт

Re: Изменение синтаксиса QSP в части GS и func (текстовый редактор + vbs + txt2gam)

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

Дольше всего думал над знаками-префиксами — в итоге остановился на © для строковых переменных (потому что как (с)трока) и ° для числовых (потому что как нолик). Мило, правда?

Это к тому же помогло ещё и раскрасить переменные в разные цвета. Что позволило мне получить вот такой образец импрессионизма:

https://ifiction.ru/i/scr/qsp-az-codecolors.png

Зимой, когда за окном пасмурно и сыро, это особенно актуально — посмотрим, как быстро глаза вытекут.

Неактивен

0    0    #3
19.12.2011 23:14

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

Re: Изменение синтаксиса QSP в части GS и func (текстовый редактор + vbs + txt2gam)

Это надо на обложку Адского Движка.

Неактивен

  • Список
  •  » Quest Soft Player
  •  » Изменение синтаксиса QSP в части GS и func (текстовый редактор + vbs + txt2gam)

Powered by PunBB
© copyright 2001–2024 iFiction.Ru