From df2c4f04343dd203c149d1ef46703d2cbaf7e5ef Mon Sep 17 00:00:00 2001 From: Yuriy Mayatnikov Date: Sat, 27 Jun 2026 14:26:14 +0300 Subject: [PATCH] Replace placeholder question sets --- README.md | 25 +- src/lib/question-sets/animals.ts | 234 ------------------ src/lib/question-sets/cozy.ts | 232 ----------------- .../question-sets/family-knowledge-journey.ts | 234 ++++++++++++++++++ src/lib/question-sets/index.ts | 5 +- 5 files changed, 252 insertions(+), 478 deletions(-) delete mode 100644 src/lib/question-sets/animals.ts delete mode 100644 src/lib/question-sets/cozy.ts create mode 100644 src/lib/question-sets/family-knowledge-journey.ts diff --git a/README.md b/README.md index 1274e9c..a359406 100644 --- a/README.md +++ b/README.md @@ -31,14 +31,21 @@ npm run check # проверка типов (svelte-check) - **Засчитать частично +N/2** — для «почти правильного» ответа ведущий может дать половину стоимости вопроса; - **Не засчитывать** — без очков, но вопрос закрыт. - - Штрафов и минусов нет. -4. У некоторых вопросов есть необязательная **подсказка** 💡. Ведущий может + - Для обычных вопросов штрафов и минусов нет. +4. Иногда вместо обычного вопроса открывается **аукцион** — спецвопрос в стиле + «Своей игры». Ведущий назначает ставку и открывает случайный вопрос, затем + решает: + - **Засчитать +N** — команде идут очки; + - **Не засчитать** — с команды **снимается ставка**, но счёт не уходит в минус. + Пока аукцион не разрешён, ведущий может его отменить и вернуться к табло + без потерь. +5. У некоторых вопросов есть необязательная **подсказка** 💡. Ведущий может показать её по желанию. Если подсказка показана — ответ засчитывается только за половину стоимости: мягкая помощь без давления. -5. Для творческих вопросов (type `creative`) кнопка мягче: +6. Для творческих вопросов (type `creative`) кнопка мягче: «Засчитать творческий ответ +N». -6. Сыгранный вопрос затемняется и больше не выбирается. -7. Когда сыграны все вопросы — экран результата с мягкой финальной фразой. +7. Сыгранный вопрос затемняется и больше не выбирается. +8. Когда сыграны все вопросы — экран результата с мягкой финальной фразой. Прогресс сохраняется автоматически — после перезагрузки игра продолжится с того же места. @@ -82,8 +89,9 @@ npm run check # проверка типов (svelte-check) 2. Зарегистрируйте набор в `src/lib/question-sets/index.ts`: ```ts + import { familyKnowledgeJourneySet } from './family-knowledge-journey'; import { mySet } from './my-set'; - export const questionSets = [animalsSet, cozySet, mySet]; + export const questionSets = [familyKnowledgeJourneySet, mySet]; ``` Готово — набор автоматически появится на экране выбора. @@ -97,9 +105,8 @@ src/ ├─ lib/ │ ├─ types.ts # Доменные типы (Question, Category, QuestionSet, GameState) │ ├─ question-sets/ # ДАННЫЕ (отделены от UI) -│ │ ├─ animals.ts # набор-заглушка -│ │ ├─ cozy.ts # набор-заглушка -│ │ └─ index.ts # реестр наборов + хелперы поиска +│ │ ├─ family-knowledge-journey.ts # набор вопросов +│ │ └─ index.ts # реестр наборов + хелперы поиска │ ├─ stores/ │ │ └─ game.ts # СОСТОЯНИЕ игры (Svelte store + localStorage) │ └─ components/ # UI-компоненты diff --git a/src/lib/question-sets/animals.ts b/src/lib/question-sets/animals.ts deleted file mode 100644 index e520af6..0000000 --- a/src/lib/question-sets/animals.ts +++ /dev/null @@ -1,234 +0,0 @@ -import type { QuestionSet } from '$lib/types'; - -/** - * Тестовый набор-заглушка: «Животные». - * - * Это пример структуры данных и НЕ содержит реального контента — - * только простые вопросы-заглушки. Реальные наборы добавляются отдельно - * по той же схеме. В каждой категории ровно 5 вопросов с очками - * 100 / 200 / 300 / 500 / 1000. - */ -export const animalsSet: QuestionSet = { - id: 'animals', - title: 'Животные', - description: 'Знакомые звери и птицы — тёплый разогрев для всей семьи.', - ageRange: '6+ лет', - categories: [ - { - id: 'who', - title: 'Кто это?', - questions: [ - { - id: 'q1', - points: 100, - question: 'Кто говорит «мяу»?', - answer: 'Кошка', - type: 'strict' - }, - { - id: 'q2', - points: 200, - question: 'У какой крупной дикой кошки самец носит пышную гриву?', - answer: 'Лев', - optionalHint: 'Его часто называют царём зверей.', - type: 'strict' - }, - { - id: 'q3', - points: 300, - question: 'Какое животное носит дом на спине?', - answer: 'Улитка (или черепаха)', - type: 'strict' - }, - { - id: 'q4', - points: 500, - question: 'Какое самое крупное наземное животное?', - answer: 'Африканский слон', - optionalHint: 'У него большие уши и хобот.', - type: 'strict' - }, - { - id: 'q5', - points: 1000, - question: 'Какое морское животное — млекопитающее, а не рыба?', - answer: 'Кит или дельфин', - optionalHint: 'Оно дышит воздухом и кормит детёнышей молоком.', - type: 'strict' - } - ] - }, - { - id: 'where', - title: 'Где живут?', - questions: [ - { - id: 'q1', - points: 100, - question: 'Где живёт аквариумная рыбка?', - answer: 'В аквариуме (в воде)', - type: 'strict' - }, - { - id: 'q2', - points: 200, - question: 'Как называется домик для пчёл?', - answer: 'Улей (или пасека)', - type: 'strict' - }, - { - id: 'q3', - points: 300, - question: 'В каком холодном месте живут белые медведи?', - answer: 'В Арктике (на Северном полюсе / во льдах)', - type: 'strict' - }, - { - id: 'q4', - points: 500, - question: 'Где можно встретить стаю диких обезьян?', - answer: 'В тропическом лесу / джунглях', - optionalHint: 'Там тепло, влажно и много деревьев.', - type: 'strict' - }, - { - id: 'q5', - points: 1000, - question: 'В какой природной зоне живут верблюды?', - answer: 'В пустыне', - optionalHint: 'Их называют «кораблями» этих мест.', - type: 'strict' - } - ] - }, - { - id: 'invent', - title: 'Придумай сам', - questions: [ - { - id: 'q1', - points: 100, - question: 'Придумай ласковое прозвище для котёнка.', - answer: 'Любое тёплое имя (например: Пушок, Мурлык)', - type: 'creative' - }, - { - id: 'q2', - points: 200, - question: 'Каким голосом, по-твоему, разговаривает собака?', - answer: 'Любой творческий ответ', - optionalHint: 'Это фантазийный вопрос — поощряй воображение.', - type: 'creative' - }, - { - id: 'q3', - points: 300, - question: 'Придумай, чем хобот слона может быть полезен.', - answer: 'Любая идея (пить, обниматься, душ, рисовать)', - type: 'creative' - }, - { - id: 'q4', - points: 500, - question: 'Опиши воображаемого зверя, который живёт на диване.', - answer: 'Любой фантазийный ответ', - optionalHint: 'Чем нелепее и добрее — тем лучше.', - type: 'creative' - }, - { - id: 'q5', - points: 1000, - question: 'Придумай короткую сказку про дружбу кота и пчелы.', - answer: 'Любой связный рассказ', - type: 'creative' - } - ] - }, - { - id: 'babies', - title: 'Кто чей детёныш?', - questions: [ - { - id: 'q1', - points: 100, - question: 'Как называется детёныш кошки?', - answer: 'Котёнок', - type: 'strict' - }, - { - id: 'q2', - points: 200, - question: 'Как называют детёныша собаки?', - answer: 'Щенок', - type: 'strict' - }, - { - id: 'q3', - points: 300, - question: 'Как называется детёныш коровы?', - answer: 'Телёнок', - type: 'strict' - }, - { - id: 'q4', - points: 500, - question: 'Как называют детёныша лягушки, пока он ещё не стал взрослым?', - answer: 'Головастик', - optionalHint: 'Он живёт в воде и у него есть хвостик.', - type: 'strict' - }, - { - id: 'q5', - points: 1000, - question: 'Как называется детёныш лошади?', - answer: 'Жеребёнок', - optionalHint: 'Мама у него — кобыла, а папа — жеребец.', - type: 'strict' - } - ] - }, - { - id: 'food', - title: 'Чем питаются?', - questions: [ - { - id: 'q1', - points: 100, - question: 'Какой оранжевый овощ любят грызть кролики?', - answer: 'Морковку (и капусту)', - type: 'strict' - }, - { - id: 'q2', - points: 200, - question: 'Какой корм чаще всего нравится кошке?', - answer: 'Рыба (и молоко)', - type: 'strict' - }, - { - id: 'q3', - points: 300, - question: 'Чем питается бабочка, когда садится на цветы?', - answer: 'Нектаром (сладким соком цветов)', - type: 'strict' - }, - { - id: 'q4', - points: 500, - question: 'Каким высоким растением почти полностью питается большая панда?', - answer: 'Бамбуком', - optionalHint: 'Он зелёный, высокий и немного похож на траву.', - type: 'strict' - }, - { - id: 'q5', - points: 1000, - question: 'Какое животное почти всю жизнь ест только листья эвкалипта?', - answer: 'Коала', - optionalHint: 'Она живёт в Австралии и подолгу спит на деревьях.', - type: 'strict' - } - ] - } - ] -}; diff --git a/src/lib/question-sets/cozy.ts b/src/lib/question-sets/cozy.ts deleted file mode 100644 index 1e5238a..0000000 --- a/src/lib/question-sets/cozy.ts +++ /dev/null @@ -1,232 +0,0 @@ -import type { QuestionSet } from '$lib/types'; - -/** - * Тестовый набор-заглушка: «Уютные вечера». - * - * Содержит простые вопросы-заглушки без реального контента — структура - * данных и форматирование. Каждая категория содержит ровно 5 вопросов - * с очками 100 / 200 / 300 / 500 / 1000. - */ -export const cozySet: QuestionSet = { - id: 'cozy-evenings', - title: 'Уютные вечера', - description: 'Спокойные вопросы про дом, сон и вечерние ритуалы.', - ageRange: 'вся семья', - categories: [ - { - id: 'bedtime', - title: 'Перед сном', - questions: [ - { - id: 'q1', - points: 100, - question: 'Что мы надеваем перед тем, как лечь спать?', - answer: 'Пижаму', - type: 'strict' - }, - { - id: 'q2', - points: 200, - question: 'Как называется мягкая подушка-одеяло, в которую закутываются?', - answer: 'Плед', - type: 'strict' - }, - { - id: 'q3', - points: 300, - question: 'Что светит в окно ночью на небе?', - answer: 'Луна (и звёзды)', - type: 'strict' - }, - { - id: 'q4', - points: 500, - question: 'Как называется горячий вечерний напиток из молока?', - answer: 'Какао (или горячий шоколад / тёплое молоко)', - optionalHint: 'Его часто пьют перед сном.', - type: 'strict' - }, - { - id: 'q5', - points: 1000, - question: 'Что нужно сделать с кроватью, чтобы в ней было уютно спать?', - answer: 'Заправить / застелить / взбить подушку', - optionalHint: 'Это вечерний ритуал порядка.', - type: 'strict' - } - ] - }, - { - id: 'home', - title: 'Дом и семья', - questions: [ - { - id: 'q1', - points: 100, - question: 'Кто будит всех по утрам в семье самым первым? (по-твоему)', - answer: 'Любой правдоподобный ответ (мама, папа, кот, будильник)', - type: 'creative' - }, - { - id: 'q2', - points: 200, - question: 'Где семья чаще всего ужинает вместе?', - answer: 'На кухне / за столом', - type: 'strict' - }, - { - id: 'q3', - points: 300, - question: 'Что висит на стене и показывает время в доме?', - answer: 'Часы', - type: 'strict' - }, - { - id: 'q4', - points: 500, - question: 'Как называется лампа на прикроватной тумбочке?', - answer: 'Настольная лампа / ночник', - optionalHint: 'Она даёт мягкий свет вечером.', - type: 'strict' - }, - { - id: 'q5', - points: 1000, - question: 'Какой домашний вечерний ритуал помогает уснуть спокойнее?', - answer: 'Чтение сказки / тёплый напиток / тёплый душ / тишину', - optionalHint: 'Главное — чтобы было тихо и тепло.', - type: 'creative' - } - ] - }, - { - id: 'dreams', - title: 'Фантазии перед сном', - questions: [ - { - id: 'q1', - points: 100, - question: 'Если бы ты мог летать во сне, куда бы ты полетел?', - answer: 'Любой творческий ответ', - type: 'creative' - }, - { - id: 'q2', - points: 200, - question: 'Какой цвет ты бы выбрал для звёзд?', - answer: 'Любой цвет с объяснением', - optionalHint: 'Может быть даже необычный.', - type: 'creative' - }, - { - id: 'q3', - points: 300, - question: 'Придумай имя для доброго ночного облачка.', - answer: 'Любое мягкое имя', - type: 'creative' - }, - { - id: 'q4', - points: 500, - question: 'Опиши самый уютный сон, который ты можешь представить.', - answer: 'Любой тёплый рассказ', - optionalHint: 'Мягкие цвета, тёплое место, добрые герои.', - type: 'creative' - }, - { - id: 'q5', - points: 1000, - question: 'Сочини доброе пожелание перед сном для всей семьи.', - answer: 'Любое искреннее пожелание', - type: 'creative' - } - ] - }, - { - id: 'morning', - title: 'Доброе утро', - questions: [ - { - id: 'q1', - points: 100, - question: 'Что мы чистим по утрам зубной щёткой?', - answer: 'Зубы', - type: 'strict' - }, - { - id: 'q2', - points: 200, - question: 'Как называется приём пищи, который бывает первым после сна?', - answer: 'Завтрак', - type: 'strict' - }, - { - id: 'q3', - points: 300, - question: 'Что нужно сделать с постелью, когда ты встал утром?', - answer: 'Заправить / застелить кровать', - type: 'strict' - }, - { - id: 'q4', - points: 500, - question: 'Как называются лёгкие упражнения, которые делают по утрам?', - answer: 'Зарядка', - optionalHint: 'Она помогает проснуться и взбодриться.', - type: 'strict' - }, - { - id: 'q5', - points: 1000, - question: 'Что приятно увидеть в окно ясным утром?', - answer: 'Солнце (солнечный свет)', - optionalHint: 'Оно медленно поднимается над горизонтом.', - type: 'strict' - } - ] - }, - { - id: 'tales', - title: 'Сказки и истории', - questions: [ - { - id: 'q1', - points: 100, - question: 'Как зовут сказочную девочку с красной шапочкой?', - answer: 'Красная Шапочка', - type: 'strict' - }, - { - id: 'q2', - points: 200, - question: 'Как зовут деревянного мальчика, которого выстругал папа Карло?', - answer: 'Буратино', - type: 'strict' - }, - { - id: 'q3', - points: 300, - question: 'На чём Золушка отправилась на бал?', - answer: 'В карете из тыквы (в хрустальных туфельках)', - type: 'strict' - }, - { - id: 'q4', - points: 500, - question: 'Какой волшебный цветок исполнял семь желаний?', - answer: 'Цветик-семицветик', - optionalHint: 'У него было семь разноцветных лепестков.', - type: 'strict' - }, - { - id: 'q5', - points: 1000, - question: 'Придумай название для доброй новой сказки про домашнего любимца.', - answer: 'Любое тёплое творческое название', - optionalHint: 'Пусть оно звучит уютно и приглашает послушать историю.', - type: 'creative' - } - ] - } - ] -}; diff --git a/src/lib/question-sets/family-knowledge-journey.ts b/src/lib/question-sets/family-knowledge-journey.ts new file mode 100644 index 0000000..2952c61 --- /dev/null +++ b/src/lib/question-sets/family-knowledge-journey.ts @@ -0,0 +1,234 @@ +import type { QuestionSet } from '$lib/types'; + +/** + * Основной набор вопросов: «Большое семейное путешествие». + * + * Тёплый набор про космос, природу, Землю, книги и добрые фантазии для + * спокойной семейной игры. Каждая категория содержит ровно 5 вопросов с очками + * 100 / 200 / 300 / 500 / 1000. id вопросов уникальны в пределах категории. + */ +export const familyKnowledgeJourneySet: QuestionSet = { + id: 'family-knowledge-journey', + title: 'Большое семейное путешествие', + description: + 'Тёплый набор вопросов про космос, природу, Землю, книги и добрые фантазии для спокойной семейной игры.', + ageRange: '6+ лет / вся семья', + categories: [ + { + id: 'space-nearby', + title: 'Космос рядом', + questions: [ + { + id: 'q1', + points: 100, + question: 'Как называется звезда, вокруг которой вращается Земля?', + answer: 'Солнце', + type: 'strict' + }, + { + id: 'q2', + points: 200, + question: 'Сколько планет в Солнечной системе?', + answer: 'Восемь', + optionalHint: 'Плутон сейчас относят к карликовым планетам.', + type: 'strict' + }, + { + id: 'q3', + points: 300, + question: 'Как называется естественный спутник Земли?', + answer: 'Луна', + type: 'strict' + }, + { + id: 'q4', + points: 500, + question: 'Какую планету часто называют Красной планетой?', + answer: 'Марс', + optionalHint: 'Её цвет связан с ржавчиной в грунте.', + type: 'strict' + }, + { + id: 'q5', + points: 1000, + question: 'Какая планета самая большая в Солнечной системе?', + answer: 'Юпитер', + type: 'strict' + } + ] + }, + { + id: 'living-nature', + title: 'Живая природа', + questions: [ + { + id: 'q1', + points: 100, + question: 'Какое домашнее животное обычно мурлычет, когда ему спокойно?', + answer: 'Кошка', + type: 'strict' + }, + { + id: 'q2', + points: 200, + question: 'Какая птица не летает, зато отлично плавает?', + answer: 'Пингвин', + optionalHint: 'Её крылья похожи на ласты.', + type: 'strict' + }, + { + id: 'q3', + points: 300, + question: 'Дельфин — это рыба или млекопитающее?', + answer: 'Млекопитающее', + optionalHint: 'Он поднимается к поверхности, чтобы вдохнуть воздух.', + type: 'strict' + }, + { + id: 'q4', + points: 500, + question: 'Какое млекопитающее умеет по-настоящему летать, а не просто планировать?', + answer: 'Летучая мышь', + type: 'strict' + }, + { + id: 'q5', + points: 1000, + question: 'У какого морского животного три сердца и голубоватая кровь?', + answer: 'У осьминога', + optionalHint: 'У него восемь щупалец.', + type: 'strict' + } + ] + }, + { + id: 'earth-and-water', + title: 'Земля и вода', + questions: [ + { + id: 'q1', + points: 100, + question: 'Что падает с неба каплями во время дождя?', + answer: 'Вода', + type: 'strict' + }, + { + id: 'q2', + points: 200, + question: 'Как называется процесс, когда вода превращается в пар?', + answer: 'Испарение', + optionalHint: 'Так бывает с лужей в солнечный день.', + type: 'strict' + }, + { + id: 'q3', + points: 300, + question: 'Как называется самый большой океан на Земле?', + answer: 'Тихий океан', + type: 'strict' + }, + { + id: 'q4', + points: 500, + question: 'Как называется самая высокая гора над уровнем моря?', + answer: 'Эверест', + optionalHint: 'Она находится в Гималаях.', + type: 'strict' + }, + { + id: 'q5', + points: 1000, + question: 'Назовите три главные части круговорота воды.', + answer: 'Испарение, конденсация и осадки', + optionalHint: 'Вода поднимается, собирается в облака и возвращается обратно.', + type: 'strict' + } + ] + }, + { + id: 'books-and-tales', + title: 'Книги и сказки', + questions: [ + { + id: 'q1', + points: 100, + question: 'Кто ушёл от бабушки и дедушки и покатился по дорожке?', + answer: 'Колобок', + type: 'strict' + }, + { + id: 'q2', + points: 200, + question: 'Что тянули дед, бабка, внучка, Жучка, кошка и мышка?', + answer: 'Репку', + type: 'strict' + }, + { + id: 'q3', + points: 300, + question: 'Как зовут девочку, которая попала в Страну чудес?', + answer: 'Алиса', + type: 'strict' + }, + { + id: 'q4', + points: 500, + question: 'Кто написал сказку в стихах про доброго доктора Айболита?', + answer: 'Корней Чуковский', + optionalHint: 'Этот автор написал ещё «Мойдодыра».', + type: 'strict' + }, + { + id: 'q5', + points: 1000, + question: 'В какой сказке маленькая девочка появилась из цветка?', + answer: '«Дюймовочка»', + type: 'strict' + } + ] + }, + { + id: 'kind-imagination', + title: 'Добрая фантазия', + questions: [ + { + id: 'q1', + points: 100, + question: 'Придумайте доброе название для команды путешественников.', + answer: 'Любое доброе и семейное название команды.', + type: 'creative' + }, + { + id: 'q2', + points: 200, + question: 'Назовите три вещи, которые можно взять в спокойное семейное путешествие.', + answer: 'Любые три безопасные и подходящие вещи.', + type: 'creative' + }, + { + id: 'q3', + points: 300, + question: 'Придумайте короткое вежливое правило для викторины.', + answer: 'Любое дружелюбное правило, которое помогает играть честно и спокойно.', + type: 'creative' + }, + { + id: 'q4', + points: 500, + question: 'Опишите необычное животное, которое могло бы жить на мирной сказочной планете.', + answer: 'Любое доброе творческое описание без страшных, грубых или спорных деталей.', + optionalHint: 'Можно придумать внешний вид, характер и любимое занятие.', + type: 'creative' + }, + { + id: 'q5', + points: 1000, + question: + 'Составьте мини-загадку про один предмет в комнате так, чтобы другие могли его отгадать.', + answer: 'Любая понятная загадка с ответом, которую игроки действительно могут отгадать.', + type: 'creative' + } + ] + } + ] +}; diff --git a/src/lib/question-sets/index.ts b/src/lib/question-sets/index.ts index 493d41f..1b42199 100644 --- a/src/lib/question-sets/index.ts +++ b/src/lib/question-sets/index.ts @@ -1,6 +1,5 @@ import type { Category, Question, QuestionRef, QuestionSet } from '$lib/types'; -import { animalsSet } from './animals'; -import { cozySet } from './cozy'; +import { familyKnowledgeJourneySet } from './family-knowledge-journey'; /** * Реестр всех доступных наборов вопросов. @@ -14,7 +13,7 @@ import { cozySet } from './cozy'; * │ Всё — на экране выбора набор появится автоматически. │ * └───────────────────────────────────────────────────────────────────────┘ */ -export const questionSets: QuestionSet[] = [animalsSet, cozySet]; +export const questionSets: QuestionSet[] = [familyKnowledgeJourneySet]; /* ----------------------------------------------------------------------- */ /* Хелперы поиска по данным (без состояния). */