feat: init

This commit is contained in:
2025-09-01 02:28:55 +07:00
commit eb357ef703
21 changed files with 6628 additions and 0 deletions

110
examples/demo.ql Normal file
View File

@@ -0,0 +1,110 @@
квест ПримерКвеста;
цель "Демонстрация возможностей QuestLang интерпретатора";
граф {
узлы {
старт: {
тип: начальный;
описание: "Добро пожаловать в пример квеста на QuestLang!";
переходы: [главноееню];
}
главноееню: {
тип: действие;
описание: "Вы находитесь в главном меню. Что хотите сделать?";
варианты: [
("Начать приключение", начало_приключения),
("Прочитать правила", правила),
("Выйти из игры", выход)
];
}
правила: {
тип: действие;
описание: "Правила просты: читайте текст и выбирайте действия. Ваши решения влияют на исход истории.";
варианты: [
("Вернуться в меню", главноееню),
("Начать играть", начало_приключения)
];
}
начало_приключения: {
тип: действие;
описание: "Вы стоите на развилке дорог. Слева ведет тропинка в тёмный лес, справа - дорога к светлому замку.";
варианты: [
("Пойти в тёмный лес", тёмный_лес),
("Пойти к светлому замку", светлый_замок),
("Остаться на развилке", размышления)
];
}
тёмный_лес: {
тип: действие;
описание: "В лесу темно и страшно. Вы слышите странные звуки. Внезапно перед вами появляется волк!";
варианты: [
("Попытаться подружиться с волком", друголка),
("Убежать обратно", начало_приключения),
("Встать в оборонительную позу", волчья_схватка)
];
}
светлый_замок: {
тип: действие;
описание: "Замок выглядит дружелюбно. У ворот вас встречает стражник в блестящих доспехах.";
варианты: [
("Поговорить со стражником", разговор_со_стражником),
("Попытаться пройти мимо", незаметное_проникновение),
("Вернуться назад", начало_приключения)
];
}
размышления: {
тип: действие;
описание: "Вы размышляете о выборе. Время идёт, и скоро стемнеет.";
варианты: [
("Всё же пойти в лес", тёмный_лес),
("Пойти к замку", светлый_замок),
("Вернуться домой", возвращениеомой)
];
}
друголка: {
тип: концовка;
название: "Необычная дружба";
описание: "Волк оказался дружелюбным! Теперь у вас есть верный спутник, и вы вместе отправляетесь в новые приключения.";
}
волчья_схватка: {
тип: концовка;
название: "Героическая победа";
описание: "Вы смело сражались с волком и победили! Ваша храбрость будет воспета в легендах.";
}
разговор_со_стражником: {
тип: концовка;
название: "Мудрый совет";
описание: "Стражник рассказал вам древнюю мудрость, которая изменила вашу жизнь к лучшему.";
}
незаметное_проникновение: {
тип: концовка;
название: "Тайный проход";
описание: "Вы обнаружили секретный проход в замок и нашли там древние сокровища!";
}
возвращениеомой: {
тип: концовка;
название: "Домашний уют";
описание: "Иногда лучшее приключение - это возвращение домой к тёплому очагу.";
}
выход: {
тип: концовка;
название: "До свидания!";
описание: "Спасибо за игру! Возвращайтесь ещё.";
}
}
начало: старт;
}
конец;

145
examples/kvest_Shashlyk.ql Normal file
View File

@@ -0,0 +1,145 @@
квест Шашлык;
цель "Сегодня день труда и отдыха и надо купить шашлык. На пути нас встречают разнообразные трудности.";
граф {
// Узлы графа
узлы {
старт: {
тип: начальный;
описание: "Начало приключения";
переходы: [выбор_пути];
}
выбор_пути: {
тип: действие;
описание: "Ближайшая дешёвая шашлычная находится в 100 метрах от вас. Хорошая - в 1 км. Куда идти?";
варианты: [
("Пойти в дешёвую шашлычную", дешевая_очередь),
("Пойти в хорошую шашлычную", дорога_к_хорошей),
("Пойти домой", поход_в_магазин)
];
}
дешевая_очередь: {
тип: действие;
описание: "У шашлычной ты увидел очередь к ней. Как же её обойти?";
варианты: [
("Пойти напролом", бабка_остановила),
("Попасть в шашлычную хитро", фальшивый_бейдж),
("Подождать очередь", шашлыки_кончились)
];
}
бабка_остановила: {
тип: действие;
описание: "И вот вы разрушили всю очередь, но бабка с демонстрации остановила вас. Вы слушаете рассказ про то как было раньше и возвращаетесь в конец очереди.";
варианты: [
("Снова попробовать пройти напролом", бабка_остановила),
("Попасть в шашлычную хитро", фальшивый_бейдж),
("Подождать очередь", шашлыки_кончились)
];
}
шашлыки_кончились: {
тип: действие;
описание: "Простояв час в очереди, в шашлычной закончились шашлыки. Но ты всё ещё можешь поесть шашлыки в хорошей шашлычной или дома.";
варианты: [
("Пойти в хорошую шашлычную", дорога_к_хорошей),
("Пойти домой", поход_в_магазин)
];
}
дорога_к_хорошей: {
тип: действие;
описание: "По пути к шашлычной, ты увидел толпу злых школьников. Что же нужно сделать?";
варианты: [
("Пойти напролом", школьники_безобидные),
("Обойти толпу", попал_в_демонстрацию),
("Подождать, пока они уйдут", школьники_пьют)
];
}
поход_в_магазин: {
тип: действие;
описание: "По пути домой, ты вспоминаешь, что у тебя не хватает нескольких продуктов дома и тебе нужно зайти в магазин. Когда ты находишь всё и идёшь на кассу, оказывается у тебя не так уж и много денег. Что же делать?";
варианты: [
("Своровать продукты", поймали_вора),
("Купить половину продуктов", овощное_рагу),
("Пойти в ближайшую шашлычную", дешевая_очередь)
];
}
фальшивый_бейдж: {
тип: действие;
описание: "За несколько минут вы покупаете в соседнем магазине ручку и бейджик и пишете на нём, что вы являетесь сотрудником этой шашлычной. Вы незаметно проникаете в шашлычную и видите, какая тут есть продукция. Она вас не очень впечатляет, но вы очень хотите есть. И что же теперь делать.";
варианты: [
("Купить шашлык", плохой_шашлык),
("Пойти в хорошую шашлычную", дорога_к_хорошей),
("Поесть шашлык дома", поход_в_магазин)
];
}
школьники_безобидные: {
тип: действие;
описание: "Вы начинаете проходить рядом, и… ничего не происходит. Это обыкновенные школьники. Они просто пьют пиво, и больше ничего. И чего мне бояться школьников в свои 35 лет. По дороге в шашлючную вы понимаете, что денег не так много и нужно что-то сделать.";
варианты: [
("Заработать деньги", заработал_деньги),
("Договориться с продавщицей", торг_провалился),
("Пойти в дешёвую шашлычную", дешевая_очередь)
];
}
школьники_пьют: {
тип: действие;
описание: "Ребят становилось всё больше и больше, они пили всё больше и больше. Так продолжалось несколько часов, а когда приехали полицейские, было уже поздно. Шашлычная закрылась.";
варианты: [
("Пойти домой и приготовить шашлык", поход_в_магазин)
];
}
торг_провалился: {
тип: действие;
описание: "Распахнулась дверь, вы вошли в шашлючную. С дерзким голосом вы стали торговаться с продавщицей. Всё закончилось тем, что шашлык вам не дали.";
варианты: [
("Заработать деньги", заработал_деньги),
("Пойти в дешёвую шашлычную", дешевая_очередь)
];
}
// Концовки
попал_в_демонстрацию: {
тип: концовка;
название: "Нужно быть смелее ради шашлыка";
описание: "Вы начинаете обходить толпу злых школьников, но вдруг вы попадаете в многотысячную толпу демонстрантов, которая уносит вас очень далеко от вашего шашлыка. Вы не можете сопротивляться толпе и находитесь в ней несколько часов. Когда вы добираетесь до шашлычной, она уже закрыта, и все шашлыки распродали.";
}
поймали_вора: {
тип: концовка;
название: "Воровать-плохо!";
описание: "Вы запихиваете продукты куда только можно, во все карманы и щели. И чтобы не привлекать внимания вы покупаете одну помидорку. Вы уже собираетесь уходить, как вдруг у вас из кармана вываливается лук. Через секунду вы уже лежите на полу на всех своих украденных продуктах. Точнее то, что от них осталось. Теперь вы точно будете есть хорошо 15 суток, с хорошей компанией. Правда с грязной одеждой.";
}
овощное_рагу: {
тип: концовка;
название: "Ни рыба, ни мясо";
описание: "Купив только овощи, вы идёте домой, достаёте из холодильника последние яйца и делаете рагу. Довольно вкусно, но мясо то хочется.";
}
плохой_шашлык: {
тип: концовка;
название: "Я за шашлык собаку съем";
описание: "Ух, какой вкусный шашлык. Просто объедение. Это самая лучшая шашлычная, в которой я ел. Если не считать того, что я испытал незабываемую ночь в туалете… Зато это опыт… Наверное…";
}
заработал_деньги: {
тип: концовка;
название: "Да здравствует шашлык";
описание: "Чтобы заработать, вы пособирали мусор (шары, ленты, кепки) возле площади и стали его продавать. Через час вы набрали довольно хорошую сумму и смогли купить шашлык. Желудок доволен, и вы сыты.";
}
}
// Начальный узел
начало: старт;
}
конец;

20
examples/minimal.ql Normal file
View File

@@ -0,0 +1,20 @@
квест ТестКвеста;
цель "Простой тест";
граф {
узлы {
старт: {
тип: начальный;
описание: "Начало теста";
переходы: [конец];
}
конец: {
тип: концовка;
описание: "Конец теста";
название: "Успех";
}
}
начало: старт;
}