Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
29.12.2007 20:21

Eten
Участник (+9, -307)
Откуда: Балаково, Санкт-Петербург.
Зарегистрирован: 21.05.2007
Сообщений: 1416
Вебсайт

---

Тэги и команды языка СТК в LasoftGame

В общем у моего проекта уже нарисовалась полная и систематизированная база языка. Статью можете прочитать на моем сайте. Хотелось бы, чтобы вы прочитали и нашли не точности, а то сам уже 25 раз прочитал, вроде бы все в порядке. Как говорится, со стороны проще увидеть не точности, чем самому. wink
З.Ы.
На период сессии, будут доводить документацию до конца, а потом продолжу дальше всю реализацию проекта. tongue

Неактивен

0    0    #2
29.12.2007 23:36

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Тэги и команды языка СТК в LasoftGame

Помнится, ты делал свою платформу, как простую альтернативу сложным платформам типа TADS. Скажу честно, пролистав статью и взглянув на определение актёра мне кажется, что TADS куда проще и понятнее.

Неактивен

0    0    #3
30.12.2007 14:04

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Тэги и команды языка СТК в LasoftGame

Eten написал:

Т.о., человек, мало знакомый с алгоритмом и ООП, будет намного проще воспринимать весь квест

Я так понимаю, наследования у тебя не предвидится?

ООП ведь придумали не для того, чтобы добавить гемора программистам. Оно позволяет делать многие вещи проще и с меньшими усилиями. И IF как раз относятся к разряду программ, которые идеально укладываются в эту модель -- объекты и методы.

Насчёт проще воспримнимать -- это очень субъективно. Тебе, наверное, очень нравится XML. Но для разных задач удобнее использовать подходящие инструменты. Там, где можно обойтись одним словом, лучше обходиться одним.

Вот череп из стандартного примера в комплекте TADS:

Код:

goldSkull: item
   sdesc = "gold skull"
   noun = 'skull' 'head'
   adjective = 'gold'
   location = pedestal
   doTake(actor) =
   {
      if (self.location <> pedestal or smallRock.location = pedestal)
      {
         pass doTake;
      }
      else
      {
         "As you lift the skull, a volley of poisonous
         arrows is shot from the walls!  You try to dodge
         the arrows, but they take you by surprise!";
         die();
      }
   }
;

Поясняю: Череп лежит на "заминированном" постаменте. Если его просто забрать, сработает ловушка (реагирует на вес). В игре есть камень. Камень можно положить на постамент, после чего череп можно забрать, не запустив ловушку. Всё это обеспечивает переопределённый метод doTake -- обработчик глагола "взять" (и всех его синонимов).

Также, обрати внимание на описание класса. Череп порождается от объекта item и наследует все его свойства, а именно: обработчики на все известные действия (глаголы). Череп можно пытыться двигать, трогать, нюхать -- делать любые действия, предусмотренные для всех объектов. И автору не придётся писать для этого лишнего кода.

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

Код:

doSmell (actor)
{
    "Пахнет <<tdesc>>.";
}

(tdesc -- название объекта в творительном падеже, это тоже неотъемлимое свойство всех игровых объектов).


Проще ли будет выглядеть реализация золотого черепа в СТК (давай подсчитаем количество управляющих слов)? Возможно ли сделать это вообще?

Неактивен

0    0    #4
31.12.2007 20:26

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Тэги и команды языка СТК в LasoftGame

Пъедестал будет иметь, следующие отношения: фикисрованный, поверхность

Ниже исходный текст примера "Золотой череп":

Код:

/* Copyright (c) 1992 by Michael J. Roberts.  All Rights Reserved. */
/*
    This file contains the sample game described in TADS.DOC, and
    chapter 1 of the TADS Author's Manual.  The finished game, with the
    complete "gold skull" puzzle, is included here.

    Note that this is a text-only TADS sample game, and does not take
    advantage of the new features in HTML TADS.  Please refer to the
    new sample game gold.t, included with HTML TADS, for an example of
    how to use some of the new HTML TADS features.
*/

/* This is a comment, just like in C */
#include <adv.t>              /* read basic adventure game definitions file */
#include <std.t>                   /* read starting standard functions file */

startroom: room                      /* the game always starts in startroom */
   sdesc = "Outside cave"              /* the Short DESCription of the room */
   ldesc = "You're standing in the bright sunlight just
            outside of a large, dark, forboding cave, which
            lies to the north."
   north = cave                 /* the room called "cave" lies to the north */
;

cave: room
   sdesc = "Cave"
   ldesc = "You're inside a dark and musty cave.  Sunlight
            pours in from a passage to the south."
   south = startroom
;

pedestal: surface, fixeditem
   sdesc = "pedestal"
   noun = 'pedestal'
   location = cave
;

goldSkull: item
   sdesc = "gold skull"
   noun = 'skull' 'head'
   adjective = 'gold'
   location = pedestal
   doTake(actor) =
   {
      if (self.location <> pedestal or smallRock.location = pedestal)
      {
         pass doTake;
      }
      else
      {
         "As you lift the skull, a volley of poisonous
         arrows is shot from the walls!  You try to dodge
         the arrows, but they take you by surprise!";
         die();
      }
   }
;

smallRock: item
   sdesc = "small rock"
   noun = 'rock'
   adjective = 'small'
   location = cave
;

(По-моему, достаточно лаконично, и, главное, читабельно!)

Обрати внимание на описание объекта pedestal. :) Причём, surface и fixeditem так же являются объектами, которые описаны на языке TADS. А твои "отношения" вроде как вшиты в язык, я правильно понимаю?

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

А с чего ты взял, что на TADS этого сделать нельзя? В TADS свойством объекта может быть в том числе и метод:

Код:

pedestal: surface, fixeditem
    sdesc = 
    { 
        if (goldskull.location = this and smallRock.location = this)
            "pedestal with skull and rock";
        else
        if (goldskull.location = this)
            "pedestal with skull";
        else
        if (smallRock.location = this)
            "pedestal with rock";
        else
            "empty pedestal";
   }
   noun = 'pedestal'
   location = cave
;

Причём, это широко используется.

Я вобщем-то о том, сколько усилий требуется для реализации определенной возможности. Ты видишь, что тебе нужно что-то новое и добавляешь это в язык. Что делать автору, который не имеет доступа к исходникам твоего движка? К тому же, набор операторов языка растёт. Одновременно, простота языка падает.

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

Отредактировано Gremour (31.12.2007 20:28)

Неактивен

0    0    #5
31.12.2007 23:13

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Тэги и команды языка СТК в LasoftGame

Ладно, не будем разводить ветку на пять страниц. Мне легче читать ровный текст, тебе документ, пестрящий тегами. Вопрос вкуса. Посмотрим, когда все будет готово. }:]

Отредактировано Gremour (31.12.2007 23:14)

Неактивен

0    0    #6
01.01.2008 22:47

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Тэги и команды языка СТК в LasoftGame

fireton, у меня уже безусловный рефлекс -- после набора русской фразы вернуть раскладку обратно на английскую. Профессиональная болезнь. %)

goraph, +1

Неактивен

0    0    #7
02.01.2008 02:20

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Тэги и команды языка СТК в LasoftGame

Eten написал:

программист больше уделяет внимание алгоритму программы, чем рутинным мелочам. Следовательно, интерес писать квест возрастает больше.

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

С русским языком у меня проблем нет, пожалуй это было бы удобно для русской платформы. Только вот я пока не вижу преимуществ СТК над TADS, а недостатков хватает. Навскидку:

1. С Си или Паскалем знакомы многие люди (пожалуй, любой программист; т. к. для написания мощного квеста программист всё равно понадобится, то это огромный плюс), а птичий язык СТК придётся изучать с нуля.

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

3. Я пока не вижу у тебя каких-то возможностей, которых не хватает в TADS. TADS, как многие скриптовые языки, работает с переменными смешанного типа, с массивами нефиксированной длины. Може быть, стоило изучить его поглубже перед тем, как взяться за свой проект? Хотя бы для того, чтобы учесть, какие возможности уже есть и запланировать их в свой СТК?

4. В TADS есть наследование. Очень актуальный механизм для написания парсерных игр.

5. TADS старше, а СТК ещё даже не вышел. %) Меня терзают сомнения, что твой проект не загнётся на стадии написания парсера.

Отредактировано Gremour (02.01.2008 02:23)

Неактивен

0    0    #8
02.01.2008 15:08

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Тэги и команды языка СТК в LasoftGame

Eten, какие конкретно возможности ты имеешь в виду под "простотой и гибкостью языка"?

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

Кстати, TADS проектировался как коммерческая программа. Майкл Робертс сделал его бесплатным после того, как интерес к IF как к коммерческому продукту упал, а компания-разработчик перестала существовать.


"Птичий язык" значит непонятный язык. Я о том, что человеку, который захочет разобраться как написать квест в СТК, придётся изучить не меньше, чем человеку, который собирается разобраться с TADS, например. В этом свете я не понимаю, почему ты позиционируешь свой язык как простой.

Неактивен

0    0    #9
03.01.2008 14:44

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Тэги и команды языка СТК в LasoftGame

Eten, когда привыкнешь, лучше языка TADS для парсерной IF вряд ли что-нибудь найдёшь. Проблема даже не привыкании, а в желании намерении с ним разобраться.

Отредактировано Gremour (03.01.2008 14:45)

Неактивен

Powered by PunBB
© copyright 2001–2026 iFiction.Ru