В общем у моего проекта уже нарисовалась полная и систематизированная база языка. Статью можете прочитать на моем сайте. Хотелось бы, чтобы вы прочитали и нашли не точности, а то сам уже 25 раз прочитал, вроде бы все в порядке. Как говорится, со стороны проще увидеть не точности, чем самому.
З.Ы.
На период сессии, будут доводить документацию до конца, а потом продолжу дальше всю реализацию проекта. ![]()
Неактивен
Помнится, ты делал свою платформу, как простую альтернативу сложным платформам типа TADS. Скажу честно, пролистав статью и взглянув на определение актёра мне кажется, что TADS куда проще и понятнее.
Неактивен
Мда. XML-подобный язык очень хорошо подходит для обмена данными, но очень плохо подходит для описания вручную. Необходим хороший редактор. Но в целом согласен с Gremour - TADS намного удобнее, т.к. приближен к естественному языку более, чем XML-подобное описание.
Неактивен
Хм, хорошо хоть без флейма обошлись. В плане меню, я не отразил особенностей самодельного (через локи) и обычного меню (через тэг). Редактор естественно будет.
Помнится, ты делал свою платформу, как простую альтернативу сложным платформам типа TADS. Скажу честно, пролистав статью и взглянув на определение актёра мне кажется, что TADS куда проще и понятнее.
Нет, я хотел сделать другую платформу, ближе к авторам и более понятную для не программистов. То, что платформа будет похожа на URQ, QSP, TADS, будет только лучше для переносимости и больше совместимости с другими платформами. Но она будет иметь свои особенности. С другой стороны в СТК команды и тэги подбираются тонко и они должны дополнять друг друга. Т.о., человек, мало знакомый с алгоритмом и ООП, будет намного проще воспринимать весь квест, т.к. он, как бы разбит на определнные кубики связанные между собой. Это намного проще видеть используя язык СТК, чем любой другой формализованный язык. Ведь не секрет, что даже профи-программисту нужно время, чтобы разобраться в чужом коде, а о авторе в таком случае и говорить нечего.
С другой стороны, ребята, нужно понимать насколько язык должен быть, как простым, так и гибким и мощным - это и есть цель проекта, а упростить некоторые места можно дополнительными средствами.
XML-подобный язык очень хорошо подходит для обмена данными, но очень плохо подходит для описания вручную.
А вы думаете, что все кто пишут веб страницу, не задумываются об этом? Конечно да, но к HTML они уже привыкли и не замечают, а те кто поумнее (или кому лень) создают страницы с помощью мощных редакторов. Так и к этому привыкнем быстро и нормально. К тому же команд у меня не так много и их достаточно, в общем увидите, когда статью доработаю. ![]()
З.Ы.
Об объектах будет идти речь в отдельной статье, так что давайте их пока не трогать - это еще очень большая тема для разговора.
Отредактировано Eten (30.12.2007 13:18)
Неактивен
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 -- название объекта в творительном падеже, это тоже неотъемлимое свойство всех игровых объектов).
Проще ли будет выглядеть реализация золотого черепа в СТК (давай подсчитаем количество управляющих слов)? Возможно ли сделать это вообще?
Неактивен
А вы думаете, что все кто пишут веб страницу, не задумываются об этом? Конечно да, но к HTML они уже привыкли и не замечают, а те кто поумнее (или кому лень) создают страницы с помощью мощных редакторов. Так и к этому привыкнем быстро и нормально.
HTML (как и XML) - языки разметки. С++, Pascal, TADS - алгоритмические. Чувствуешь разницу? Программирование игр все-таки ближе к алгоритмам, чем к описанию неких структур.
Мне XML-подобный язык разметки игр не нравится. Я лучше с TADS останусь...
Неактивен
fireton написал:
Программирование игр все-таки ближе к алгоритмам, чем к описанию неких структур.
Строго говоря, объекты - те же структуры, по большому счету. Кроме того, любая объектная модель мира - в основном описание неких структур ![]()
Но вообще согласен, TADS удобнее для кодера.
Вот если будет удобный специализированный визуальный инструмент для редактирования игр именно на CTK - условно, мышкой расставил комнатки, распихал предметы, вбил описания, добавил нестандартные реакции (а значит, должны быть и стандартные - что-то вроде библиотек TADS для игр) - запустил - работает, тогда я только за! ![]()
Отредактировано Hind (30.12.2007 16:40)
Неактивен
HTML (как и XML) - языки разметки. С++, Pascal, TADS - алгоритмические. Чувствуешь разницу? Программирование игр все-таки ближе к алгоритмам, чем к описанию неких структур.
Тэги СТК (а они в чем-то похожи на XML, а чем-то отличны от них) предназначены для хранения, описания и передачи данных объектов программам. Команды СТК управляют алгоритмом. Конечно, же тэги тоже управляют алгоритмом по своему также, как и команды частично описывают, передают и хранят объекты. Поэтому безмысленно подсчитывать кол-во, иначе тогда, придется подсчитывать и производительность, целесообразность и подход языка ТАДСа, а он ведь тоже дает широкие возможности в пределах разумного, т.е. там почти все можно переписать.
Наследование у объектов будет, но не сразу. К тому же все объекты будут задаваться через тэги, а управлять программно ими можно будет только командами. К тому же
, моим объектам, для обращения, через парсер (который будет только со 2-ой версии), после изменений с ними, нужно всего лишь изменить название и опля готово. К примеру, у вас есть лестница и она должна быть разрушенная лестница, для этого достаточно создать объект с именем лестница и соответствующим названием (читай выше), когда лестница разрушена измени название и все дела (а в зависимости от названия пропиши и остальное). К примеру с той же лестницей, когда у вас должна быть лестница и куча хлама, при чем данные объекты различны по своей сути в квесте то, вот тогда и нужно создавать два разных объекта. Вот она изюминка - целесообразность выбора. А в ТАДСЕ для этого нужно создать еще один целый объект в любом случае, так что давайте не будем считать кол-во слов. У каждого языка все по своему совершенно, для вас главное, что результат почти не отличим, а это главное.
З.Ы.
Я за применение каждой из полезных технологий в своем месте, а не горбатить все по одну меру.
Я бы написал пример черепа на СТК, но увы в первой версии он будет менюшным и пока команды до конца не определил, иначе бы полностью написал пример черепа в виде квеста в менюшном варианте, почти не отличимом от исходника. ![]()
Отредактировано Eten (31.12.2007 18:55)
Неактивен
Нет, все-таки немножко опишу пусть хоть и на словах. Пъедестал будет объектом, как череп и камень тоже. Пъедестал будет иметь, следующие отношения: фикисрованный, поверхность. Череп: инвентарный, камень также, как и череп. Исходные отношения у объектов, такие: подвижный, простой, не контейнер, не поверхность, не инвентарный, не абстрактный. Задавая ему отношения, мы изменяем его исходные отношения, убирая эти отношения (программным путем), опять возвращаем отношение в исходное состояние. Итак, пъедестал имеет отношение фиксированный и поверхность - это значит, что его нельзя двигать и на него можно что-то положить. Череп и камень соответственно можно взять в руки (проще говоря положить в инвентарь) и убрать обратно. Т.к. вариант управления менюшный, то прописываем у объектов действия. В пъедестале прописываем действие "взять череп", в нем проверяем есть ли на пъедестале камень и т.д. также пробиваем действия "положить череп", "положить камень", "взять кмень", можно обойтись проще т.к. есть камень или череп понятие истина или ложь, то можно написать так "череп" и "камень", а внутри написать проверку есть ли камень на поверхности пъедестала, если да то снимаем его, если нет то ставим обратно, с камнем также. При этом я могу менять название пъедестала: "пустой пъедестал", "пъедестал с черепом" "пъедестал с камнем" и т.д., а могу вообще его не менять, но пропишу тэг описания пъедесталя, чтобы можно было вывести, что у нас там на пъедестале. Т.к. используем меню, то в локе с пъедесталом прописываем действия, через которые будем вызывать действия в пъедестале и вызывать добавление камня из локации в рюкзак героя. Как весь этот процесс заэвуалировать дело каждого. Вот мой вариант действий в локации: 1)взять камень/бросить камень, 2)поставить камень на пъедестал/забрать камень с пъедестала, 3)забрать череп с пъедестала/поставить череп на пъдестал, 4)осмотреть пъедестал, 5)осмотреть комнату. Все действия будут выводиться в определенной зависимости друг от друга, кроме 4 и 5, в тех действиях где стоит слеш взаимнопротивоположны друг другу и появляются в случае не доступности другого. В итоге у нас получается всего четыре или пять действий. Когда камня нет на пъедестале, то доступно 1, но не доступно 2. Когда камень на пъедестале, то наоборот. Но если мы ни разу не выполняли действие 5, то ни 1, ни 2 не доступны (должны же мы с начала его посикать
). Что будет в случае 3, всем известно, как обычно стоит камень на пъедестале, когда снимаем череп, все окей, когда на пъедестале в этот момент был только череп хана герою. Получается, что когда заходим в комнату, то доступны только 3, 4 и 5. После 5, доступны 1 и 2. При отсутствии камня в инвентаре или присутствии его на поверхности пъедестала, не достпуно 1.
Подводим итоги сего алгоритма, в ТАДС его исполнение вы выдели, в СТК оно уже было описано выше, но подмечу еще раз, что тэгами я задаю описание всех объектов и всего квеста в целом, а командами задаю весь этот казалось бы тривиальный алгоритм и все довольны. Но его реализацию выведу только после того, как закончу соответствующие статьи об СТК.
Неактивен
Пъедестал будет иметь, следующие отношения: фикисрованный, поверхность
Ниже исходный текст примера "Золотой череп":
/* 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)
Неактивен
Отношения выполняют роль разграничителей, того что можно, а что нельзя. Их можно добавлять и удалять - это всего лишь качество. Но отношения еще не только, как правила, но и интерфейс, а значит оно описывает сигнатуру, которую должен содержать объект поддерживающий это отношение. К тому же тебе никто не мешает прописать этот объект, как базовый, а потом унаследовать от него. Да, не будет множественного наследования, но этого и не нужно, достаточно того, что отношения имеют множ. наследование.
Код приведенный тобой нужно еще понять, а тэги они и в африке тэги, также у меня локации хоть и являются объектами, но в языке это не выраженно, что упрощает работу с квестом, как говорится каждой тваре свое место. Код вообще сложно понять с первого раза увидев его, а без знания ТАДС и подавно. Опять же тэги, являются разметкой информации и уже чисто интуитивно можно понять, что к чему. Так, что я с тобой не согласен. Ну, а если тебе не нравится подход отличный от СИ-ого, то уж не о том и не здесь нам говорить тогда. Поэтому всегда, намного проще разграничивать команды и объекты, а не все вперемешку, где приходится прочесть весь исходник, чтобы найти начало и конец, не говоря уже о том, что даже сгруппировать локации в ТАДСЕ и то трудно.
З.Ы.
К тому же набор операторов всегда растет в первую очередь из-за того, что ТАДС сделан, как СИ подобный язык, в нем все определенно общно, а не конкретно. А с примением одних команд ТАДСЕ их явно не поубавится, для того чтобы, сделать новый оператор или объект, придется не мало написать придатков. Во всем остальном, автору достаточно создавать пользовательские команды (это будет тоже реализовано в первой версии, но не сразу).
Также обращаю внимание на то, что у ТАДСа есть исходники, но это не помогло людам которые создали исправитель ошибок в словах (спилчпекер). Он то создан на основе команд ТАДСа, а не добавлен в исходники ТАДСа, как его функционирующая часть. На производительность это сильно скажется, да и операторов явно прибавилось.![]()
Отредактировано Eten (31.12.2007 22:15)
Неактивен
Ладно, не будем разводить ветку на пять страниц. Мне легче читать ровный текст, тебе документ, пестрящий тегами. Вопрос вкуса. Посмотрим, когда все будет готово. }:]
Отредактировано Gremour (31.12.2007 23:14)
Неактивен
Eten написал:
Также обращаю внимание на то, что у ТАДСа есть исходники, но это не помогло людам которые создали исправитель ошибок в словах (спилчпекер). Он то создан на основе команд ТАДСа, а не добавлен в исходники ТАДСа, как его функционирующая часть. На производительность это сильно скажется, да и операторов явно прибавилось.
А что, в СТК спеллчекер создать - как два байта переслать?
(И не надо отсылок в духе, что СТК - платформа для менюшных квестов).
Фраза про производительность - вообще убила. Для текстовых квестов (даже при условии проигрывания на мобильном телефоне) тема, что и говорить, архиактуальнейшая.
Неактивен
Пример про пьедестал - да в данном конкретном случае он не выходит за границы стандартной библиотеки. Но что делать если это не так? Например у меня есть актер у которого есть хит-поинты, и когда их количество от двух до семи, я хочу менять описательное свойство актера на "тяжело дышит и выглядит уставшим"?
Неактивен
goraph написал:
Пример про пьедестал - да в данном конкретном случае он не выходит за границы стандартной библиотеки. Но что делать если это не так? Например у меня есть актер у которого есть хит-поинты, и когда их количество от двух до семи, я хочу менять описательное свойство актера на "тяжело дышит и выглядит уставшим"?
Гор, какое описательное свойство имеется в виду? Актер - главный персонаж или непись? "Описательное свойство" - имеется в виду краткое описание (sdesc), подробное описание (ldesc), или описание актера в локации (actorDesc)?
Предположим последний случай (actorDesc):
actorDesc={if((self.HitPoints>=2) and (self.HitPoints<=7))
{ZAG(actor, sdesc); " тяжело дышит и выглядит уставшим.";
}
else
{if(self.HitPoints>7)
{ZAG(actor, sdesc); " держится молодцом.";
}
else
{ZAG(actor, sdesc); " практически сдох.";
}
}
}Другие свойства (из вышеперечисленных в начале) определяются аналогично.
Ответ на вопрос "что делать" - читать документацию, а если все равно ничего не понятно - задавать вопросы на форуме;).
И последний встречный вопрос: что, 1-го января больше заняться нечем?
Я вот лично сейчас дособираю дочке санки и отправлюсь трезветь... в смысле, отсыпаться;).
Неактивен
goraph, а нельзя ли попдробнее?
Gremour, хорошо что ты, понял в чем разница. Но оговоресь что кодеру мешает в языке, также, как и плохому танцору, площадка или он сам? А об именно это мы постоянно спотыкаемся.
прогу про череп еще вчера писал, но надо подумать про массив и встроенные методы объектов вообще, про них блин забыл на фиг. Как говорится, чем больше проверяем возможности СТК, чем конкретнее становятся слабые места, а дальше только править остается, но во всем остальном прописать приведенный мною алгоритм почти удалось, естественно он будет длинее из-за менюшного варианта, но в синтаксисе его понять проще. Да и еще на русском язык, БОЛЬШОЙ ПЛЮС в копилку СТК. ![]()
Про спилчпекер, сказать точно не могу, все зависит от потребности, но если оно будет актуально само по себе, то обязательно добавлю на уровне кода платформы.
Разработка платформ для мобильных устройств вообще тема для другого разговора.
Вот не законченный квест про золотой череп, но команды идут ровным текстом, поэтому, листинг будет казаться длинным.
<квест имя="золотой череп" версия="1.0.0" автор="народ" почта="нет">
<начать переход="Зал.Комната"/>
<мир>
<объект отношения="инвентарный" имя="череп" название="золотой череп">
</объект>
<объект отношения="инвентарный" имя="камень" название="тяжелый камень" место="Зал.Комната">
</объект>
<объект отношения="фиксированный, поверхность" имя="пъедестал" название="пъедестал" место="Зал.Комната">
<свойство тип="массив" имя="предметы" значение="череп"/>
<действие имя="камень">
если пъедестал.предметы.есть("камень") тогда
начало
пъедестал.предметы -= камень;
я.инвентарь += камень;
конец;
иначе
начало
я.инвентарь -= камень;
пъедестал.предметы += камень;
конец;
</действие>
<действие имя="череп">
если я.инвентарь.есть("череп") тогда
начало
я.инвентарь -= череп;
пъедестал.предметы += череп;
конец;
иначе // если череп не в рюкзаке, значит на пъедестале
если пъедестал.предметы.есть("череп") тогда
если пъедесталюпредметы.есть("камень") тогда
начало //если камень лежит рядом с черепом, то порядок
пъедестал.предметы -= череп;
я.инвентарь += череп;
конец;
иначе // иначе смерть
начало
вывод(@"Как только вы подняли золотой череп, неизвестно откуда полетели сотни стрел к пъедесталу
вы пытались увернуться, но их было много. \n Вас постигла мучительная смерть.");
закончить;
конец;
</действие>
<описание>
вывод("Вы видите перед собой старый пъедестал, на его поверхности лежит: ");
число и;
цикл и = 1 до пъедестал.предметы.длина вывод(пъедестал.предметы[и].название + ", ");
вывод(@"кроме того пъдестал слишком прост, никаких ловушек, никаких препятствий, в таком тихом и безлюдном месте.\n Правда... чьи-то
кости лежат у пъедестала.");
</описание>
</объект>
</мир>
<Мультилокаиця имя="Зал">
<Локация имя="Комната">
Вывод(""Вы оказываетесь в темной комнате, но луч света падает на ту область комнаты, где стоит странный пъедестал.
Откуда он вообще мог взяться здесь?");
......//это место не доделано
</Локация>
</Мультилокаиця>
</квест>Ясен фиг, что остановился на самом интересном месте, но как допишу, просто отредактирую этот пост.
Неактивен
насчет актера, вот листинг:
...
<описание>
//допустим твой актер имеет имя вася.
если вася.хит > 7 и вася.хит < 2 тогда
вывод("Вася тяжело дышит и выглядит уставшим. ");
иначе
если вася.хит > 7 тогда вывод("Вася держится молодцом. ");
иначе вывод("Вася сдох. ");
</описание>
...учитывая, что когда мы пишем
вывод(Вася);
то выводится не вася, со всеми его сво-вами, а его описание.
Можно менять и название, но это уже делается не внутри актера вася и для вывода названия актера, нужно выводить его в ручную. Для объектов наоборот, т.к. у них в первую очередь нужно выводить название, а не описание. Можно в принципе, прописать действие о выводе нужной инфы и использвать ее, вместо этих свойств. Для любителей базовых классов, скажу сразу актер, герой и объект - это три разных, базовых объекта.
Если хочешь, чтобы информация о состоянии актера выводилась,после каждого действия, тогда написать в нем следующие:
<фондействие> вывод(Вася); </фондействие>
И после каждого твоего действия оно будет выводиться на экран, можно и усложнить выполнение фонового действия, но это уже твоего ума дело.![]()
Отредактировано Eten (01.01.2008 14:51)
Неактивен
uux, я знаю как это делать в тадс, меня интересовало как это предполагается делать в СТК, это ж не раздел тадс, это раздел флейм ![]()
1е января чемто от других дней принципиально отличается? вроде вторник, рабочий день для флуда
Eten, спасибо, все понятно
Получается внутри тегов и пишется код?
Синтаксис имхо ужасен, русский язык, "достоинство" как минимум сомнительное.
Если я уже знаю какой нибудь язык программирования (напрмиер С, или пхп, или питон, или что-то еще), то элементарно цикл я смогу написать в том же тадсе, или в том же луа, не глядя лишний раз в мануал, а вот если все это по русски, то поди догадайся как мне писать цикл - "для х от а до б"? нет "пока а<б"? снова нет, черт возьми "цикл ..."
Единственное положительное что я вижу во всем этом - достаточно просто должно быть написать транслятор из нормального языка, в приведенный хмл-ный ![]()
Неактивен
goraph написал:
uux, я знаю как это делать в тадс, меня интересовало как это предполагается делать в СТК, это ж не раздел тадс, это раздел флейм
Ага, спасибо за пояснения (я в них действительно нуждался). Вот что значит зайти на форум в новый год с бодуна;).
Неактивен
Синтаксис имхо ужасен, русский язык, "достоинство" как минимум сомнительное.
А меня так наоборот, в TADS задалбывает переключать раскладку постоянно... ![]()
Неактивен
Согласен, синтаксис на русском языке, да еще без подсветки, после английского всегда выглядит ужасно. Но, как говорят историки, перевод Паскаль фирмы Борланд на русский вызвал явный и понятный смех. Теже самые циклы для и пока, на русском языке намного проще использовать слово цикл: "цикл и в африке цикл". В общем, когда я переходил от Си++ к Си#, тоже постоянно матерился, что второй язык не похож на первый хоть они и родственники. Но потом, оказалось, что СИ# лучше, чем Си++ и проще для обычного программирования, а СИ - это больше системный, чем прикладной язык. Также и здесь, не вижу смысла стесняться русского языка, он не хуже английского. Правда при использовании русского языка, постоянно приходится переключаться на английскую раскладку из-за спец. символов на буквенной клавиатуре, но это такая раскладка.
Еще раз подмечу, синтаксис использованный в ТАДСе Си подобный, поэтому всей ужасности не видно, но попробуйте перенести весь алгоритм на Паскаль подобный язык и ужас к вам вернется.![]()
У меня же, выражено преобладание словесных форм, а не символьных. Иначе говоря язык командами похожий на Паскаль, но возможностями на СИ, а по способу испольлзования, как в Си#. Да использование тэгов, также заставляет глаза отрваться от сплошного программирования и подумать о главном в квесте, кстати в Си# именно этого и придерживаются: программист больше уделяет внимание алгоритму программы, чем рутинным мелочам. Следовательно, интерес писать квест возрастает больше.
Неактивен
goraph
Получается внутри тегов и пишется код?
Хоть кто-то обратил внимание на эту изюминку. Да, именно так, но не во всех тэгах. Если тэг содержит в себе другие тэги, то он не может содержать код и наоброт. Это очень удобно когда тэги и код дополняют друг друга - в этом и вся особенность синтаксиса СТК. Где вы такое видели? ![]()
то поди догадайся как мне писать цикл - "для х от а до б"? нет "пока а<б"? снова нет, черт возьми "цикл ..."
А как вообще может придти в голову искать подобным образом? Когда слово цикл больше подходит для цикличного оператора, чем непонятные слова для и пока. Для чего х от а до 6 или куда это пока а < 6, проще на русском так: цикл х = а к 6 или цикл а < 6. При чем читается, это так: цикл х от а к 6 или цикл пока а < 6 истина.
Меня больше всего поразило в английском, что слово for и while вообще не имеют никакого отношения к циклу, но там это и не заметно, прижились или у них читается по другому, видимо отсюда и пошло такое написание цикла. По англ. с русского ситаксиса это будет так: Cycle а to 6. Разницы никакой, только сути больше.
З.Ы.
Зачем все усложнять, когда можно сделать проще?!
Неактивен
Eten написал:
программист больше уделяет внимание алгоритму программы, чем рутинным мелочам. Следовательно, интерес писать квест возрастает больше.
Ну, это сомнительное утверждение. Если для тебя делать квест = программировать, то ради бога. Но чтобы получился хороший квест, в первую очередь надо написать сценарий и описания (локаций, предметов). У меня работа тормозится именно из-за описаний.
С русским языком у меня проблем нет, пожалуй это было бы удобно для русской платформы. Только вот я пока не вижу преимуществ СТК над TADS, а недостатков хватает. Навскидку:
1. С Си или Паскалем знакомы многие люди (пожалуй, любой программист; т. к. для написания мощного квеста программист всё равно понадобится, то это огромный плюс), а птичий язык СТК придётся изучать с нуля.
2. На мой взгляд, тэги всё-таки менее читабельны, чем простой исходный код. К тому же, ты показал, что простой исходный код уже будет лежать внутри тегов.
3. Я пока не вижу у тебя каких-то возможностей, которых не хватает в TADS. TADS, как многие скриптовые языки, работает с переменными смешанного типа, с массивами нефиксированной длины. Може быть, стоило изучить его поглубже перед тем, как взяться за свой проект? Хотя бы для того, чтобы учесть, какие возможности уже есть и запланировать их в свой СТК?
4. В TADS есть наследование. Очень актуальный механизм для написания парсерных игр.
5. TADS старше, а СТК ещё даже не вышел. %) Меня терзают сомнения, что твой проект не загнётся на стадии написания парсера.
Отредактировано Gremour (02.01.2008 02:23)
Неактивен
Gremour, про шансы доделать квест, сказал утрировано, но у кого с чем проблемы. У меня тоже бывают проблемы с описанием.
Да, возможно мой язык придется немножко изучить, но я же не могу заставить людей писать на СИ и Паскаль - это классика, а нам нужны простые и гибкие языки.
Массивы у меня тоже будут безразмерные, но при чтении данных из них они будут конечными, а это значит, можно определить их конечный индекс, естественно безразмерность оценивается величиной int (integer), т.к она является индексом массива, как в СИ, так и Паскале (не будем перетирать про другие варианты, щас не о них говорится). Иначе говоря, мир тесен.
Другие платформы изучаю для большей совместимости, но все сразу за один заход, блин не реализуешь!
Парсер можно и получше для русского языка написать, дабы был не отличим ввод, как у знающего человека и наоборот.
Читабельность тэгов определяется используемым ПО для их просмотра.
В СТК тоже будет наследование, но как в Паскале, а отношения будут иметь множественные отношения - это будет давать больше гибкости и простоты в иерархии объектов, чем множ. наследование. Учти, я это множ. наслед. уже хлебал и вариант в СИ шарпе, оказался куда практичнее, а главное с его помощью меньше оплошностей и затруднений.
Давай не будем говорить про возраст ТАДС, а посмотрим на его версию, насколько мне известно последняя версия 3.х. Не так уж много.
К тому же написание кода внутри тэгов напоминает прототипы функций в СИ, только здесь не учитывается в какой последовательности ты это написал, главное, что оно есть и не создает коллизий - это намного проще последовательного программирования и данный способ использует почти во всех современных языках.
То, что СТК еще не вышел не факт, что его забросили. Мне еще до конца нужно определиться, что будет в его первой версии и каковы будут тенденции его развития ввиде апгрейдов. А там уже будет не далеко и до второй версии, знаменуемой выходом парсера.
Кроме всего прочего, язык это способ сказать программе, что делать, новое понятие алгоритма не придумаешь, так что, чтобы понимать любой язык нужно понимать и что такое алгоритм, а алгоритм роще паренной репы, значит паримся не о том.
И в итоге, что же у тебя подразумевается под птичьим языком, я понял, что ничего путного, кроме того что на нем разговаривают птицы или я тебя не правильно понял? (раз уж сказал, то объяснись)
Отредактировано Eten (02.01.2008 10:16)
Неактивен
Eten написал:
Давай не будем говорить про возраст ТАДС, а посмотрим на его версию, насколько мне известно последняя версия 3.х. Не так уж много.
А) Применительно к русскому языку - версия вообще вторая (третья версия в обозримом будущем русифицироваться не будет).
Б) Но, Eten, прежде чем делать такие заявления, потрудились бы хотя бы ознакомиться с историей обновления TADS. Вы бы обнаружили массу интересного: во-первых, что новая версия второго TADS'а выходит практически каждый год, а во-вторых, что автор платформы использует "трехсоставную" систему нумерации - вида x.y.z, где поле "x" меняется только в случае, когда вносимые изменения совсем уж принципиальные (пример - как раз третья версия, которая представляет собой фактически новую платформу, несовместимую со второй). Текущая версия второго TADS - 2.5.10. Выводы делайте сами.
Неактивен
Eten, какие конкретно возможности ты имеешь в виду под "простотой и гибкостью языка"?
TADS это не C, и даже не C++, это -- TADS. Язык, спроектированный для максимального удобства написания парсерных игр. С интеграцией парсера и обработчиков действий. Не хуже C#, а лучше! Потому что спроектирован с конкретной узкой целью.
Кстати, TADS проектировался как коммерческая программа. Майкл Робертс сделал его бесплатным после того, как интерес к IF как к коммерческому продукту упал, а компания-разработчик перестала существовать.
"Птичий язык" значит непонятный язык. Я о том, что человеку, который захочет разобраться как написать квест в СТК, придётся изучить не меньше, чем человеку, который собирается разобраться с TADS, например. В этом свете я не понимаю, почему ты позиционируешь свой язык как простой.
Неактивен
Про птичий язык, все понятно. Простота мне видится в разработке на СТК квестов, согласитесь, что вебстраницы пишутся на тэгах все-таки, скрипт тоже заключен между тэгами, но у меня немножко по другому и задачу СТК будет выполнять тоже узкую - это работать с текстовыми играми, а не только парсером. ТАДС хоть и не СИ, но СИ-подобный, т.к. использует его синтаксис в основе, хоть и является специализированным языком. Я же говорил, что СИ и Паскаль - это классика!
Про версии вот, что слушайте: первое число - это старшая версия, в ней действительно отражаются приниципиальные изменения, второе число - это младшая версия, в которой есть незначительные изменения, третье число - это номер сборки, т.е. кол-во компиляций. Но в четырех значной версии, третье число означает ревизию ошибки (кол-во исправлений), ну и четвертое число опять сборка. Обычно пишут x.y.z, так что знаю блин, что в версии говорится.
Поэтому первое число больше говорит об изменениях в проекте, чем все истории об обновлении. ![]()
Отредактировано Eten (02.01.2008 19:51)
Неактивен
Eten написал:
Про версии вот, что слушайте: первое число - это старшая версия, в ней действительно отражаются приниципиальные изменения, второе число - это младшая версия, в которой есть незначительные изменения, третье число - это номер сборки, т.е. кол-во компиляций. Но в четырех значной версии, третье число означает ревизию ошибки (кол-во исправлений), ну и четвертое число опять сборка. Обычно пишут x.y.z, так что знаю блин, что в версии говорится.
Поэтому первое число больше говорит об изменениях в проекте, чем все истории об обновлении.
Eten, не стоит применять собственные представления о принципах нумерации версий (пусть даже почерпнутые из очень авторитетных источников) ко всем без разбора проектам - автор может иметь собственный взгляд на нумерацию, отличный от Вашего. Поэтому повторю еще раз - прежде, чем голословно утверждать что-то, попробуйте ознакомиться с первоисточниками. На этом тему считаю для себя закрытой.
Неактивен
uux, а каким боком у нас эта тема вообще притерлась?! Закрою эту тему тем, что сказу следующее: Игра "Морские титаны" - это явный пример того, что игра сделана сразу отличная и там уже больше нечего добавлять, пусть хоть она и не ИЛ, но в тему. Именно поэтому-то мы и смотрим не на версии, а на то, что в ней сделанно и каков от этого прогресс проекта в целом.
Хочу дать огласке одну вещь. Каждый из нас столкнулся хоть раз за свою жизнь с тем, что для нас было совершенно не понятным. Мне к примеру несколько лет, были не понятны смайлики, казалось бы чего уж тут не понятного. А с другой стороны смотришь на двоеточие и сплошной ряд закр. скобок и думаешь: "А что это означает?!", а когда объяснят, то все просто и понятно.
Так, что язык СТК врятли птичий - это у вас с понятиями плохо, когда привыкли что так и так бывает, а по другому нет. Так нет же, найдется человек, который всю картину по новому нарисует.![]()
Отредактировано Eten (03.01.2008 14:11)
Неактивен
Eten, когда привыкнешь, лучше языка TADS для парсерной IF вряд ли что-нибудь найдёшь. Проблема даже не привыкании, а в желании намерении с ним разобраться.
Отредактировано Gremour (03.01.2008 14:45)
Неактивен
Eten написал:
uux, а каким боком у нас эта тема вообще притерлась?!
Уважаемый Eten, странно слышать такой вопрос - о том, откуда возникла тема по поводу номера версии TADS - именно от Вас. Посмотрите Ваше же сообщение за вчера, и найдете следующие слова:
Eten написал:
Давай не будем говорить про возраст ТАДС, а посмотрим на его версию, насколько мне известно последняя версия 3.х. Не так уж много.
Отредактировано uux (03.01.2008 15:26)
Неактивен
Не ругайтесь ![]()
Eten прав относительно нумерации версий - приведенный им вариант действительно канон.
Однако судить по версии о развитости проекта нельзя - есть стабильные проекты версии 0.0.13, которыми пользуются много лет, а есть проекты, добравшиеся за год до 8-й версии без единой новой возможности, на одних багфиксах.
Я немного утрирую, возможно.
Неактивен
Полностью согласен с Hind, но бывают и другие варианты.
З.Ы.
Скоро добью свою стататейку и начну следующую статью "Типы данных СТК", в которой отражу, как простые переменные, а это: число, строка, булев и массив; так и, объекты со всеми их особенностями.![]()
Отредактировано Eten (03.01.2008 18:34)
Неактивен
Hind написал:
Не ругайтесь
Eten прав относительно нумерации версий - приведенный им вариант действительно канон.
Hind, никто не ругается. Только это довольно странная манера ведения спора - когда один и тот же человек сначала говорит
Eten написал:
Давай не будем говорить про возраст ТАДС, а посмотрим на его версию, насколько мне известно последняя версия 3.х. Не так уж много.
а на следующий день -
Eten написал:
а каким боком у нас эта тема вообще притерлась?!
и
Eten написал:
Именно поэтому-то мы и смотрим не на версии, а на то, что в ней сделанно и каков от этого прогресс проекта в целом.
т. е. в течение где-то полутора суток человек выдает два взаимоисключающих утверждения.
Отредактировано uux (03.01.2008 22:53)
Неактивен
Ийе, uux, я это вижу, конечно ^_^
Думаю, Eten хотел побыстрее отвязаться от этой темы, он ведь нигде и не отрицал, что сам поднял её ![]()
Нафиг тебе нужно формальное признание "Да, я высказал два взаимоисключающих (при конкретной трактовке последнего) выражения"? Только хуже будет всем. Одно дело делаем...
Неактивен
Hind написал:
Ийе, uux, я это вижу, конечно ^_^
Думаю, Eten хотел побыстрее отвязаться от этой темы, он ведь нигде и не отрицал, что сам поднял её
Нафиг тебе нужно формальное признание "Да, я высказал два взаимоисключающих (при конкретной трактовке последнего) выражения"? Только хуже будет всем. Одно дело делаем...
Да нет, формальных признаний никаких не нужно, конечно - спор давно исчерпан.
Я просто объяснял свою позицию в ответ на твой пост.
Педантичный я
.
Отредактировано uux (04.01.2008 07:17)
Неактивен
uux, я на форум не каждый день успеваю залазить и очень рассеянная творческая личность, если у меня постоянный беспорядок на рабочем столе, то чего уж удивляться о том, что я иногда забываю о чем-то сказать, в то время, когда другие успевают высказать мою мысль, а сам по рассеяности думаю, что сам же об и говорил. Так, что это нормально.![]()
Отредактировано Eten (04.01.2008 10:45)
Неактивен
Статья полностью закончено, если и будет что-то нужно отредактировать, то это значит, что я мог забыть какую-то мелочь, но нашел и добавил. Во всем остальном статья больше не изменится, так что можете прочитать ее еще раз.
Но учтите, что эта статья - это азы СТК. Будут еще несколько статей, которые раскроют остальные возможности STK1.
З.Ы.
По моим подсчетом между первым входом статьи и ее окончательной доработки прошло всего 30 дней, что ж не плохо для нормальной статьи, а для настоящей книги могло быть еще дольше. ![]()
Неактивен