В общем у моего проекта уже нарисовалась полная и систематизированная база языка. Статью можете прочитать на моем сайте. Хотелось бы, чтобы вы прочитали и нашли не точности, а то сам уже 25 раз прочитал, вроде бы все в порядке. Как говорится, со стороны проще увидеть не точности, чем самому.
З.Ы.
На период сессии, будут доводить документацию до конца, а потом продолжу дальше всю реализацию проекта. ![]()
Неактивен
Помнится, ты делал свою платформу, как простую альтернативу сложным платформам типа TADS. Скажу честно, пролистав статью и взглянув на определение актёра мне кажется, что TADS куда проще и понятнее.
Неактивен
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 -- название объекта в творительном падеже, это тоже неотъемлимое свойство всех игровых объектов).
Проще ли будет выглядеть реализация золотого черепа в СТК (давай подсчитаем количество управляющих слов)? Возможно ли сделать это вообще?
Неактивен
Пъедестал будет иметь, следующие отношения: фикисрованный, поверхность
Ниже исходный текст примера "Золотой череп":
/* 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)
Неактивен
Ладно, не будем разводить ветку на пять страниц. Мне легче читать ровный текст, тебе документ, пестрящий тегами. Вопрос вкуса. Посмотрим, когда все будет готово. }:]
Отредактировано Gremour (31.12.2007 23:14)
Неактивен
fireton, у меня уже безусловный рефлекс -- после набора русской фразы вернуть раскладку обратно на английскую. Профессиональная болезнь. %)
goraph, +1
Неактивен
Eten написал:
программист больше уделяет внимание алгоритму программы, чем рутинным мелочам. Следовательно, интерес писать квест возрастает больше.
Ну, это сомнительное утверждение. Если для тебя делать квест = программировать, то ради бога. Но чтобы получился хороший квест, в первую очередь надо написать сценарий и описания (локаций, предметов). У меня работа тормозится именно из-за описаний.
С русским языком у меня проблем нет, пожалуй это было бы удобно для русской платформы. Только вот я пока не вижу преимуществ СТК над TADS, а недостатков хватает. Навскидку:
1. С Си или Паскалем знакомы многие люди (пожалуй, любой программист; т. к. для написания мощного квеста программист всё равно понадобится, то это огромный плюс), а птичий язык СТК придётся изучать с нуля.
2. На мой взгляд, тэги всё-таки менее читабельны, чем простой исходный код. К тому же, ты показал, что простой исходный код уже будет лежать внутри тегов.
3. Я пока не вижу у тебя каких-то возможностей, которых не хватает в TADS. TADS, как многие скриптовые языки, работает с переменными смешанного типа, с массивами нефиксированной длины. Може быть, стоило изучить его поглубже перед тем, как взяться за свой проект? Хотя бы для того, чтобы учесть, какие возможности уже есть и запланировать их в свой СТК?
4. В TADS есть наследование. Очень актуальный механизм для написания парсерных игр.
5. TADS старше, а СТК ещё даже не вышел. %) Меня терзают сомнения, что твой проект не загнётся на стадии написания парсера.
Отредактировано Gremour (02.01.2008 02:23)
Неактивен
Eten, какие конкретно возможности ты имеешь в виду под "простотой и гибкостью языка"?
TADS это не C, и даже не C++, это -- TADS. Язык, спроектированный для максимального удобства написания парсерных игр. С интеграцией парсера и обработчиков действий. Не хуже C#, а лучше! Потому что спроектирован с конкретной узкой целью.
Кстати, TADS проектировался как коммерческая программа. Майкл Робертс сделал его бесплатным после того, как интерес к IF как к коммерческому продукту упал, а компания-разработчик перестала существовать.
"Птичий язык" значит непонятный язык. Я о том, что человеку, который захочет разобраться как написать квест в СТК, придётся изучить не меньше, чем человеку, который собирается разобраться с TADS, например. В этом свете я не понимаю, почему ты позиционируешь свой язык как простой.
Неактивен
Eten, когда привыкнешь, лучше языка TADS для парсерной IF вряд ли что-нибудь найдёшь. Проблема даже не привыкании, а в желании намерении с ним разобраться.
Отредактировано Gremour (03.01.2008 14:45)
Неактивен