В общем у моего проекта уже нарисовалась полная и систематизированная база языка. Статью можете прочитать на моем сайте. Хотелось бы, чтобы вы прочитали и нашли не точности, а то сам уже 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)
Неактивен