Realatorum Paradox

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Realatorum Paradox » Витрина » Развлечения


Развлечения

Сообщений 1 страница 5 из 5

1

Набольшие игры для форумов

2

Генератор сюжетов

[html]<!-- Начало кода Динамического Генератора Ивентов для АМС -->
<div id="bleach-gm-event-generator-v2">
    <div class="gm-header">
        <h2>СИНТЕТИЗАТОР СЦЕНАРИЕВ: АМС</h2>
        <p class="gm-subtitle">Запрос новой директивы для оперативного развертывания...</p>
    </div>
   
    <div class="gm-dossier">
        <div class="gm-dossier-row">
            <strong>ТИП ОПЕРАЦИИ:</strong>
            <span id="gm-event-type">[Ожидание данных]</span>
        </div>
        <div class="gm-dossier-row">
            <strong>АНАЛИЗ СИТУАЦИИ (ЗАВЯЗКА):</strong>
            <span id="gm-event-concept">[Ожидание данных]</span>
        </div>
        <div class="gm-dossier-row">
            <strong>СЕКТОР ДЕЙСТВИЯ (ЛОКАЦИЯ):</strong>
            <span id="gm-event-location">[Ожидание данных]</span>
        </div>
        <div class="gm-dossier-row">
            <strong>ОСНОВНАЯ ЗАДАЧА (ЦЕЛЬ):</strong>
            <span id="gm-event-objective">[Ожидание данных]</span>
        </div>
        <div class="gm-dossier-row gm-complication-row">
            <strong>ВЕРОЯТНОЕ ОСЛОЖНЕНИЕ (ТВИСТ):</strong>
            <span id="gm-event-complication">[Ожидание данных]</span>
        </div>
    </div>
   
    <div class="gm-footer">
        <p>// Примечание: Данные являются отправной точкой. Адаптация и импровизация — ключ к успеху миссии.</p>
        <button id="gm-generate-btn">► Сгенерировать новый сценарий</button>
    </div>

    <style>
        #bleach-gm-event-generator-v2 {
            --gm-bg: #1a1c1d;
            --gm-border: #00bcd4;
            --gm-text: #e0e0e0;
            --gm-accent-text: #80deea;
            --gm-red-text: #ff8a80;

            font-family: 'Consolas', 'Menlo', 'Courier New', monospace;
            background: var(--gm-bg);
            border: 1px solid #2a2a2a;
            padding: 25px;
            max-width: 800px;
            margin: 20px auto;
            color: var(--gm-text);
            box-shadow: inset 0 0 15px rgba(0,0,0,0.5);
        }
       
        #bleach-gm-event-generator-v2 .gm-header { text-align: center; border-bottom: 1px solid #333; padding-bottom: 15px; margin-bottom: 20px; }
        #bleach-gm-event-generator-v2 h2 { margin: 0; color: var(--gm-border); letter-spacing: 2px; }
        #bleach-gm-event-generator-v2 .gm-subtitle { margin: 5px 0 0 0; color: #777; font-size: 0.9em; }
        #bleach-gm-event-generator-v2 .gm-dossier { background: rgba(0,0,0,0.2); padding: 20px; border-left: 3px solid var(--gm-border); }
        #bleach-gm-event-generator-v2 .gm-dossier-row { margin-bottom: 18px; line-height: 1.6; }
        #bleach-gm-event-generator-v2 .gm-dossier-row strong { color: var(--gm-accent-text); display: block; margin-bottom: 4px;}
        #bleach-gm-event-generator-v2 .gm-complication-row strong { color: var(--gm-red-text); }
        #bleach-gm-event-generator-v2 .gm-footer { text-align: center; margin-top: 20px; padding-top: 15px; border-top: 1px solid #333; }
        #bleach-gm-event-generator-v2 .gm-footer p { font-size: 0.9em; color: #666; }
        #bleach-gm-event-generator-v2 #gm-generate-btn { background: var(--gm-border); color: #111; border: none; padding: 12px 25px; font-family: 'Consolas', monospace; font-size: 1.1em; font-weight: bold; cursor: pointer; transition: all 0.2s; margin-top: 10px; }
        #bleach-gm-event-generator-v2 #gm-generate-btn:hover { background: #4dd0e1; box-shadow: 0 0 15px var(--gm-border); }
    </style>

    <script>
        { // Изолирующий блок
            // --- БАЗА КОМПОНЕНТОВ ---
            const eventTypes = ["Мини-квест (1-3 игрока)", "Локальный ивент", "Социальный ивент", "Боевое событие", "Мистическое расследование", "Завязка для арки", "Политическая интрига", "Экспедиция"];
           
            // Компоненты для ЗАВЯЗКИ
            const agents = ["Группа арранкаров-ренегатов", "Древний артефакт, пробудившийся от сна", "Таинственный культ из Руконгая", "Сбежавший эксперимент из НИИ", "Призрак могущественного синигами прошлого", "Неизвестный фуллбрингер", "Заблудившаяся в Сейрейтее душа Плюса с уникальной силой", "Отряд квинси-разведчиков", "Необычайно сильный и хитрый пустой", "Аномальное слияние нескольких душ"];
            const actions = ["пытается открыть нелегальный портал", "распространяет аномальную духовную энергию", "похищает душ с особыми способностями", "пытается захватить контроль над важным объектом", "ищет способ уничтожить защитный барьер", "создает иллюзии, сводящие с ума", "оставляет зашифрованные послания", "активирует древние руины", "вербует сторонников среди жителей Руконгая", "разрушает поток духовных частиц"];
            const consequences = ["что искажает реальность в определённом секторе", "что вызывает панику среди жителей", "что привлекает внимание враждебных фракций", "что может привести к крупномасштабному вторжению", "что угрожает балансу душ", "что создает временные петли", "что может раскрыть тайну Общества Душ", "что истощает духовную энергию в округе"];

            // Компоненты для ЦЕЛИ
            const objectiveVerbs = ["Расследовать", "Защитить", "Эвакуировать", "Захватить", "Нейтрализовать", "Провести разведку", "Найти и доставить", "Расшифровать", "Выследить и обезвредить", "Пережить"];
            const objectiveNouns = ["источник аномалии", "важного NPC", "мирных жителей из зоны опасности", "вражеского лидера", "нестабильный артефакт", "местонахождение вражеской базы", "ценные разведданные", "похищенных синигами", "ключ к решению проблемы", "волны нападающих"];
            const objectiveConditions = ["не привлекая лишнего внимания", "до прибытия подкрепления", "используя только ограниченный набор способностей", "пока не стало слишком поздно", "прежде чем враг завершит свой ритуал", "не допустив жертв среди гражданских", "не нарушая приказ о неразглашении", "в условиях полного радиомолчания"];
           
            // Расширенные списки
            const locations = ["В трущобах 78-го района Руконгая", "На территории Академии Синигами", "В деловом квартале Каракуры", "В Уэко Мундо, недалеко от Лас Ночес", "В бараках 11-го отряда", "На закрытой территории поместья Кучики", "В подземных туннелях под Сейрейтеем", "В лесу Меносов", "В магазине Кискэ Урахары", "На Арене Покаяния", "Внутри заброшенной лаборатории НИИ", "На одной из тренировочных площадок", "В тихом храме на окраине Сейрейтея", "На крышах высотных зданий Каракуры", "Внутри Искаженного пространства (Дангай)"];
            const complications = ["Главный подозреваемый оказывается на самом деле жертвой.", "Артефакт, который нужно найти, обладает сознанием и не хочет, чтобы его находили.", "Приказы начальства оказываются ложью или провокацией.", "В конфликт вмешивается третья, неизвестная сторона.", "Источник проблемы — невинный ребенок, не контролирующий свою силу.", "Решение одной проблемы немедленно порождает другую, еще более серьезную.", "Один из NPC-союзников на самом деле предатель.", "Местные жители активно мешают расследованию, защищая виновника.", "Способности игроков временно ослаблены или изменены из-за аномалии.", "Враг знает о каждом шаге игроков.", "Моральная дилемма: для победы нужно пожертвовать чем-то или кем-то важным.", "Погода или окружение становятся отдельным противником.", "Оборудование (гигаи, телефоны душ) выходит из строя в самый неподходящий момент."];

            const generator = document.getElementById('bleach-gm-event-generator-v2');
            const typeSpan = generator.querySelector('#gm-event-type');
            const conceptSpan = generator.querySelector('#gm-event-concept');
            const locationSpan = generator.querySelector('#gm-event-location');
            const objectiveSpan = generator.querySelector('#gm-event-objective');
            const complicationSpan = generator.querySelector('#gm-event-complication');
            const button = generator.querySelector('#gm-generate-btn');

            function getRandomItem(arr) { return arr[Math.floor(Math.random() * arr.length)]; }

            function generateEvent() {
                // Динамическая сборка Завязки
                const agent = getRandomItem(agents);
                const action = getRandomItem(actions);
                const consequence = getRandomItem(consequences);
                conceptSpan.textContent = `${agent} ${action}, ${consequence}.`;

                // Динамическая сборка Цели
                const verb = getRandomItem(objectiveVerbs);
                const noun = getRandomItem(objectiveNouns);
                const condition = getRandomItem(objectiveConditions);
                objectiveSpan.textContent = `${verb} ${noun}, ${condition}.`;
               
                // Выбор остальных компонентов
                typeSpan.textContent = getRandomItem(eventTypes);
                locationSpan.textContent = getRandomItem(locations);
                complicationSpan.textContent = getRandomItem(complications);
            }

            if(button) {
                button.addEventListener('click', generateEvent);
                generateEvent(); // Первый запуск
            }
        }
    </script>
</div>
<!-- Конец кода Динамического Генератора Ивентов для АМС -->[/html]

3

генератор альтернативы

[html]<!-- Начало кода Генератора AU-Ивентов -->
<div id="bleach-au-generator-v2">
    <h2>Генератор Альтернативных Вселенных</h2>
   
    <div class="au-rules-container">
        <button class="au-rules-toggle">Как это работает? (Нажмите, чтобы раскрыть)</button>
        <div class="au-rules-content">
            <p><strong>Это ваш шанс дать волю воображению!</strong></p>
            <p>Этот генератор создает случайный сценарий Альтернативной Вселенной (AU) для вашего персонажа. Ваша задача — погрузиться в эти необычные условия и описать, как бы ваш герой жил, что чувствовал и с какими трудностями сталкивался.</p>
            <ul>
                <li><strong>Цель:</strong> Написать небольшой пост (от 1500-2000 символов) или сделать творческую работу (арт, коллаж) на заданную тему.</li>
                <li><strong>Где публиковать:</strong> В специальной теме во флуде или в творческом разделе вашего форума.</li>
                <li><strong>Нет давления:</strong> Это развлечение для удовольствия. Не бойтесь экспериментировать и пробовать самые смелые идеи!</li>
            </ul>
            <p>Сделайте скриншот выпавшего вам сценария и прикрепите к своему посту. Удачи!</p>
        </div>
    </div>
   
    <div class="au-prompt-box">
        <p><strong>Что, если бы ваш персонаж...</strong></p>
        <h3 id="au-output">...нажал на эту кнопку?</h3>
    </div>
   
    <button id="au-generate-btn">🌀 Получить новую реальность</button>

    <style>
        #bleach-au-generator-v2 {
            --au-purple: #8e44ad;
            --au-yellow: #f1c40f;
            --au-bg: #2c2c54;
            --au-bg-light: #3e3e75;
           
            font-family: 'Roboto', 'Helvetica Neue', sans-serif;
            background: var(--au-bg);
            background-image: linear-gradient(45deg, rgba(0,0,0,0.1) 25%, transparent 25%, transparent 50%, rgba(0,0,0,0.1) 50%, rgba(0,0,0,0.1) 75%, transparent 75%, transparent);
            background-size: 40px 40px;
            color: #fff;
            padding: 30px;
            border-radius: 15px;
            max-width: 700px;
            margin: 20px auto;
            text-align: center;
            border: 2px solid var(--au-purple);
            box-shadow: 0 0 20px rgba(142, 68, 173, 0.4);
        }
       
        #bleach-au-generator-v2 h2 {
            margin: 0 0 20px 0;
            font-size: 2.2em;
            text-transform: uppercase;
            color: #fff;
            text-shadow: 0 0 5px var(--au-purple);
        }
       
        #bleach-au-generator-v2 .au-rules-container {
            margin-bottom: 25px;
        }

        #bleach-au-generator-v2 .au-rules-toggle {
            width: 100%;
            background: none;
            border: 1px solid var(--au-purple);
            color: #ccc;
            padding: 10px;
            font-size: 1.1em;
            cursor: pointer;
            border-radius: 5px;
            transition: all 0.3s;
        }
       
        #bleach-au-generator-v2 .au-rules-toggle:hover {
            background: var(--au-purple);
            color: #fff;
        }

        #bleach-au-generator-v2 .au-rules-content {
            max-height: 0;
            overflow: hidden;
            text-align: left;
            background: rgba(0,0,0,0.2);
            border-radius: 0 0 5px 5px;
            transition: max-height 0.5s ease-out;
            padding: 0 20px;
        }

        #bleach-au-generator-v2 .au-rules-content.active {
            padding: 20px;
        }
       
        #bleach-au-generator-v2 .au-rules-content ul {
            list-style-type: '✧ ';
            padding-left: 20px;
        }
       
        #bleach-au-generator-v2 .au-rules-content li {
            margin-bottom: 10px;
        }
       
        #bleach-au-generator-v2 .au-prompt-box {
            background: rgba(0,0,0,0.3);
            border-radius: 10px;
            padding: 20px;
            margin-bottom: 25px;
            border-left: 3px solid var(--au-yellow);
        }
       
        #bleach-au-generator-v2 .au-prompt-box p { margin: 0; color: #ddd; font-size: 1.1em; }
       
        #bleach-au-generator-v2 #au-output {
            font-size: 1.8em;
            color: var(--au-yellow);
            margin: 10px 0 0 0;
            min-height: 50px;
            line-height: 1.4;
        }
       
        #bleach-au-generator-v2 #au-generate-btn {
            background: var(--au-purple);
            color: white;
            border: none;
            padding: 15px 35px;
            font-size: 1.2em;
            border-radius: 8px;
            cursor: pointer;
            transition: all 0.3s;
            text-transform: uppercase;
            letter-spacing: 1px;
        }
       
        #bleach-au-generator-v2 #au-generate-btn:hover {
            background-color: #9b59b6;
            transform: rotate(2deg) scale(1.05);
            box-shadow: 0 5px 15px rgba(0,0,0,0.4);
        }
    </style>

    <script>
        { // Изолирующий блок
            const auScenarios = [
                "...был учителем в старшей школе Каракуры?", "...работал бариста в уютном кафе?",
                "...стал рок-музыкантом в популярной группе?", "...оказался квинси, а не синигами?",
                "...поменялся телами со своим дзанпакто на день?", "...стал владельцем магазина сладостей?",
                "...был частным детективом в нуарном городе?", "...попал в мир жестокой видеоигры?",
                "...оказался членом клана Якудза?", "...стал популярным видеоблогером?",
                "...был пиратом в поисках сокровищ?", "...проснулся в теле другого капитана?",
                "...был обычным офисным работником, уставшим от рутины?", "...стал гонщиком в подпольных гонках?",
                "...был известным шеф-поваром со своей звездой Мишлен?", "...оказался в Хогвартсе на чужом факультете?",
                "...стал последним выжившим в зомби-апокалипсисе?", "...был королевским рыцарем в фэнтези-мире?",
                "...стал астронавтом на далекой планете?", "...был хранителем древней библиотеки?",
                "...оказался цирковым артистом?", "...был шпионом во времена Холодной войны?",
                "...стал фермером, выращивающим говорящие овощи?", "...был частью команды охотников за привидениями?",
                "...работал в цветочном магазине Юмичики?", "...попал в ситком с закадровым смехом?",
                "...оказался правителем маленького, но гордого королевства?", "...был наёмником в киберпанк-мегаполисе?",
                "...стал монахом в уединенном горном монастыре?", "...был моделью для модных журналов Сейрейтея?",
                "...оказался пациентом в больнице 4-го отряда с амнезией?", "...был гениальным ученым, как Маюри, но добрым?",
                "...стал профессиональным игроком в сёги?", "...был телохранителем важной персоны?",
                "...усыновил маленького пустого как питомца?", "...работал в службе доставки лапши?",
                "...попал в викторианскую Англию?", "...стал лидером повстанцев против тирании?",
                "...был художником, который не может найти вдохновение?", "...оказался в команде рейнджеров для защиты мира?",
                "...был вынужден работать в магазине Урахары за долги?", "...стал волшебной девочкой (или мальчиком)?",
                "...попал в мир, где кидо — единственный вид магии?", "...был смотрителем маяка на краю света?",
                "...стал археологом, ищущим артефакты в Уэко Мундо?", "...оказался тренером боевых покемонов?",
                "...был актером, играющим роль синигами в сериале?", "...открыл приют для бездомных модифицированных душ?"
            ];
           
            const generator = document.getElementById('bleach-au-generator-v2');
            const outputH3 = generator.querySelector('#au-output');
            const button = generator.querySelector('#au-generate-btn');
            const toggleBtn = generator.querySelector('.au-rules-toggle');
            const rulesContent = generator.querySelector('.au-rules-content');

            function generateAU() {
                const scenario = auScenarios[Math.floor(Math.random() * auScenarios.length)];
                outputH3.textContent = scenario;
            }

            function toggleRules() {
                const isActive = rulesContent.classList.contains('active');
                if (isActive) {
                    rulesContent.style.maxHeight = null;
                    rulesContent.classList.remove('active');
                    toggleBtn.textContent = 'Как это работает? (Нажмите, чтобы раскрыть)';
                } else {
                    rulesContent.classList.add('active');
                    rulesContent.style.maxHeight = rulesContent.scrollHeight + "px";
                    toggleBtn.textContent = 'Скрыть описание';
                }
            }
           
            if (button) {
                button.addEventListener('click', generateAU);
                generateAU(); // Первый запуск, чтобы не было пусто
            }
            if (toggleBtn) {
                toggleBtn.addEventListener('click', toggleRules);
            }
        }
    </script>
</div>
<!-- Конец кода Генератора AU-Ивентов -->[/html]

4

Генеративное Бинго

[html]<!-- Начало кода Бинго-генератора -->
<div id="bleach-bingo-generator-v2">
    <h1>Бинго Персонажа: Путь Синигами</h1>
    <p class="bingo-subtitle">Сделайте скриншот и отметьте, что подходит вашему персонажу. Нажмите кнопку, чтобы получить новую карточку!</p>
   
    <div class="bingo-grid-wrapper">
        <div id="bingo-grid-container">
            <!-- Ячейки генерируются JavaScript -->
        </div>
    </div>
   
    <button id="bingo-generate-btn">Сгенерировать новое бинго</button>

    <style>
        /* Все стили применяются только внутри #bleach-bingo-generator-v2 для изоляции */
        #bleach-bingo-generator-v2 {
            --bleach-orange: #ff6600;
            --bleach-bg-dark: #1a1a1a;
            --bleach-bg-light: #2a2a2a;
            --bleach-border-color: #444;
            --bleach-text-light: #f0f0f0;
            --bleach-text-dark: #111;

            background-color: var(--bleach-bg-dark);
            color: var(--bleach-text-light);
            font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
            text-align: center;
            padding: 25px;
            border-radius: 12px;
            border: 1px solid var(--bleach-border-color);
            box-shadow: 0 0 25px rgba(255, 102, 0, 0.3);
            max-width: 800px;
            margin: 20px auto;
        }

        #bleach-bingo-generator-v2 h1 {
            color: var(--bleach-orange);
            text-transform: uppercase;
            letter-spacing: 2px;
            border-bottom: 2px solid var(--bleach-orange);
            padding-bottom: 10px;
            margin: 0 0 10px 0;
            font-size: 2em;
        }

        #bleach-bingo-generator-v2 .bingo-subtitle {
            font-size: 1.1em;
            color: #ccc;
            margin-bottom: 20px;
        }
       
        #bleach-bingo-generator-v2 .bingo-grid-wrapper {
            border: 2px solid var(--bleach-border-color);
            padding: 10px;
            background-color: var(--bleach-bg-light);
            margin-bottom: 25px;
        }

        #bleach-bingo-generator-v2 #bingo-grid-container {
            display: grid;
            gap: 10px;
            grid-template-columns: repeat(5, 1fr);
        }

        #bleach-bingo-generator-v2 .bingo-cell {
            background-color: #333;
            border: 1px solid var(--bleach-border-color);
            aspect-ratio: 1 / 1;
            display: flex;
            justify-content: center;
            align-items: center;
            text-align: center;
            padding: 5px;
            font-size: 14px;
            line-height: 1.3;
            cursor: default;
            transition: background-color 0.2s, transform 0.2s;
            overflow: hidden;
            color: var(--bleach-text-light);
        }
       
        #bleach-bingo-generator-v2 .free-space {
            background-color: var(--bleach-orange);
            color: var(--bleach-text-dark);
            font-weight: bold;
            font-size: 1.6em;
            text-transform: uppercase;
        }
       
        #bleach-bingo-generator-v2 .free-space:hover {
             background-color: #ff8533;
        }

        #bleach-bingo-generator-v2 .bingo-cell:not(.free-space):hover {
            background-color: #4a4a4a;
            transform: scale(1.03);
            z-index: 10;
        }

        #bleach-bingo-generator-v2 #bingo-generate-btn {
            background-color: var(--bleach-orange);
            color: #fff;
            border: none;
            padding: 15px 30px;
            font-size: 1.2em;
            font-weight: bold;
            text-transform: uppercase;
            border-radius: 5px;
            cursor: pointer;
            transition: all 0.3s;
        }

        #bleach-bingo-generator-v2 #bingo-generate-btn:hover {
            background-color: #ff8533;
            transform: translateY(-3px);
            box-shadow: 0 4px 10px rgba(0,0,0,0.3);
        }

        @media (max-width: 600px) {
            #bleach-bingo-generator-v2 .bingo-cell {
                font-size: 10px;
            }
             #bleach-bingo-generator-v2 .free-space {
                font-size: 1.2em;
            }
        }
    </style>

    <script>
        { // Изолирующий блок для скрипта
            const GRID_SIZE = 5;

            // --- ОГРОМНЫЙ СПИСОК ВАРИАНТОВ (150+) ---
            const bingoPrompts = [
                "Знает имя своего дзанпакто", "Достиг банкая", "Проиграл дуэль и сделал выводы",
                "Заблудился в Сейрейтее", "Ненавидит бумажную работу", "Пил саке с Кьёраку",
                "Считает, что у Кона ужасный вкус", "Спорил о справедливости с капитаном", "Получил нагоняй от Уноханы",
                "Был в Уэко Мундо", "Покупал вещи в магазине Урахары", "Тайно восхищается Зараки",
                "Пытался понять рисунки Рукии", "Знает кидо выше 60-го уровня", "Прятал закуски от Ячиру",
                "Имеет шрам от пустого", "Сомневался в приказах Общества Душ", "Дружит с кем-то из другого отряда",
                "Считает себя экспертом в моде Каракуры", "Не понимает любовь Бьякуи к водорослям",
                "Слушал лекцию по стратегии", "Проспал важное собрание", "Попал под 'дружественный огонь'",
                "Сломал что-то в НИИ и свалил на другого", "Имеет странное хобби",
                "Считает, что у Исиды отличный вкус", "Защищал человека в мире живых", "Пытался подружиться с Бьякуей",
                "Недолюбливает Маюри Куроцучи", "Считает очки Тоусена стильными", "Рассказывал несмешную шутку",
                "Тренировался до потери сознания", "Носит нестандартный элемент формы", "Ходил на миссию под прикрытием",
                "Общался с модифицированной душой", "Пробовал еду Орихиме (и выжил)",
                "Дал кому-то прозвище", "Считает, что у Ренджи слишком много татуировок", "Помогал в 4-м отряде",
                "Участвовал в празднике фейерверков", "Знает, где в Руконгае лучшая лапша", "Тайно шипперит кого-то",
                "Пытался повторить танец квинси", "Боится насекомых больше, чем пустых", "Пытался понять, о чем думает Комамура",
                "Втайне читает любовные романы", "Потерял друга в бою", "Смотрел фильмы с Доном Канонджи",
                "Считает цвет волос Ичиго ненатуральным", "Дрался на Арене Покаяния", "Отдал свой паек голодному",
                "Завидует скорости Йоруичи", "Готовил по рецепту Рангику (и пожалел)", "Считает банкай Хицугаи слишком холодным",
                "Имеет доверенное лицо для разговоров", "Носит с собой талисман на удачу", "Плакал из-за книги/фильма",
                "Пытался помирить Иккаку и Юмичику", "Получил комплимент от врага", "Спас кота/собаку в мире живых",
                "Знает хотя бы одну песню из мира живых", "Думает, что шляпа Урахары живая", "Никогда не видел моря",
                "Имеет в комнате что-то из мира живых", "Верит в приметы", "Мечтает стать капитаном",
                "Пытался скрыть свои духовные нити", "Считает, что у Айзена был хороший парикмахер",
                "Разговаривает со своим дзанпакто", "Использовал гигай", "Встречал вайзарда",
                "Спорил с кем-то из 11 отряда", "Завидовал чужому дзанпакто", "Нарушил прямой приказ",
                "Был в Королевском дворце", "Получил травму от своего же кидо", "Считает, что Айзен был прав",
                "Пытался объяснить синигами, что такое Wi-Fi", "Носит с собой Soul Candy", "Чинил свой гигай",
                "Спорил, кто круче: Зангетсу или Сенбонзакура", "Нашел тайный проход в Сейрейтее",
                "Получал зарплату в Обществе Душ", "Участвовал в спортивном фестивале", "Выполнял миссию с арранкаром",
                "Боится гнева Ямамото", "Считает себя фотогеничным", "Не умеет готовить",
                "Пробовал кофе", "Думает, что Чад слишком молчаливый", "Восхищается капитаном своего отряда",
                "Считает вайзардов крутыми", "Пытался флиртовать и провалился", "Знает слабость кого-то из капитанов",
                "Помогал Рукии с домашкой по истории", "Посещал горячие источники", "Имеет любимый эндинг 'Блича'",
                "Считает, что у Гриммджоу проблемы с гневом", "Пытался погладить Комамуру", "Заблудился в лесу Меносов",
                "Проиграл в карты Рангику", "Дрался спина к спине с товарищем", "Спас новичка от пустого",
                "Выслушивал жалобы Хинамори", "Считает Сой Фон слишком строгой", "Украл хурму с дерева Бьякуи",
                "Пытался понять Хашвальта", "Имеет зуб на квинси", "Считает фуллбрингеров странными",
                "Думает, что Улькиорра был одинок", "Знает наизусть правила Готея 13", "Был свидетелем казни",
                "Участвовал в чайной церемонии", "Помогал строить что-то в Сейрейтее", "Дрался с гигантом",
                "Использовал банкай и повредил город", "Тайно подражает кому-то", "Считает себя недооцененным",
                "Имеет аллергию на что-то", "Знает больше 3 хадо и 3 бакудо", "Видел бой двух капитанов",
                "Был на собрании Женской ассоциации синигами", "Думает, что у Зараки нет чувства направления",
                "Переживал вторжение в Сейрейтей", "Боролся с искушением силы пустого", "Был ранен в сердце (буквально или фигурально)",
                "Давал клятву", "Знает истинную природу Короля Душ", "Считает, что у Маюри есть сердце",
                "Защищал Каракуру от вторжения", "Никогда не использовал кидо в бою", "Имеет друга-квинси",
                "Считает себя умнее Урахары", "Пытался приручить пустого", "Носит очки без диоптрий",
                "Имеет счет в банке мира живых", "Мечтает об отпуске на Окинаве", "Считает, что в Уэко Мундо не хватает зелени",
                "Пробовал рамэн из Ичираку (из другого аниме)", "Считает, что его история заслуживает отдельной арки"
            ];

            const bingoGenerator = document.getElementById('bleach-bingo-generator-v2');
            const gridContainer = bingoGenerator.querySelector('#bingo-grid-container');
            const generateBtn = bingoGenerator.querySelector('#bingo-generate-btn');
            const totalCells = GRID_SIZE * GRID_SIZE;
            const centerCellIndex = Math.floor(totalCells / 2);

            function generateBingo() {
                if (bingoPrompts.length < totalCells - 1) {
                    gridContainer.innerHTML = `<p style="color: var(--bleach-orange);">Ошибка: Недостаточно вариантов для бинго.</p>`;
                    return;
                }
                gridContainer.innerHTML = '';
               
                const shuffledPrompts = [...bingoPrompts].sort(() => 0.5 - Math.random());
                const selectedPrompts = shuffledPrompts.slice(0, totalCells - 1);
               
                let promptCounter = 0;
                for (let i = 0; i < totalCells; i++) {
                    const cell = document.createElement('div');
                    cell.classList.add('bingo-cell');

                    if (i === centerCellIndex) {
                        cell.classList.add('free-space');
                        cell.innerHTML = 'БАНКАЙ!';
                    } else {
                        cell.textContent = selectedPrompts[promptCounter];
                        promptCounter++;
                    }
                    gridContainer.appendChild(cell);
                }
            }

            if (generateBtn && gridContainer) {
                generateBtn.addEventListener('click', generateBingo);
                generateBingo(); // Первый запуск
            }
        }
    </script>
</div>
<!-- Конец кода Бинго-генератора -->[/html]

5

Судоку

[html]<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Судоку - За Отчизну!</title>
    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap" rel="stylesheet">
    <style>
        body {
            margin: 0;
            overflow: hidden; /* Prevent scrollbar due to pseudo-elements */
        }

        .bleach-sudoku-container {
            all: initial;
            font-family: 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            min-height: 100vh;
            /* Советский фон: темно-серый, почти как бетон или военная форма */
            background: #3c3c3c; /* Темно-серый */
            color: #e0e0e0; /* Светлый текст */
            padding: 20px;
            box-sizing: border-box;
            position: relative;
            overflow: hidden;
        }

        .bleach-sudoku-container::before {
            content: "";
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            /* Менее выраженные градиенты или их отсутствие */
            background-image: none; /* Убираем яркие радиальные градиенты */
            pointer-events: none;
        }

        .bleach-sudoku-title {
            all: initial;
            font-family: 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
            font-size: 2.8rem;
            font-weight: 700;
            /* Цвет названия: золотистый или яркий красный */
            color: #ffd700; /* Золотой */
            text-shadow: 0 0 10px rgba(255, 215, 0, 0.6), 0 0 20px rgba(255, 215, 0, 0.3);
            margin-bottom: 15px;
            letter-spacing: 3px;
            z-index: 10;
            position: relative;
            text-align: center;
        }

        .bleach-sudoku-subtitle {
            all: initial;
            font-family: 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
            font-size: 1rem;
            /* Приглушенный светло-желтый или белый */
            color: rgba(255, 255, 255, 0.8);
            margin-bottom: 25px;
            text-align: center;
            letter-spacing: 1px;
            z-index: 10;
            position: relative;
        }

        .bleach-sudoku-board {
            all: initial;
            display: grid;
            grid-template-columns: repeat(9, 52px);
            grid-template-rows: repeat(9, 52px);
            gap: 1px;
            /* Строгий цвет фона доски */
            background: #4a4a4a; /* Темно-серый */
            border: 6px solid #4a4a4a; /* Граница в тон фона */
            box-shadow:
                0 0 20px rgba(0, 0, 0, 0.5),
                inset 0 0 15px rgba(0, 0, 0, 0.6);
            z-index: 10;
            position: relative;
            margin-bottom: 25px;
        }

        .bleach-sudoku-cell {
            all: initial;
            width: 52px;
            height: 52px;
            /* Цвет ячейки: темный, "рабочий" */
            background: #2b2b2b; /* Очень темно-серый */
            border: 1px solid rgba(100, 100, 100, 0.4); /* Мягкая серая граница */
            display: flex;
            align-items: center;
            justify-content: center;
            font-family: 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
            font-size: 1.6rem;
            font-weight: 400;
            color: #e0e0e0; /* Светлый текст */
            cursor: pointer;
            transition: all 0.3s ease;
            box-sizing: border-box;
            position: relative;
        }

        .bleach-sudoku-cell:hover {
            /* Менее яркая подсветка при наведении */
            background: #404040; /* Средне-серый */
            box-shadow: 0 0 8px rgba(100, 100, 100, 0.6);
        }

        .bleach-sudoku-cell.bleach-given {
            /* Заданные числа: более строгий цвет */
            background: #353535; /* Чуть светлее фона ячеек */
            color: #ffd700; /* Золотой или светло-желтый */
            text-shadow: 0 0 5px rgba(255, 215, 0, 0.4);
            cursor: default;
        }

        .bleach-sudoku-cell.bleach-selected {
            /* Выделенная ячейка: акцент красного */
            background: rgba(178, 34, 34, 0.4); /* Огненно-красный */
            box-shadow: 0 0 15px rgba(178, 34, 34, 0.8);
            border: 2px solid #b22222; /* Красная граница */
        }

        .bleach-sudoku-cell.bleach-error {
            /* Ошибка: все еще красный, но менее "кричащий" */
            background: rgba(139, 0, 0, 0.6); /* Темно-красный */
            animation: bleach-error-pulse 0.6s ease-in-out;
        }

        .bleach-sudoku-cell.bleach-hint {
            /* Подсказка: зеленый, но приглушенный */
            background: rgba(34, 139, 34, 0.5); /* Лесной зеленый */
            animation: bleach-hint-glow 1s ease-in-out;
        }

        .bleach-sudoku-cell.bleach-highlight-row,
        .bleach-sudoku-cell.bleach-highlight-col,
        .bleach-sudoku-cell.bleach-highlight-box {
            /* Подсветка: приглушенный серый */
            background: rgba(70, 70, 70, 0.3);
        }

        .bleach-sudoku-cell.bleach-highlight-duplicate {
            /* Дубликаты: оранжевый, но темнее */
            background: rgba(184, 134, 11, 0.5); /* Темный золотисто-оранжевый */
            box-shadow: 0 0 8px rgba(184, 134, 11, 0.6);
        }

        /* Толстые границы для 3x3 блоков */
        .bleach-sudoku-cell:nth-child(3n):not(:nth-child(9n)) {
            border-right: 3px solid #4a4a4a;
        }

        .bleach-sudoku-cell:nth-child(n+19):nth-child(-n+27),
        .bleach-sudoku-cell:nth-child(n+46):nth-child(-n+54) {
            border-bottom: 3px solid #4a4a4a;
        }

        @keyframes bleach-error-pulse {
            0%, 100% { transform: scale(1); box-shadow: 0 0 10px rgba(139, 0, 0, 0.8); }
            50% { transform: scale(1.08); box-shadow: 0 0 20px rgba(139, 0, 0, 1); }
        }

        @keyframes bleach-hint-glow {
            0%, 100% { box-shadow: 0 0 8px rgba(34, 139, 34, 0.6); }
            50% { box-shadow: 0 0 20px rgba(34, 139, 34, 1); }
        }

        .bleach-sudoku-controls {
            all: initial;
            display: flex;
            gap: 15px;
            margin-bottom: 20px;
            z-index: 10;
            position: relative;
            flex-wrap: wrap;
            justify-content: center;
        }

        .bleach-sudoku-btn {
            all: initial;
            font-family: 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
            /* Кнопки: строгие, с легким градиентом красного или серого */
            background: linear-gradient(45deg, #8b0000, #b22222); /* От темно-красного до красного */
            color: #e0e0e0;
            border: none;
            padding: 12px 24px;
            border-radius: 5px; /* Менее скругленные кнопки */
            cursor: pointer;
            font-size: 0.95rem;
            font-weight: 400;
            transition: all 0.3s ease;
            box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
            letter-spacing: 0.5px;
        }

        .bleach-sudoku-btn:hover:not(:disabled) {
            transform: translateY(-2px); /* Меньший эффект при наведении */
            box-shadow: 0 6px 15px rgba(0, 0, 0, 0.5);
            background: linear-gradient(45deg, #b22222, #cd5c5c);
        }

        .bleach-sudoku-btn:disabled {
            opacity: 0.5;
            cursor: not-allowed;
            background: linear-gradient(45deg, #505050, #707070); /* Серые отключенные кнопки */
        }

        .bleach-sudoku-info {
            all: initial;
            font-family: 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
            display: flex;
            justify-content: space-between;
            align-items: center;
            width: 500px;
            max-width: 90vw;
            color: rgba(255, 255, 255, 0.9);
            z-index: 10;
            position: relative;
            margin-bottom: 15px;
        }

        .bleach-sudoku-timer, .bleach-sudoku-hint-timer {
            all: initial;
            font-family: 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
            font-size: 1.3rem;
            /* Цвет таймера: золотой или светло-желтый */
            color: #ffd700;
            font-weight: 400;
            text-shadow: 0 0 8px rgba(255, 215, 0, 0.6);
        }

        .bleach-sudoku-controls-info {
            all: initial;
            font-family: 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
            text-align: center;
            color: rgba(255, 255, 255, 0.7);
            font-size: 0.9rem;
            z-index: 10;
            position: relative;
            line-height: 1.4;
        }

        .bleach-victory {
            all: initial;
            font-family: 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            /* Фон окна победы: темный, с красной или золотой рамкой */
            background: rgba(43, 43, 43, 0.95);
            color: #e0e0e0;
            padding: 50px;
            border-radius: 10px; /* Менее скругленные углы */
            text-align: center;
            border: 4px solid #b22222; /* Красная рамка */
            box-shadow: 0 0 40px rgba(178, 34, 34, 0.7);
            z-index: 100;
            display: none;
        }

        .bleach-victory h2 {
            all: initial;
            font-family: 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
            font-size: 2.2rem;
            color: #ffd700; /* Золотой заголовок победы */
            margin-bottom: 20px;
            text-shadow: 0 0 10px rgba(255, 215, 0, 0.7);
            font-weight: 300;
            letter-spacing: 2px;
        }

        .bleach-victory p {
            all: initial;
            font-family: 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
            color: rgba(255, 255, 255, 0.9);
            margin-bottom: 10px;
            font-size: 1.1rem;
            line-height: 1.5;
        }

        .bleach-copyright {
            all: initial;
            font-family: 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
            font-size: 0.8rem;
            color: rgba(255, 255, 255, 0.5);
            margin-top: 20px;
            z-index: 10;
            position: relative;
        }
    </style>
</head>
<body>
    <div class="bleach-sudoku-container">
        <h1 class="bleach-sudoku-title">Судоку - Наша Цель!</h1>
        <div class="bleach-sudoku-subtitle">Примите вызов и укрепите дисциплину!</div>
       
        <div class="bleach-sudoku-info">
            <div>Время борьбы: <span class="bleach-sudoku-timer" id="bleachTimer">00:00</span></div>
            <div>Помощь товарища: <span class="bleach-sudoku-hint-timer" id="bleachHintTimer">готова</span></div>
        </div>
       
        <div class="bleach-sudoku-board" id="bleachSudokuBoard"></div>
       
        <div class="bleach-sudoku-controls">
            <button class="bleach-sudoku-btn" onclick="bleachNewGame()">Новый бой!</button>
            <button class="bleach-sudoku-btn" id="bleachHintBtn" onclick="bleachGetHint()">Взаимопомощь</button>
            <button class="bleach-sudoku-btn" onclick="bleachSolve()">Проверенное решение</button>
            <button class="bleach-sudoku-btn" onclick="bleachClear()">Очистить поле</button>
        </div>
       
        <div class="bleach-sudoku-controls-info">
            Выберите ячейку и введите цифру 1-9<br>
            0 или Delete для очистки • Порядок в строках и столбцах
        </div>

        <div class="bleach-victory" id="bleachVictory">
            <h2>Победа Наша!</h2>
            <p>Вы завершили задание! Родина гордится вами!</p>
            <p>Время достижения: <span id="bleachFinalTimer"></span></p>
            <button class="bleach-sudoku-btn" onclick="bleachNewGame(); document.getElementById('bleachVictory').style.display='none';">Новое задание</button>
        </div>
        <div class="bleach-copyright">Построено Zero_Chan для народа © 2025</div>
    </div>

    <script>
        (function() {
            let bleachSudokuGrid = [];
            let bleachSolution = [];
            let bleachSelectedCell = null;
            let bleachStartTime = Date.now();
            let bleachTimerInterval = null;
            let bleachHintCooldown = 0;
            let bleachHintInterval = null;
            let bleachOriginalPuzzle = [];

            const bleachBoard = document.getElementById('bleachSudokuBoard');
            const bleachTimerElement = document.getElementById('bleachTimer');
            const bleachHintTimerElement = document.getElementById('bleachHintTimer');
            const bleachHintBtn = document.getElementById('bleachHintBtn');
            const bleachVictoryElement = document.getElementById('bleachVictory');

            function bleachInitGrid() {
                bleachSudokuGrid = Array(9).fill().map(() => Array(9).fill(0));
                bleachSolution = Array(9).fill().map(() => Array(9).fill(0));
                bleachOriginalPuzzle = Array(9).fill().map(() => Array(9).fill(0));
            }

            function bleachIsValid(grid, row, col, num) {
                // Check row
                for (let x = 0; x < 9; x++) {
                    if (grid[row][x] === num) return false;
                }
               
                // Check column
                for (let x = 0; x < 9; x++) {
                    if (grid[x][col] === num) return false;
                }
               
                // Check 3x3 box
                const boxRow = Math.floor(row / 3) * 3;
                const boxCol = Math.floor(col / 3) * 3;
                for (let i = 0; i < 3; i++) {
                    for (let j = 0; j < 3; j++) {
                        if (grid[boxRow + i][boxCol + j] === num) return false;
                    }
                }
               
                return true;
            }

            function bleachSolveSudoku(grid) {
                for (let row = 0; row < 9; row++) {
                    for (let col = 0; col < 9; col++) {
                        if (grid[row][col] === 0) {
                            for (let num = 1; num <= 9; num++) {
                                if (bleachIsValid(grid, row, col, num)) {
                                    grid[row][col] = num;
                                    if (bleachSolveSudoku(grid)) {
                                        return true;
                                    }
                                    grid[row][col] = 0;
                                }
                            }
                            return false;
                        }
                    }
                }
                return true;
            }

            function bleachGeneratePuzzle() {
                bleachInitGrid();
               
                // Fill diagonal 3x3 boxes first
                for (let box = 0; box < 9; box += 3) {
                    const nums = [1,2,3,4,5,6,7,8,9];
                    for (let i = 0; i < 3; i++) {
                        for (let j = 0; j < 3; j++) {
                            const randomIndex = Math.floor(Math.random() * nums.length);
                            bleachSolution[box + i][box + j] = nums[randomIndex];
                            nums.splice(randomIndex, 1);
                        }
                    }
                }
               
                // Solve the rest
                bleachSolveSudoku(bleachSolution);
               
                // Create puzzle by removing numbers
                for (let row = 0; row < 9; row++) {
                    for (let col = 0; col < 9; col++) {
                        bleachSudokuGrid[row][col] = bleachSolution[row][col];
                        bleachOriginalPuzzle[row][col] = bleachSolution[row][col];
                    }
                }
               
                // Remove 40-50 numbers for medium difficulty
                const cellsToRemove = 45;
                let removed = 0;
                while (removed < cellsToRemove) {
                    const row = Math.floor(Math.random() * 9);
                    const col = Math.floor(Math.random() * 9);
                    if (bleachSudokuGrid[row][col] !== 0) {
                        bleachSudokuGrid[row][col] = 0;
                        bleachOriginalPuzzle[row][col] = 0;
                        removed++;
                    }
                }
            }

            function bleachHighlightRelated(selectedRow, selectedCol) {
                const cells = bleachBoard.children;
               
                // Clear previous highlights
                for (let cell of cells) {
                    cell.classList.remove('bleach-highlight-row', 'bleach-highlight-col', 'bleach-highlight-box', 'bleach-highlight-duplicate');
                }
               
                if (selectedRow === -1 || selectedCol === -1) return;
               
                const selectedValue = bleachSudokuGrid[selectedRow][selectedCol];
               
                for (let row = 0; row < 9; row++) {
                    for (let col = 0; col < 9; col++) {
                        const index = row * 9 + col;
                        const cell = cells[index];
                       
                        // Highlight row
                        if (row === selectedRow) {
                            cell.classList.add('bleach-highlight-row');
                        }
                       
                        // Highlight column
                        if (col === selectedCol) {
                            cell.classList.add('bleach-highlight-col');
                        }
                       
                        // Highlight 3x3 box
                        const boxRow = Math.floor(selectedRow / 3);
                        const boxCol = Math.floor(selectedCol / 3);
                        const cellBoxRow = Math.floor(row / 3);
                        const cellBoxCol = Math.floor(col / 3);
                       
                        if (boxRow === cellBoxRow && boxCol === cellBoxCol) {
                            cell.classList.add('bleach-highlight-box');
                        }
                       
                        // Highlight duplicates
                        if (selectedValue !== 0 && bleachSudokuGrid[row][col] === selectedValue && !(row === selectedRow && col === selectedCol)) {
                            cell.classList.add('bleach-highlight-duplicate');
                        }
                    }
                }
            }

            function bleachRenderBoard() {
                bleachBoard.innerHTML = '';
                for (let row = 0; row < 9; row++) {
                    for (let col = 0; col < 9; col++) {
                        const cell = document.createElement('div');
                        cell.className = 'bleach-sudoku-cell';
                        cell.textContent = bleachSudokuGrid[row][col] || '';
                       
                        if (bleachOriginalPuzzle[row][col] !== 0) {
                            cell.classList.add('bleach-given');
                        }
                       
                        cell.addEventListener('click', () => {
                            if (bleachSelectedCell) {
                                bleachSelectedCell.classList.remove('bleach-selected');
                            }
                            bleachSelectedCell = cell;
                            cell.classList.add('bleach-selected');
                            bleachSelectedCell.dataset.row = row;
                            bleachSelectedCell.dataset.col = col;
                           
                            bleachHighlightRelated(row, col);
                        });
                       
                        bleachBoard.appendChild(cell);
                    }
                }
            }

            function bleachUpdateTimer() {
                const elapsed = Math.floor((Date.now() - bleachStartTime) / 1000);
                const minutes = Math.floor(elapsed / 60).toString().padStart(2, '0');
                const seconds = (elapsed % 60).toString().padStart(2, '0');
                bleachTimerElement.textContent = `${minutes}:${seconds}`;
            }

            function bleachUpdateHintTimer() {
                if (bleachHintCooldown > 0) {
                    bleachHintCooldown--;
                    bleachHintTimerElement.textContent = `${bleachHintCooldown}с`;
                    bleachHintBtn.disabled = true;
                } else {
                    bleachHintTimerElement.textContent = 'готова';
                    bleachHintBtn.disabled = false;
                }
            }

            function bleachCheckWin() {
                for (let row = 0; row < 9; row++) {
                    for (let col = 0; col < 9; col++) {
                        if (bleachSudokuGrid[row][col] !== bleachSolution[row][col]) {
                            return false;
                        }
                    }
                }
               
                clearInterval(bleachTimerInterval);
                clearInterval(bleachHintInterval);
                document.getElementById('bleachFinalTimer').textContent = bleachTimerElement.textContent;
                bleachVictoryElement.style.display = 'block';
                return true;
            }

            function bleachHandleKeyPress(e) {
                if (!bleachSelectedCell) return;
               
                const row = parseInt(bleachSelectedCell.dataset.row);
                const col = parseInt(bleachSelectedCell.dataset.col);
               
                // Don't modify given numbers
                if (bleachOriginalPuzzle[row][col] !== 0) {
                    return;
                }
               
                const key = e.key;
               
                if (key >= '1' && key <= '9') {
                    const num = parseInt(key);
                    if (bleachIsValid(bleachSudokuGrid, row, col, num)) {
                        bleachSudokuGrid[row][col] = num;
                        bleachSelectedCell.textContent = num;
                        bleachSelectedCell.classList.remove('bleach-error');
                        bleachHighlightRelated(row, col);
                        bleachCheckWin();
                    } else {
                        bleachSelectedCell.classList.add('bleach-error');
                        setTimeout(() => {
                            bleachSelectedCell.classList.remove('bleach-error');
                        }, 600);
                    }
                } else if (key === '0' || key === 'Delete' || key === 'Backspace') {
                    bleachSudokuGrid[row][col] = 0;
                    bleachSelectedCell.textContent = '';
                    bleachSelectedCell.classList.remove('bleach-error');
                    bleachHighlightRelated(row, col);
                }
            }

            window.bleachNewGame = function() {
                bleachGeneratePuzzle();
                bleachRenderBoard();
                bleachStartTime = Date.now();
                bleachHintCooldown = 0;
               
                clearInterval(bleachTimerInterval);
                clearInterval(bleachHintInterval);
               
                bleachTimerInterval = setInterval(bleachUpdateTimer, 1000);
                bleachHintInterval = setInterval(bleachUpdateHintTimer, 1000);
               
                bleachSelectedCell = null;
                bleachHighlightRelated(-1, -1);
                bleachUpdateHintTimer();
                bleachVictoryElement.style.display = 'none'; // Hide victory message on new game
            };

            window.bleachGetHint = function() {
                if (bleachHintCooldown > 0) return;
               
                // Find empty cells
                const emptyCells = [];
                for (let row = 0; row < 9; row++) {
                    for (let col = 0; col < 9; col++) {
                        if (bleachSudokuGrid[row][col] === 0) {
                            emptyCells.push({row, col});
                        }
                    }
                }
               
                if (emptyCells.length === 0) return;
               
                // Pick random empty cell and fill it
                const randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];
                const {row, col} = randomCell;
               
                bleachSudokuGrid[row][col] = bleachSolution[row][col];
               
                // Update display
                const cellIndex = row * 9 + col;
                const cellElement = bleachBoard.children[cellIndex];
                cellElement.textContent = bleachSolution[row][col];
                cellElement.classList.add('bleach-hint');
               
                setTimeout(() => {
                    cellElement.classList.remove('bleach-hint');
                }, 1000);
               
                // Start cooldown
                bleachHintCooldown = 60;
                bleachUpdateHintTimer();
               
                bleachCheckWin();
            };

            window.bleachSolve = function() {
                for (let row = 0; row < 9; row++) {
                    for (let col = 0; col < 9; col++) {
                        bleachSudokuGrid[row][col] = bleachSolution[row][col];
                    }
                }
                bleachRenderBoard();
                bleachCheckWin();
            };

            window.bleachClear = function() {
                for (let row = 0; row < 9; row++) {
                    for (let col = 0; col < 9; col++) {
                        if (bleachOriginalPuzzle[row][col] === 0) {
                            bleachSudokuGrid[row][col] = 0;
                        }
                    }
                }
                bleachRenderBoard();
                if (bleachSelectedCell) {
                    const row = parseInt(bleachSelectedCell.dataset.row);
                    const col = parseInt(bleachSelectedCell.dataset.col);
                    bleachHighlightRelated(row, col);
                }
            };

            document.addEventListener('keydown', bleachHandleKeyPress);

            // Initialize game
            bleachNewGame();
        })();
    </script>
</body>
</html>[/html]


Вы здесь » Realatorum Paradox » Витрина » Развлечения


Рейтинг форумов | Создать форум бесплатно