file.md 66 KB

<!DOCTYPE html>

<span id="sceneLabel">СЦЕНА 1 / 7</span>
<div class="progress"><div id="progressBar"></div></div>
<button class="icon-btn" id="soundToggle" type="button">🔊 ЗВУК</button>

<!-- 🎆 canvas для спецэффектов -->

<canvas id="bgCanvas" width="900" height="500"
  style="position:absolute;top:0;left:0;width:100%;height:100%;opacity:.35;pointer-events:none;"></canvas>
<div style="position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;">
  <h1>Механические волны</h1>
  <p>Интерактивный курс: колебания, звук и среды распространения.</p>
  <p class="hint">Наушники приветствуются 🎧</p>
  <div style="margin-top:24px;">
    <button class="btn" id="btnStart" type="button">▶ Начать курс</button>
    <button class="btn pink" id="btnWhat" type="button">Что такое волна?</button>
  </div>
</div>

<h2>Что такое механическая волна?</h2>
<p>Это распространение колебаний в упругой среде. Частицы колеблются, но не переносятся вместе с волной.</p>
<div class="canvas-wrap"><canvas id="chainCanvas" width="800" height="200"></canvas></div>
<div class="controls">
  <div class="slider-box">
    <label>Частота: <span id="freqVal">3</span> Гц</label>
    <input type="range" id="freqSlider" min="1" max="10" value="3">
  </div>
  <div class="slider-box">
            <label>Амплитуда: <span id="ampVal">25</span> px · 🔊 <span id="ampVol">21</span>%</label>
    <input type="range" id="ampSlider" min="5" max="40" value="25">
  </div>
  <button class="btn green" id="btnPush" type="button">Толкнуть</button>
</div>
<p class="hint" id="scene2Hint">Толчков: 0 / 3</p>
<button class="btn" id="btnNext2" type="button" disabled>Далее →</button>

<h2>Среда распространения. Скорость звука</h2>
<p>Чем плотнее среда — тем быстрее идёт звук.</p>
    <div class="tubes">
  <div class="tube air"><span class="label">🌬️ Воздух ≈ 343 м/с</span><div class="impulse" data-speed="2.4"></div></div>
  <div class="tube water"><span class="label">💧 Вода ≈ 1480 м/с</span><div class="impulse" data-speed="1.2"></div></div>
  <div class="tube steel"><span class="label">⚙️ Сталь ≈ 5100 м/с</span><div class="impulse" data-speed="0.5"></div></div>
</div>
<button class="btn" id="btnImpulse" type="button">Запустить импульс</button>
<p class="question" style="margin-top:20px;">В какой среде звук распространяется быстрее всего?</p>
<div class="quiz-options" id="quiz3">
  <button class="btn" data-ans="air" type="button">Воздух</button>
  <button class="btn" data-ans="water" type="button">Вода</button>
  <button class="btn" data-ans="steel" type="button">Сталь</button>
</div>
<button class="btn" id="btnNext3" type="button" disabled style="margin-top:20px;">Далее →</button>

<h2>Колебания: период, частота, амплитуда</h2>
<div style="display:flex;flex-wrap:wrap;justify-content:center;gap:16px;">
  <div class="canvas-wrap"><canvas id="oscCanvas" width="360" height="260"></canvas></div>
  <div class="canvas-wrap"><canvas id="waveCanvas" width="360" height="260"></canvas></div>
</div>
<div class="controls">
  <div class="slider-box">
    <label>Амплитуда: <span id="ampVal2">60</span></label>
    <input type="range" id="ampSlider2" min="20" max="100" value="60">
  </div>
  <div class="slider-box">
    <label>Период: <span id="perVal">1.2</span> с</label>
    <input type="range" id="perSlider" min="4" max="30" value="12">
  </div>
  <button class="btn pink" id="btnCheck4" type="button">Проверить понимание</button>
</div>
<p class="table">Формулы: <span>T = 1/ν</span> · <span>ν = 1/T</span> · <span>v = λν</span></p>
<button class="btn" id="btnNext4" type="button" disabled>Далее →</button>

    <!-- SCENE 5 -->

<h2>Виды волн. Звук — продольная волна</h2>

<div class="canvas-wrap">
  <canvas id="typeCanvas" width="800" height="320"></canvas>
</div>

<!-- 🎮 Мини-игра «Собери звуковую дорожку» -->
<div id="waveGame" style="max-width:760px;text-align:center;">
  <p style="margin-bottom:8px;">
    🎧 <b>Мини-игра:</b> нажми на каждый инструмент по очереди — собери <b>дорожку из 4 звуков</b>.
    Смотри, как меняется волна!
  </p>

  <div class="controls" id="instrBtns">
    <button class="btn" data-instr="piano" type="button">🎹 Пианино</button>
    <button class="btn" data-instr="drum"  type="button">🥁 Барабан</button>
    <button class="btn" data-instr="whistle" type="button">🎺 Свисток</button>
    <button class="btn" data-instr="bass"  type="button">🎸 Бас</button>
  </div>

  <div id="instrFreq" class="hint" style="font-size:.95rem;">
    🎵 Нажми на инструмент, чтобы услышать и увидеть волну
  </div>

  <!-- Дорожка со слотами -->
  <div id="track" style="display:flex;gap:10px;justify-content:center;margin:16px 0;">
    <div class="track-slot" data-slot="0">—</div>
    <div class="track-slot" data-slot="1">—</div>
    <div class="track-slot" data-slot="2">—</div>
    <div class="track-slot" data-slot="3">—</div>
  </div>

  <p class="hint" id="scene5Hint">Собрано звуков: 0 / 4</p>
</div>

<!-- 💡 Пояснение (появляется после победы) -->
<div id="waveFact" class="table" style="max-width:720px;display:none;">
  🎓 <b>Разные звуки = разные волны.</b><br>
  🔵 <b>Продольная</b> (сверху) — сжатия и разрежения. Так идёт звук в воздухе.<br>
  🟢 <b>Поперечная</b> (снизу) — гребни и впадины. Так колеблется струна или волна на воде.<br>
  🔊 Обе волны переносят <span>энергию</span>, а частицы среды <span>колеблются на месте</span>.
</div>

<button class="btn" id="btnNext5" type="button" disabled>Далее →</button>

<h2>Применение звуковых волн</h2>
<p>Нажми на карточку, чтобы узнать подробнее.</p>
    <div class="cards" id="cards">

  <div class="card eco"><div class="card-inner">
    <div class="card-face">
      <img class="card-img"
           src="https://cdn-icons-png.flaticon.com/512/616/616554.png"
           alt="Эхолокация"
           onerror="this.replaceWith(Object.assign(document.createElement('div'),{textContent:'🦇',style:'font-size:3.4rem;line-height:1;'}));" />
      <div class="card-title">Эхолокация</div>
    </div>
    <div class="card-face back">
      <img class="card-img"
           src="https://cdn-icons-png.flaticon.com/512/616/616554.png"
           alt="Эхолокация"
           onerror="this.replaceWith(Object.assign(document.createElement('div'),{textContent:'🦇',style:'font-size:1.4rem;line-height:1;'}));" />
      <div>Летучие мыши и дельфины определяют препятствия по отражённому ультразвуку.</div>
    </div>
  </div></div>

  <div class="card uzi"><div class="card-inner">
    <div class="card-face">
      <img class="card-img"
           src="https://cdn-icons-png.flaticon.com/512/2966/2966327.png"
           alt="УЗИ"
           onerror="this.replaceWith(Object.assign(document.createElement('div'),{textContent:'🩻',style:'font-size:3.4rem;line-height:1;'}));" />
      <div class="card-title">УЗИ</div>
    </div>
    <div class="card-face back">
      <img class="card-img"
           src="https://cdn-icons-png.flaticon.com/512/2966/2966327.png"
           alt="УЗИ"
           onerror="this.replaceWith(Object.assign(document.createElement('div'),{textContent:'🩻',style:'font-size:1.4rem;line-height:1;'}));" />
      <div>Медицинская визуализация: ультразвук отражается от границ тканей.</div>
    </div>
  </div></div>

  <div class="card seismo"><div class="card-inner">
    <div class="card-face">
      <img class="card-img"
           src="https://cdn-icons-png.flaticon.com/512/2909/2909760.png"
           alt="Сейсмология"
           onerror="this.replaceWith(Object.assign(document.createElement('div'),{textContent:'🌍',style:'font-size:3.4rem;line-height:1;'}));" />
      <div class="card-title">Сейсмология</div>
    </div>
    <div class="card-face back">
      <img class="card-img"
           src="https://cdn-icons-png.flaticon.com/512/2909/2909760.png"
           alt="Сейсмология"
           onerror="this.replaceWith(Object.assign(document.createElement('div'),{textContent:'🌍',style:'font-size:1.4rem;line-height:1;'}));" />
      <div>По сейсмическим волнам изучают строение Земли и землетрясения.</div>
    </div>
  </div></div>

  <div class="card music"><div class="card-inner">
    <div class="card-face">
      <img class="card-img"
           src="https://cdn-icons-png.flaticon.com/512/384/384281.png"
           alt="Музыка"
           onerror="this.replaceWith(Object.assign(document.createElement('div'),{textContent:'🎸',style:'font-size:3.4rem;line-height:1;'}));" />
      <div class="card-title">Музыка</div>
    </div>
    <div class="card-face back">
      <img class="card-img"
           src="https://cdn-icons-png.flaticon.com/512/384/384281.png"
           alt="Музыка"
           onerror="this.replaceWith(Object.assign(document.createElement('div'),{textContent:'🎸',style:'font-size:1.4rem;line-height:1;'}));" />
      <div>Струны и столбы воздуха создают стоячие волны — ноты.</div>
    </div>
  </div></div>

</div>
<p>Собери пару: пример ↔ физическое явление.</p>
<div class="pairs">
  <div class="pair-col" id="pairLeft"></div>
  <div class="pair-col" id="pairRight"></div>
</div>
<p class="hint" id="scene6Hint">Собрано пар: 0 / 4</p>
<button class="btn" id="btnNext6" type="button" disabled>К тестированию →</button>

<h2 id="quizTitle">Итоговое тестирование</h2>
<div class="progress-quiz"><div id="quizProgress"></div></div>
<p class="question" id="quizQuestion">…</p>
<div class="quiz-options" id="quizOptions"></div>
   <div id="quizResult" style="display:none;flex-direction:column;align-items:center;">
  <div class="final-badge" id="finalBadge">…</div>
  <div class="result-score" id="finalScore">0</div>
  <p id="finalText" style="margin:16px 0;"></p>
  <button class="btn pink" id="btnRestart" type="button">Пройти заново</button>
</div>

<div class="modal-content">
  <h2 id="modalTitle">…</h2>
  <p id="modalText" style="margin:16px 0;">…</p>
  <button class="btn" id="modalClose" type="button">Закрыть</button>
</div>