Fix mobile broom flight with D-pad & touch-action, add Chamber II McGonagalls Wizard Chess

This commit is contained in:
Maxi
2026-09-22 19:24:26 +02:00
parent 9f5e5085ec
commit efb54befcc
10 changed files with 793 additions and 116 deletions
+13 -1
View File
@@ -122,6 +122,10 @@
<span>🧹 Besenflug:</span>
<span>{% if state.broom_solved %}✅ Gemeistert{% else %}⏳ Offen{% endif %}</span>
</div>
<div class="stat-row">
<span>♟️ Zauberschach:</span>
<span>{% if state.chess_solved %}✅ Gemeistert{% else %}⏳ Offen{% endif %}</span>
</div>
<div class="stat-row">
<span>🧪 Snapes Flammen:</span>
<span>{% if state.bottles_solved %}✅ Gelöst{% else %}⏳ Offen{% endif %}</span>
@@ -150,13 +154,21 @@
<small>{% if state.broom_solved %}✅ Gemeistert{% else %}🗝️ Geflügelte Schlüssel jagen{% endif %}</small>
</div>
</a>
<a href="/chess" class="room-nav-item {% if request.url.path == '/chess' %}current{% endif %}">
<span class="room-icon">♟️</span>
<div class="room-info">
<strong>Kammer II: McGonagalls Schach</strong>
<small>{% if state.chess_solved %}✅ Gemeistert{% else %}⚔️ Riesen-Zauberschach{% endif %}</small>
</div>
</a>
<a href="/bottles" class="room-nav-item {% if request.url.path == '/bottles' %}current{% endif %}">
<span class="room-icon">🧪</span>
<div class="room-info">
<strong>Kammer II: Snapes Flaschen</strong>
<strong>Kammer III: Snapes Flaschen</strong>
<small>{% if state.bottles_solved %}✅ Gemeistert{% else %}🔥 Die Flammenkammer{% endif %}</small>
</div>
</a>
<a href="/sliding" class="room-nav-item {% if request.url.path == '/sliding' %}current{% endif %}">
<span class="room-icon">🧩</span>
<div class="room-info">
+25 -10
View File
@@ -16,33 +16,48 @@
<div class="game-hud">
<div>⏱️ Zeit: <strong id="timerVal">0s</strong></div>
<div>✨ Punkte: <strong id="scoreVal">0</strong></div>
<div>🎯 Mission: <span id="missionText">Fange den Schlüssel mit geknicktem Flügel!</span></div>
<div>🎯 Ziel: <span id="missionText">Schlüssel fangen!</span></div>
</div>
<canvas id="broomCanvas"></canvas>
</div>
<!-- Mobile Touch Controls -->
<div class="mobile-controls">
<button id="mBtnUp" class="btn-control" style="font-size: 1.2rem; padding: 0.8rem 1.4rem;">▲ Hoch</button>
<button id="mBtnBoost" class="btn-control" style="font-size: 1.2rem; padding: 0.8rem 1.4rem; background: var(--gold); color: #000;">⚡ Turbo</button>
<button id="mBtnDown" class="btn-control" style="font-size: 1.2rem; padding: 0.8rem 1.4rem;">▼ Runter</button>
<!-- Mobile Flight Cockpit & D-Pad -->
<div class="mobile-flight-cockpit">
<div class="dpad-box">
<button type="button" id="mBtnUp" class="dpad-btn dpad-up" aria-label="Hoch">▲</button>
<div class="dpad-middle">
<button type="button" id="mBtnLeft" class="dpad-btn dpad-left" aria-label="Links">◀</button>
<div class="dpad-core">✨</div>
<button type="button" id="mBtnRight" class="dpad-btn dpad-right" aria-label="Rechts">▶</button>
</div>
<button type="button" id="mBtnDown" class="dpad-btn dpad-down" aria-label="Runter">▼</button>
</div>
<div class="mobile-flight-actions">
<button type="button" id="mBtnBoost" class="dpad-boost-btn">
⚡ TURBO
</button>
<div class="touch-hint">
💡 <em>Tipp: Du kannst auch direkt mit dem Finger über das Spielfeld wischen!</em>
</div>
</div>
</div>
<div class="dungeon-card" style="margin-top: 1.5rem;">
<p id="statusMsg" style="text-align: center; font-size: 1.15rem; color: var(--gold); margin-bottom: 0.8rem;">
🎮 <strong>Steuerung:</strong> Pfeiltasten / WASD / Mausbewegung zum Fliegen · <strong>Leertaste / Klick</strong> für Besen-Turbo!
🎮 <strong>Steuerung:</strong> Pfeiltasten / WASD / Touch-Wischen zum Fliegen · <strong>Leertaste / Turbo</strong> für Besen-Beschleunigung!
</p>
<p style="text-align: center; color: var(--text-dim); font-size: 0.95rem;">
Fliege durch den Raum, jage den ausweichenden Silberschlüssel mit dem verletzten Flügel und fliege nach dem Fang zur Tür ganz rechts!
Fange den großen Silberschlüssel mit dem geknickten Flügel und fliege zur schweren Holztür ganz rechts!
</p>
</div>
<div style="text-align: center; margin-top: 1rem;">
<a href="/bottles" class="nav-link" style="color: var(--text-dim);">Direkt weiter zu Snapes Flaschenkammer 🧪 ➔</a>
<a href="/chess" class="nav-link" style="color: var(--text-dim);">Direkt weiter zu McGonagalls Zauberschach ♟️ ➔</a>
</div>
{% endblock %}
{% block scripts %}
<script src="/static/js/broom.js?v=1.0"></script>
<script src="/static/js/broom.js?v=2.0"></script>
{% endblock %}
+68
View File
@@ -0,0 +1,68 @@
{% extends "base.html" %}
{% block title %}Kammer II: McGonagalls Zauberschach · Hogwarts Escape{% endblock %}
{% block content %}
<div class="parchment-scroll">
<h1 class="parchment-title">♟️ Kammer II: McGonagalls Zauberschach ⚔️</h1>
<p class="riddle-poem" style="font-size: 1.25rem; margin: 0.5rem 0;">
"Wir müssen uns den Weg quer durch das Zimmer freispielen!", rief Ron.<br>
Hinter den weißen Riesenfiguren liegt die schwere Eichentür zur Flammenkammer.<br>
Übernimm die Kontrolle über die schwarzen Steine und setze den weißen König schachmatt!
</p>
</div>
<div class="dungeon-card" style="text-align: center;">
<div id="chessStatus" style="font-size: 1.15rem; color: var(--gold); margin-bottom: 1rem; min-height: 28px;">
🧙‍♂️ Wähle deinen schwarzen Springer oder deine Dame und führe den Siegeszug aus!
</div>
<!-- 8x8 Chess Board Container -->
<div class="chess-board-wrapper">
<div id="chessBoard" class="chess-board">
<!-- Rendered dynamically by chess.js -->
</div>
</div>
<div style="margin-top: 1.25rem; display: flex; justify-content: center; gap: 1rem; flex-wrap: wrap;">
<button type="button" id="btnResetChess" class="btn-control" style="font-size: 0.95rem; padding: 0.6rem 1.2rem;">
🔄 Stellung zurücksetzen
</button>
<a href="/bottles" class="btn-magical">
🧪 Zu Snapes Flaschenkammer ➔
</a>
</div>
<!-- Move History Log -->
<div style="margin-top: 1.25rem; text-align: left; background: rgba(15, 12, 22, 0.7); border: 1px solid rgba(229, 185, 72, 0.25); border-radius: 8px; padding: 0.8rem 1rem;">
<strong style="color: var(--gold); font-size: 0.9rem;">📜 Zug-Protokoll:</strong>
<ul id="moveHistory" style="list-style: none; margin-top: 0.4rem; font-size: 0.85rem; color: var(--text-dim); line-height: 1.6;">
<li>Partie eröffnet: Schwarz am Zug!</li>
</ul>
</div>
</div>
<!-- Tactical Hint Accordion -->
<div class="dungeon-card">
<details>
<summary style="cursor: pointer; font-size: 1.15rem; color: var(--gold); font-weight: bold;">
💡 Rons taktischer Schach-Tipp (Hier klicken)
</summary>
<div style="margin-top: 0.75rem; line-height: 1.7; color: var(--text-light); font-size: 0.95rem;">
<p>
Der weiße König steht in der Ecke auf <strong>h1</strong>, eingeklemmt von seinen eigenen Bauern auf g2 und h2.
</p>
<p style="margin-top: 0.5rem;">
🎯 <strong>Möglichkeit 1:</strong> Führe mit dem schwarzen Springer auf <strong>g4</strong> ein verheerendes Schachgebot auf <strong>f2</strong> aus (♞f2+) – Rons klassisches Springer-Opfer!
</p>
<p style="margin-top: 0.5rem;">
🎯 <strong>Möglichkeit 2:</strong> Schlage mit der schwarzen Dame auf <strong>h4</strong> direkt den Bauern auf <strong>h2</strong> (♛xh2#) – augenblickliches Schachmatt mit Springer-Deckung!
</p>
</div>
</details>
</div>
{% endblock %}
{% block scripts %}
<script src="/static/js/chess.js?v=1.0"></script>
{% endblock %}
+17 -2
View File
@@ -35,13 +35,27 @@
<a href="/broom" class="btn-magical">Auf den Besen schwingen 🧹</a>
</div>
<!-- Chamber 2: Snape's Potions -->
<!-- Chamber 2: McGonagall's Wizard Chess (NEW!) -->
<div class="chamber-card">
<span class="chamber-badge {% if state.chess_solved %}solved{% endif %}">
{% if state.chess_solved %}✅ Gemeistert{% else %}⚔️ Bereit{% endif %}
</span>
<div class="chamber-icon">♟️⚔️</div>
<h3 class="chamber-title">Kammer II: McGonagalls Schach</h3>
<p class="chamber-desc">
Das gigantische, lebendige Zauberschach. Übernimm Rons Rolle als schwarzer Springer,
überliste die weiße Königin und setze den feindlichen König schachmatt!
</p>
<a href="/chess" class="btn-magical">Schachbrett betreten ♟️</a>
</div>
<!-- Chamber 3: Snape's Potions -->
<div class="chamber-card">
<span class="chamber-badge {% if state.bottles_solved %}solved{% endif %}">
{% if state.bottles_solved %}✅ Gemeistert{% else %}🔥 Bereit{% endif %}
</span>
<div class="chamber-icon">🧪🔥</div>
<h3 class="chamber-title">Kammer II: Snapes Flaschenrätsel</h3>
<h3 class="chamber-title">Kammer III: Snapes Flaschen</h3>
<p class="chamber-desc">
Schwarze Flammen versperren den Weg zum Stein, violette Flammen den Rückweg.
Auf dem Tisch stehen 7 Flaschen und Snapes unerbittliches Logik-Gedicht.
@@ -50,6 +64,7 @@
<a href="/bottles" class="btn-magical">Flammenkammer betreten 🧪</a>
</div>
<!-- Bonus: Alchemy Sliding Puzzle -->
<div class="chamber-card">
<span class="chamber-badge {% if state.sliding_solved %}solved{% endif %}">