Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
21.11.2007 23:43

Flint
Участник
Зарегистрирован: 06.09.2007
Сообщений: 148

---

Сложное управление актером

Здравствуйте, господа!

Подскажите мне, пожалуйста, реализуема ли на TADS следующая команда:
"попросить Тимофея отвлечь продавца".

Глагол "попросить" сейчас определяется так
modify askVerb
    verb = 'попросить'
;


Заранее спасибо.

Неактивен

0    0    #2
22.11.2007 06:10

uux
Участник (+887, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1625

Re: Сложное управление актером

В TADS-мануале совершенно точно есть именно такой пример - преобразование фразы "попросить актера сделать что-либо" в "актер, сделай что-либо", но прямо сейчас найти не смогу. Ищи где-то в главах, посвященных синтаксическому анализатору.

upd. См. в английском варианте мануала, глава 6 "The Parsing Sequence", , в разделе, посвященном функции preparseCmd. Вот текст примера (на английском):


Here’s a sample implementation of preparseCmd. This implementation converts commands
in the format “tell actor to command” to the standard TADS notation for these commands, “actor, command.”

  #pragma C+
  preparseCmd: function(cmd)
  {
    local i, tot, to_loc, actor, the_rest;

    tot = length(cmd);

    /* check to see if it starts with "tell" */
    if (tot > 3 && cmd[1] == 'tell')
    {
      /* see if there's a word "to" */
      for (i = 1, tot = length(cmd) ; i <= tot ; ++i)
      {
        if (cmd[i] == 'to')
          to_loc = i;
      }

      /* if there's a "to", convert the command */
      if (to_loc != nil && to_loc > 2)
      {
        /* find the parts before and after the 'to' */
        for (i = 2, actor = [] ; i < to_loc ; ++i)
          actor += cmd[i];
        for (the_rest = [], i = to_loc + 1 ; i <= tot ; ++i)
          the_rest += cmd[i];

        /* convert it to "actor, command" */
        return actor + ',' + the_rest;
      }
    }

    /* otherwise, process the command as normal */
    return true;
  }



Из русского мануала я его убрал, заменив на описание работы preparseCmd в RTADS.

Отредактировано uux (22.11.2007 09:40)

Неактивен

0    0    #3
25.11.2007 07:54

uux
Участник (+887, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1625

Re: Сложное управление актером

GrAndrey написал:

Теперь я знаю, что могу спокойно уйти на покой...

Главное, чтобы это знание не послужило руководством к (без)действию.wink

Неактивен

Powered by PunBB
© copyright 2001–2026 iFiction.Ru