ТОМ: Уроки: различия между версиями
Содержимое удалено Содержимое добавлено
ASBer (обсуждение | вклад) |
ASBer (обсуждение | вклад) |
||
| (не показано 38 промежуточных версий этого же участника) | |||
Строка 9:
Строка 136:
Как придать индивидуальность объектам игры читайте далее.
==Урок 3:
===наименования===
Стандартная библиотека требует обязательно указывать наименования предметов, локаций и персонажей.
Строка 146:
//...
}
Здесь:
*пещер%; - основа лексемы. Для образования словоформ вместо % подставляются различные окончания.
*ЖрЕчНдСи; - свойства лексемы:
**Жр - женский род;
**Еч - единственное число;
**Нд - неодушевлённое;
**Си - Существительное имя;
*Ип; - Форма по умолчанию. Если не указано другого согласования, будет применена форма именительного падежа.
*Ип=а; - окончание словоформы для именительного падежа;
*Рп=ы; - для родительного падежа;
*Дп=е; - для дательного падежа;
*Вп=у; - для винительного падежа;
*Тп=ой; - для творительного падежа;
*Тп=ою; - 2е окончание для творительного падежа;
*Пп=е; - окончание для предложного падежа.
Строка 151 ⟶ 166 :
Для генерации текстов это вполне подходит, но для парсера надо повторить каждое слово отдельно.
Если предмет можно назвать несколькими словами, все синонимы также необходимо добавить:
{ //...
наименование = "заколдованн% тесак%; МрЕчНдСи; Ип; Ип=ый,; Рп=ого,а; Дп=ому,у; Вп=ый,; Тп=ым,ом; Пп=ом;е"
Строка 159 ⟶ 174 :
//...
}
"заколдованн%; МрЕчНдПи; Ип; Ип=ый; Рп=ого; Дп=ому; Вп=ый; Тп=ым; Пп=ом" - здесь в свойствах лексемы
*Мр - мужской род;
*Пи - прилагательное имя.
Строка 166 ⟶ 184 :
Также для персонажей необходимо указывать звательный падеж - Зп:
ГГ.по_имени = "гоблин%; МрЕчОдСи; Ип; Зп=; Ип=; Рп=а; Дп=у; Вп=а; Тп=ом; Пп=е"
"гоблин%; МрЕчОдСи; Ип; Зп=; Ип=; Рп=а; Дп=у; Вп=а; Тп=ом; Пп=е" - здесь
*Од - одушевлённое;
*Зп=; - пустое окончание для звательного падежа.
====примечания:====
*''Вместо "наименование" можно писать "title". Оба слова являются зарезервированными ключевыми словами интерпретатора и абсолютно равнозначны.''
*''Для лучшего понимания лексем, их согласования и словообразования смотрите темы [[ТОМ: Лексема]] и [[ТОМ: Морфологический ключ]].''
===флаги и отношения===
Для настройки поведения предметов стандартная библиотека предназначает следующие свойства:
*'''можно_взять''' - флаг, по умолчанию "нет"
*'''чей''' - отношение собственности
unique меч
{ //...
можно_взять = да
чей = ГГ //принадлежит гоблину
//...
}
===описания===
Строка 230 ⟶ 260 :
В этой игре ты не можешь уничтожить свой меч!
===результаты урока===
Если Вы все правильно сделали, после запуска игры Вы можете получить нечто подобное:
ТОМ - Текстовая Основа Миростроения v.0.9.2.8 beta. ASBer(C)2008-2009
Введите '?', 'help' или 'помощь' для справки.
> run
Моя первая игра
В этой игре вы узнаете о истории любви и ненависти, а также постигните смысл
жизни.
Пещера
Это пещера, в которой ты прожил большую часть своей жизни. Мебели нет совсем, но
где-то здесь ты зарыл клад.
> осм
Волшебная пещера. Старинный тесак возлежит на своей не менее старинной
подставке. Здесь ты думаешь о смысле жизни.
> возьми тесак гоблина
Ты взял тесак из пещеры.
> инв
У тебя есть заколдованный тесак.
> осм себя
Ты старый зеленый гоблин, морщины времени залегли на твоём лице глубокими
складками.
> осм себя
Ты выглядишь как обычно, ты вооружён заколдованным мечом.
> убей врагов своим волшебным мечом
В этой игре ты не можешь убить врагов своим волшебным мечом!
> осм меч
Это старинный заколдованный тесак, умеющий танцевать джигу.
А кто не хлопает - тому он обрубает уши.
> брось его
Ты положил заколдованный тесак.
> _
==Урок 4: NPC==
[[NPC]] - это объект класса "персонаж".
Грань между персонажами и предметами достаточно размыта.
Главное различие в том, что персонажи понимают речь и могут говорить, а предметы нет.
Так, волшебную говорящую чашку лучше сделать персонажем, а спящую царевну - предметом.
Наш ГГ также наследуется от класса "персонаж".
Итак, поместим в нашу пещеру еще одного персонажа:
unique зеркало
{ cls = персонаж
Род = "Ср"
по_имени = "зеркал%; СрЕчНдСи; Ип; Зп=о; Ип=о; Рп=а; Дп=у; Вп=о; Тп=ом; Пп=е;"
описание = "простое волшебное говорящее зеркало"
полное_описание = "Гладкая поверхность отполированного оникса отражает всю пещеру, мягкое свечение камня завораживает. В пещере зеркало появилось так давно, что даже старый гоблин не помнит когда это было. Иногда зеркало разговаривает с гоблином, иногда гоблин с зеркалом^^^"
персонаж_по_месту = "на стене пещеры висит зеркало странной формы"
пещера + this
}
Из нового здесь только свойство Род.
Все персонажи по умолчанию имеют мужской род - Мр, а для зеркала необходимо указать средний род - Ср.
Загрузим игру и попробуем осмотреть пещеру:
> осм
Волшебная пещера. Старинный тесак возлежит на своей не менее старинной
подставке. Здесь ты думаешь о смысле жизни и на стене пещеры висит зеркало
странной формы.
Мы видим, что зеркало отображается не вместе с тесаком (предмет), а после ГГ (персонаж), что не очень хорошо.
Попробуем исправить это:
unique зеркало
{ //...
this.предмет_по_месту = "на стене пещеры висит зеркало странной формы"
персонаж_по_месту = нет
//...
}
Мы убрали описание для персонажа и добавили описание предмета. Зеркало - это всё же не полноценный персонаж.
Чтобы в описании пещеры зеркало выводилось перед описанием меча, объект "зеркало" в коде игры необходимо поместить перед объектом "меч".
> осмотри свою пещеру
Волшебная пещера. На стене пещеры висит зеркало странной формы и старинный тесак
возлежит на своей не менее старинной подставке. Здесь ты думаешь о смысле жизни.
NPC, унаследованный от класса "персонаж", имеет теже возможности и может выполнять все команды, что и ГГ, при чём делает это беспрекословно:
> зеркало, возьми меч
Зеркало взяло меч из пещеры.
> зеркало, инв
Зеркало: у меня есть заколдованный тесак.
> зеркало, дай мне мой меч
Зеркало дало тебе меч.
Чтобы сделать поведение зеркала более реалистичным, перегрузим метод '''свобода_воли()'''
unique зеркало
{ //...
свобода_воли(Obj)
{ switch(act)
//выполняемые зеркалом действия
case(осмотрел) return да
case(осмотрелся) return да
case(сказал) return да
//действия, которые зеркало отказывается делать
case(инвентарь) this > "да у меня даже полочки нет, какой инвентарь?"
case(взял) this > "и чем же я по твоему должно взять {Obj*Вп}?"
case() this > "мы, волшебные зеркала, такого не делаем!"
return нет //отказ
}
//...
}
Чтобы другие персонажи не пытались ничего давать зеркалу, перегрузим метод '''может_не_взять()'''
unique зеркало
{ //...
может_не_взять()
{
return "зеркало не может взять это^^^"
}
//...
}
или, чтобы зеркало отказывалось брать передаваемые ему предметы, перегрузим метод '''не_взял()'''
unique зеркало
{ //...
не_взял(Obj)
{ %Ты протянул {Obj.lex*Вп} зеркалу.
this > "зачем мне {Obj}? мне это не надо."
return нет //отказ
}
//...
}
Теперь зеркало ведёт себя как полагается зеркалам:
> зеркало, возьми тесак
Зеркало: и чем же я по твоему должно взять заколдованный тесак?
> зеркало, инвентарь
Зеркало: да у меня даже полочки нет, какой инвентарь?
> дай тесак зеркалу
Зеркало не может взять это...
> зеркало, осмотри меня
Зеркало: ты старый зеленый гоблин, морщины времени залегли на твоём лице
глубокими складками.
==Урок 5: Дополнительные локации, карта и стороны света==
Расширим нашу пещеру, еще добавив в неё локации.
Это будут проход на север и зал, к которому он ведет.
Новые локации делаем так-же как во 2м уроке:
location проход
{ cls = место
title = "узкий проход"
описание = "Небольшой коридор, ведущий в утробу пещеры."
}
location зал
{ cls = место
title = "зал"
описание = "Неровный круглый зал с высоким каменным потолком."
}
Чтобы соеденить локации друг с другом, нам необходимо разместить их на карте.
Для этого необходимо подключить еще один модуль библиотеки - map.tml
//подключим модуль с картой
include "std.lib\map.tml"
Размещаем наши локации на карте:
пещера.отметить_на_карте(1,1,1)
проход.отметить_на_карте(1,2,1)
зал.отметить_на_карте(1,3,1)
Метод '''отметить_на_карте(x,y,z)''' размещает локацию в заданных координатах карты.
Локации, размещенные рядом, автоматически соединяются проходами.
Этот же модуль отвечает за перемещения по компасным направлениям.
Смотрим, что у нас получилось:
Моя первая игра
В этой игре вы узнаете об истории любви и ненависти, а также постигните смысл
жизни.
Пещера
Это пещера, в которой ты прожил большую часть своей жизни. Мебели нет совсем, но
где-то здесь ты зарыл клад.
> иди на север
Ты ушёл на север, в узкий проход.
Узкий проход
Небольшой коридор, ведущий в утробу пещеры. Здесь ты думаешь о смысле жизни.
> иди на север
Ты ушёл на север, в зал.
Зал
Неровный круглый зал с высоким каменным потолком. Здесь ты думаешь о смысле
жизни.
> иди на север
На север не пройти.
> иди на юг
Ты ушёл на юг, в узкий проход.
Узкий проход
Небольшой коридор, ведущий в утробу пещеры. Здесь ты думаешь о смысле жизни.
> иди на юг
Ты ушёл на юг, в пещеру.
Пещера
Волшебная пещера на стене пещеры висит зеркало странной формы и старинный тесак
возлежит на своей не менее старинной подставке. Здесь ты думаешь о смысле жизни.
> иди на юг
На юг не пройти.
==Урок 6: Менюшные диалоги с NPC==
пишется...
[[Категория:Документация ТОМ]]
| |||