Dveře 2
?
QR Kód s aktuální adresou
📺 Fullscreen
Dveře 2
ZAMČENO
Modrá
Zelená
Oranžová
Červená
Bílá
Černá
Růžová
Hnědá
Žlutá
Upravit obsah stránky
{% extends "templates/base.html" %} {% set game_name = "Dveře 2" %} {% block content %} <!-- Fullscreen tlačítko --> <button id="goFullscreen" class="btn btn-light" style="position:fixed; top:8px; right:8px; z-index:2000;"> 📺 Fullscreen </button> <!-- Hlavní herní kontejner --> <div id="gameView" class="full-screen"> <!-- Panel s názvem, stavem dveří a odpočtem --> <div class="door-panel card text-center p-3"> <h1 class="mb-2">Dveře 2</h1> <p id="doorStatus" class="h4 mb-1">ZAMČENO</p> <p id="countdown" class="h5 mb-0" style="visibility:hidden;"></p> </div> <!-- Prostřední část: symboly vertikálně centrované --> <div class="middle-section flex-grow-1 d-flex align-items-center justify-content-center"> <img id="shapeImage" src="" alt="Symbol" style="max-width:80vw; height:auto;"> </div> <!-- Barvy tlačítek ve 3 řadách po 3 --> <div id="buttonsRow" class="bottom-buttons mb-3"> <button type="button" class="btn btn-primary color-btn" data-color="blue">Modrá</button> <button type="button" class="btn btn-success color-btn" data-color="green">Zelená</button> <button type="button" class="btn btn-warning color-btn" data-color="orange">Oranžová</button> <button type="button" class="btn btn-danger color-btn" data-color="red">Červená</button> <button type="button" class="btn btn-secondary color-btn" data-color="white">Bílá</button> <button type="button" class="btn btn-dark color-btn" data-color="black">Černá</button> <button type="button" class="btn btn-pink color-btn" data-color="pink">Růžová</button> <button type="button" class="btn btn-brown color-btn" data-color="brown">Hnědá</button> <button type="button" class="btn btn-yellow color-btn" data-color="yellow">Žlutá</button> </div> </div> <style> .full-screen { position:fixed; top:0; left:0; width:100%; height:100%; display:flex; flex-direction:column; justify-content:space-between; align-items:center; background-color:#ff4d4d; padding:2vh 2vw; overflow:hidden; } .door-panel { width:100%; max-width:600px; background:rgba(255,255,255,0.8); border:2px solid rgba(0,0,0,0.1); border-radius:0.5rem; } body.locked .full-screen { background-color:#ff4d4d; } body.unlocked .full-screen { background-color:#4dff4d; } body.alarm .full-screen { background-color:#660000; } #alarmOverlay { position:absolute; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.9); color:#ff4444; display:flex; align-items:center; justify-content:center; font-size:2rem; text-align:center; z-index:9999; padding:1rem; } .bottom-buttons { display:grid; grid-template-columns:repeat(3,minmax(80px,1fr)); gap:0.5rem; width:100%; max-width:600px; } .color-btn { padding:1rem 1.5rem; font-size:1.25rem; width:100%; } /* tlačítka barvy */ .btn-primary{background-color:#0d6efd;border-color:#0d6efd;color:#fff;} .btn-primary:hover{background-color:#0b5ed7;} .btn-primary:active,.btn-primary:focus{background-color:#0a53be;box-shadow:none;} .btn-success{background-color:#198754;border-color:#198754;color:#fff;} .btn-success:hover{background-color:#157347;} .btn-success:active,.btn-success:focus{background-color:#146c43;box-shadow:none;} .btn-warning{background-color:#ff8800;border-color:#ff8800;color:#fff;} .btn-warning:hover{background-color:#e07a00;} .btn-warning:active,.btn-warning:focus{background-color:#c06c00;box-shadow:none;} .btn-danger{background-color:#dc3545;border-color:#dc3545;color:#fff;} .btn-danger:hover{background-color:#bb2d3b;} .btn-danger:active,.btn-danger:focus{background-color:#b02a37;box-shadow:none;} .btn-secondary{background-color:#f8f9fa;border-color:#f8f9fa;color:#000;} .btn-secondary:hover{background-color:#e2e6ea;} .btn-secondary:active,.btn-secondary:focus{background-color:#d3d9df;box-shadow:none;} .btn-dark{background-color:#212529;border-color:#212529;color:#fff;} .btn-dark:hover{background-color:#1c1f23;} .btn-dark:active,.btn-dark:focus{background-color:#1a1e21;box-shadow:none;} .btn-pink{background-color:#ff69b4;border-color:#ff69b4;color:#fff;} .btn-pink:hover{background-color:#e65b9e;} .btn-pink:active,.btn-pink:focus{background-color:#cc528f;box-shadow:none;} .btn-brown{background-color:#8b4513;border-color:#8b4513;color:#fff;} .btn-brown:hover{background-color:#7a3d0f;} .btn-brown:active,.btn-brown:focus{background-color:#6b360c;box-shadow:none;} .btn-yellow{background-color:#ffc107;border-color:#ffc107;color:#000;} .btn-yellow:hover{background-color:#e0a800;} .btn-yellow:active,.btn-yellow:focus{background-color:#c69500;box-shadow:none;} @media(max-width:1024px){.middle-section img{max-width:80vw;height:auto;}.color-btn{font-size:1rem;min-width:80px;}} </style> <script> // Fullscreen tlačítko document.getElementById('goFullscreen').addEventListener('click',()=>{ document.getElementById('goFullscreen').style.display='none'; const el=document.documentElement; if(el.requestFullscreen)el.requestFullscreen(); else if(el.webkitRequestFullscreen)el.webkitRequestFullscreen(); else if(el.msRequestFullscreen)el.msRequestFullscreen(); }); document.addEventListener('DOMContentLoaded',()=>{ const fh=new ForrestHubLib(); const images=[ 'blue_cross_circle_cross.png','blue_cross_square_cross.png', 'blue_square_circle_circle.png','blue_square_circle_square.png', 'blue_square_square_circle.png','blue_square_square_triangle.png', 'blue_triangle_circle_triangle.png','blue_triangle_square_triangle.png', 'green_triangle_triangle_cross.png','green_triangle_triangle_square.png', 'green_square_triangle_triangle.png','green_triangle_triangle_circle.png', 'orange_triangle_triangle_circle_cross.png','orange_triangle_square_circle_circle.png', 'orange_triangle_square_circle_cross.png','orange_triangle_square_circle_square.png', 'orange_triangle_square_circle_triangle.png','orange_triangle_square_cross_circle.png', 'orange_triangle_square_cross_cross.png','orange_triangle_square_cross_square.png', 'orange_triangle_square_cross_triangle.png','orange_triangle_square_square_circle.png', 'orange_triangle_square_square_cross.png','orange_triangle_square_square_square.png', 'orange_triangle_square_square_triangle.png','orange_triangle_square_triangle_circle.png', 'orange_triangle_square_triangle_cross.png','orange_triangle_square_triangle_square.png', 'pink_circle_cross_circle.png','pink_circle_cross_cross.png', 'pink_square_cross_cross.png','pink_square_cross_square.png', 'pink_triangle_cross_triangle.png','red_cross_cross.png', 'red_cross_square.png','red_cross_triangle.png', 'red_square_cross.png','red_square_triangle.png', 'red_triangle_cross.png','red_triangle_square.png', 'white_circle_square_triangle.png','white_circle_triangle_cross.png', 'white_circle_triangle_square.png','white_circle_cross_square.png', 'white_circle_cross_triangle.png','white_circle_square_cross.png', 'yellow_cross_circle.png','yellow_square_circle.png', 'brown_circle_circle_square_square.png','brown_circle_cross_square_square.png', 'brown_circle_square_circle_square.png','brown_circle_square_cross_square.png', 'brown_circle_square_square_circle.png','brown_circle_square_square_cross.png', 'brown_circle_square_square_triangle.png' ]; let currentImage=''; let state='locked'; let countdownTimer,alarmTimer; function updateUI(){ document.body.classList.remove('locked','unlocked','alarm'); document.body.classList.add(state); document.getElementById('doorStatus').textContent= state==='locked'?'ZAMČENO':state==='unlocked'?'ODEMČENO':'ALARM'; } function pickRandomImage(){ // získej symbol z Dveře1 const other=fh.dbVarGetKey('doors1Image')||''; // vyfiltruj, aby nebyl stejný const avail=images.filter(i=>i!==other); const idx=Math.floor(Math.random()*avail.length); currentImage=avail[idx]; document.getElementById('shapeImage').src=currentImage; fh.dbVarSetKey('doors2Image',currentImage); } function clearTimers(){ clearInterval(countdownTimer); clearTimeout(alarmTimer); } function lockDoor(){ clearTimers(); state='locked'; pickRandomImage(); fh.dbVarSetKey('doors2State',state); updateUI(); document.getElementById('countdown').style.visibility='hidden'; } function showCountdown(sec){ const el=document.getElementById('countdown'); el.style.visibility='visible'; el.textContent=sec+' s'; } function unlockDoor(){ clearTimers(); state='unlocked'; fh.dbVarSetKey('doors2State',state); updateUI(); let t=10; showCountdown(t); countdownTimer=setInterval(()=>{ if(--t>0) showCountdown(t); },1000); alarmTimer=setTimeout(lockDoor,10000); } function triggerAlarm(){ clearTimers(); state='alarm'; fh.dbVarSetKey('doors2State',state); updateUI(); const ov=document.createElement('div'); ov.id='alarmOverlay'; ov.textContent='!!!! Chyba !!!! Byl aktivován ALARM !!!'; document.querySelector('.full-screen').appendChild(ov); alarmTimer=setTimeout(()=>{ ov.remove(); lockDoor(); },10000); } // start lockDoor(); document.querySelectorAll('.color-btn').forEach(btn=>{ btn.addEventListener('click',()=>{ if(state!=='locked')return; const chosen=btn.dataset.color; const correct=currentImage.split('_')[0]; if(chosen===correct) unlockDoor(); else triggerAlarm(); }); }); }); </script> {% endblock %}