459 lines
33 KiB
HTML
459 lines
33 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
|
||
<title>Escape From Teacher</title>
|
||
<link rel="stylesheet" href="style.css">
|
||
</head>
|
||
<body>
|
||
|
||
<button id="mute-btn" onclick="toggleAudio()">🔊</button>
|
||
|
||
<div id="rotate-overlay">
|
||
<div class="icon">📱↻</div>
|
||
<p>Bitte Gerät drehen!</p>
|
||
<small>Querformat benötigt</small>
|
||
</div>
|
||
|
||
<div id="game-container">
|
||
<!-- MAIN MENU -->
|
||
<div id="menu" class="overlay-screen">
|
||
<div id="startScreen">
|
||
<div class="start-left">
|
||
<h1>ESCAPE FROM<br>TEACHER</h1>
|
||
|
||
<p style="font-size: 12px; color: #aaa;">Dein Rekord: <span id="localHighscore" style="color:yellow">0</span></p>
|
||
|
||
<input type="text" id="playerName" placeholder="NAME (4 ZEICHEN)" maxlength="15" style="text-transform:uppercase;">
|
||
|
||
<button id="startBtn" onclick="startSoloGame()" disabled style="opacity: 0.5; cursor: not-allowed;">SOLO STARTEN</button>
|
||
<button id="coopBtn" onclick="showCoopMenu()" disabled style="opacity: 0.5; cursor: not-allowed;">CO-OP SPIELEN</button>
|
||
|
||
<div class="info-box">
|
||
<div class="info-title">SCHUL-NEWS</div>
|
||
<p>
|
||
• Der Lehrer ist hinter dir her!<br>
|
||
• Spring über Hindernisse.<br>
|
||
• Sammle Power-Ups für Vorteile!
|
||
</p>
|
||
</div>
|
||
|
||
<div class="info-box">
|
||
<div class="info-title">STEUERUNG</div>
|
||
<p>
|
||
PC: <strong>Leertaste</strong> (Springen), <strong>WASD/Pfeile</strong> (Bewegen)<br>
|
||
Handy: <strong>Bildschirm-Buttons</strong>
|
||
</p>
|
||
</div>
|
||
|
||
<div class="legal-bar">
|
||
<button class="legal-btn" onclick="showLeaderboard()">🏆 TOP 10</button>
|
||
<button class="legal-btn" onclick="showMyCodes()">🔑 MEINE CODES</button>
|
||
<button class="legal-btn" onclick="showSettings()">⚙️ EINSTELLUNGEN</button>
|
||
</div>
|
||
|
||
<div class="legal-bar" style="margin-top: 10px;">
|
||
<button class="legal-btn" onclick="showImpressum()">📄 IMPRESSUM</button>
|
||
<button class="legal-btn" onclick="showDatenschutz()">🔒 DATENSCHUTZ</button>
|
||
<button class="legal-btn" onclick="showSprueche()">💬 SPRÜCHE</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="start-right">
|
||
<div class="hall-of-fame-box">
|
||
<h3>🏆 TOP SCHÜLER</h3>
|
||
<div id="startLeaderboardList">Lade...</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- CO-OP MENU -->
|
||
<div id="coopMenu" class="overlay-screen hidden">
|
||
<div class="center-box">
|
||
<h1>CO-OP MODUS</h1>
|
||
|
||
<button id="createRoomBtn" class="big-btn" onclick="createRoom()" disabled style="opacity: 0.5; cursor: not-allowed;">RAUM ERSTELLEN</button>
|
||
|
||
<div style="margin: 20px 0;">- ODER -</div>
|
||
|
||
<input type="text" id="joinRoomCode" placeholder="RAUM-CODE" maxlength="6" style="text-transform:uppercase;">
|
||
<input type="text" id="teamNameJoin" placeholder="TEAM-NAME" maxlength="15">
|
||
<button id="joinRoomBtn" onclick="joinRoom()" disabled style="opacity: 0.5; cursor: not-allowed;">RAUM BEITRETEN</button>
|
||
|
||
<button class="back-btn" onclick="showMainMenu()">← ZURÜCK</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- SETTINGS MENU -->
|
||
<div id="settingsMenu" class="overlay-screen hidden">
|
||
<div class="center-box">
|
||
<h1>EINSTELLUNGEN</h1>
|
||
|
||
<div class="settings-group">
|
||
<div class="setting-item">
|
||
<label>MUSIK LAUTSTÄRKE:</label>
|
||
<input type="range" id="musicVolume" min="0" max="100" value="70">
|
||
<span id="musicValue">70%</span>
|
||
</div>
|
||
|
||
<div class="setting-item">
|
||
<label>SFX LAUTSTÄRKE:</label>
|
||
<input type="range" id="sfxVolume" min="0" max="100" value="70">
|
||
<span id="sfxValue">70%</span>
|
||
</div>
|
||
</div>
|
||
|
||
<button class="back-btn" onclick="showMainMenu()">← ZURÜCK</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- LEADERBOARD MENU -->
|
||
<div id="leaderboardMenu" class="overlay-screen hidden">
|
||
<div class="center-box">
|
||
<h1>🏆 TOP 10 LEADERBOARD</h1>
|
||
|
||
<div id="leaderboardList" class="leaderboard-box">
|
||
Lade Leaderboard...
|
||
</div>
|
||
|
||
<button class="back-btn" onclick="showMainMenu()">← ZURÜCK</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- MY CODES MENU -->
|
||
<div id="myCodesMenu" class="overlay-screen hidden">
|
||
<div class="center-box">
|
||
<h1>🔑 MEINE HIGHSCORE-CODES</h1>
|
||
|
||
<div id="myCodesList" class="leaderboard-box" style="max-height: 500px;">
|
||
Keine Codes gespeichert.
|
||
</div>
|
||
|
||
<button class="back-btn" onclick="showMainMenu()">← ZURÜCK</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- IMPRESSUM MENU -->
|
||
<div id="impressumMenu" class="overlay-screen hidden">
|
||
<div class="center-box" style="max-width: 800px;">
|
||
<h1>📄 IMPRESSUM & CREDITS</h1>
|
||
|
||
<div class="leaderboard-box" style="max-height: 500px; overflow-y: auto; text-align: left; font-family: sans-serif; font-size: 13px; line-height: 1.6; background: #333; color: #fff;">
|
||
<h3 style="color: #fc0; margin-top: 0;">Projektleitung & Code:</h3>
|
||
<p>Sebastian Unterschütz<br>
|
||
Göltzschtalblick 16<br>
|
||
08236 Ellefeld<br>
|
||
<strong>Kontakt:</strong> sebastian@unterschuetz.de</p>
|
||
|
||
<h3 style="color: #fc0; margin-top: 20px;">🎵 Musik & Sound Design:</h3>
|
||
<p>Max Eisel</p>
|
||
|
||
<h3 style="color: #fc0; margin-top: 20px;">💻 Quellcode:</h3>
|
||
<p><a href="https://git.zb-server.de/ZB-Server/EscapeFromTeacher" target="_blank" style="color: #fc0;">git.zb-server.de/ZB-Server/EscapeFromTeacher</a></p>
|
||
|
||
<h3 style="color: #fc0; margin-top: 20px;">⚖️ Lizenzhinweis:</h3>
|
||
<p style="background: rgba(255,204,0,0.1); padding: 10px; border-left: 3px solid #fc0;">
|
||
Dies ist ein <strong>Schulprojekt</strong>.<br>
|
||
Kommerzielle Nutzung und Veränderung des Quellcodes sind ausdrücklich untersagt.<br>
|
||
Alle Rechte liegen bei den Urhebern.
|
||
</p>
|
||
</div>
|
||
|
||
<button class="back-btn" onclick="showMainMenu()">← ZURÜCK</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- DATENSCHUTZ MENU -->
|
||
<div id="datenschutzMenu" class="overlay-screen hidden">
|
||
<div class="center-box" style="max-width: 800px;">
|
||
<h1>🔒 DATENSCHUTZERKLÄRUNG</h1>
|
||
|
||
<div class="leaderboard-box" style="max-height: 500px; overflow-y: auto; text-align: left; font-family: sans-serif; font-size: 13px; line-height: 1.6; background: #333; color: #fff;">
|
||
<h3 style="color: #fc0; margin-top: 0;">1. Datenschutz auf einen Blick</h3>
|
||
<p><strong>Allgemeine Hinweise:</strong> Die folgenden Hinweise geben einen einfachen Überblick darüber, was mit Ihren personenbezogenen Daten passiert, wenn Sie diese Website besuchen.</p>
|
||
|
||
<h3 style="color: #fc0; margin-top: 20px;">2. Verantwortlicher</h3>
|
||
<p>Verantwortlich für die Datenverarbeitung auf dieser Website ist:<br>
|
||
<strong>Sebastian Unterschütz</strong><br>
|
||
Göltzschtalblick 16, 08236 Ellefeld<br>
|
||
E-Mail: sebastian@unterschuetz.de<br>
|
||
(Schulprojekt im Rahmen der IT232)</p>
|
||
|
||
<h3 style="color: #fc0; margin-top: 20px;">3. Hosting (Hetzner)</h3>
|
||
<p>Wir hosten die Inhalte unserer Website bei folgendem Anbieter:<br>
|
||
<strong>Hetzner Online GmbH</strong><br>
|
||
Industriestr. 25, 91710 Gunzenhausen, Deutschland</p>
|
||
<p><strong>Serverstandort:</strong> Deutschland (ausschließlich).<br>
|
||
Wir haben mit dem Anbieter einen Vertrag zur Auftragsverarbeitung (AVV) geschlossen, der die Einhaltung der DSGVO gewährleistet.</p>
|
||
|
||
<h3 style="color: #fc0; margin-top: 20px;">4. Datenerfassung auf dieser Website</h3>
|
||
|
||
<h4 style="color: #fc0; margin-top: 15px;">Server-Log-Dateien</h4>
|
||
<p>Der Provider der Seiten (Hetzner) erhebt und speichert automatisch Informationen in so genannten Server-Log-Dateien (Browser, OS, Referrer, Hostname, Uhrzeit, IP-Adresse).<br>
|
||
<strong>Rechtsgrundlage:</strong> Art. 6 Abs. 1 lit. f DSGVO (Berechtigtes Interesse an technischer Fehlerfreiheit und Sicherheit). Die Daten werden nach spätestens 14 Tagen gelöscht.</p>
|
||
|
||
<h4 style="color: #fc0; margin-top: 15px;">Spielstände & Highscores</h4>
|
||
<p>Wenn Sie einen Highscore eintragen, speichern wir:</p>
|
||
<ul style="margin-left: 20px;">
|
||
<li>Gewählter Name (Pseudonym empfohlen!)</li>
|
||
<li>Punktestand und Zeitstempel</li>
|
||
<li>Eindeutiger Player-Code (generiert)</li>
|
||
<li>Proof-Code (kryptografischer Hash zur Verifizierung des Scores)</li>
|
||
</ul>
|
||
<p>Diese Daten dienen der Darstellung der Bestenliste und der Verifikation Ihrer Highscores.</p>
|
||
|
||
<h4 style="color: #fc0; margin-top: 15px;">Lokale Speicherung (LocalStorage)</h4>
|
||
<p>Das Spiel speichert folgende Daten lokal in Ihrem Browser:</p>
|
||
<ul style="margin-left: 20px;">
|
||
<li>Einstellungen (Audio-Lautstärke)</li>
|
||
<li>Ihr Spielername</li>
|
||
<li>Ihr Player-Code</li>
|
||
<li>Ihre erreichten Highscore-Codes mit Proof-Codes</li>
|
||
<li>Lokaler Highscore-Rekord</li>
|
||
</ul>
|
||
<p>Diese Daten verbleiben <strong>ausschließlich auf Ihrem Gerät</strong> und werden nicht an uns übertragen. Sie können diese Daten jederzeit über die Browser-Einstellungen löschen.</p>
|
||
|
||
<p style="background: rgba(255,204,0,0.1); padding: 10px; border-left: 3px solid #fc0; margin-top: 15px;">
|
||
<strong>Wichtig:</strong> Wir setzen <strong>keine Tracking-Cookies</strong> oder Analyse-Tools ein. Es erfolgt keine Weitergabe Ihrer Daten an Dritte (außer technisch notwendig über Hetzner als Hosting-Provider).
|
||
</p>
|
||
|
||
<h3 style="color: #fc0; margin-top: 20px;">5. Ihre Rechte</h3>
|
||
<p>Sie haben jederzeit das Recht auf Auskunft, Berichtigung und Löschung Ihrer Daten. Wenden Sie sich dazu an den Verantwortlichen im Impressum.<br>
|
||
Um Ihre lokal gespeicherten Highscore-Codes zu löschen, nutzen Sie die Funktion im Menü <strong>"🔑 MEINE CODES"</strong> oder löschen Sie den Browser-LocalStorage.</p>
|
||
</div>
|
||
|
||
<button class="back-btn" onclick="showMainMenu()">← ZURÜCK</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- SPRÜCHE MENU -->
|
||
<div id="spruecheMenu" class="overlay-screen hidden">
|
||
<div class="center-box" style="max-width: 900px; width: 95%;">
|
||
<h1>💬 LEGENDÄRE SPRÜCHE</h1>
|
||
<p style="font-size: 12px; color: #888; margin: -10px 0 15px;">Aus dem Schulalltag – gesammelt von Schülern</p>
|
||
<div id="spruecheList" class="leaderboard-box" style="max-height: 60vh; overflow-y: auto; text-align: left; padding: 10px;"></div>
|
||
<button class="back-btn" onclick="showMainMenu()">← ZURÜCK</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- LOBBY SCREEN (CO-OP WAITING ROOM) -->
|
||
<div id="lobbyScreen" class="overlay-screen hidden">
|
||
<div class="center-box">
|
||
<h1>LOBBY</h1>
|
||
|
||
<div id="lobbyContent" style="display: flex; gap: 20px; width: 100%; justify-content: center; align-items: flex-start;">
|
||
<div style="flex: 1; max-width: 400px;">
|
||
<p style="font-size: 14px; color: #aaa; margin-bottom: 10px;">Spieler im Raum:</p>
|
||
<div id="lobbyPlayerList" style="background: rgba(0,0,0,0.5); border: 2px solid #666; padding: 15px; min-height: 100px; font-family: sans-serif; font-size: 14px;">
|
||
<div style="color: #888;">Warte auf Spieler...</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div style="flex: 1; max-width: 300px;">
|
||
<p style="font-size: 14px; color: #aaa; margin-bottom: 10px;">Raum-Code:</p>
|
||
<div style="background: rgba(0,0,0,0.6); border: 4px solid #ffcc00; padding: 20px; font-size: 32px; color: #ffcc00; letter-spacing: 4px; text-align: center;">
|
||
<span id="lobbyRoomCode">XXXXX</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="lobbyTeamNameBox" class="hidden" style="margin: 20px 0; width: 100%; max-width: 400px;">
|
||
<p style="font-size: 14px; color: #aaa; margin-bottom: 10px;">Team-Name (nur Host):</p>
|
||
<input type="text" id="lobbyTeamName" placeholder="TEAM-NAME EINGEBEN" maxlength="15" style="text-transform:uppercase; width: 100%; padding: 10px; font-size: 16px;">
|
||
<p id="currentTeamName" style="font-size: 12px; color: #ffcc00; margin-top: 5px;">Aktuell: <span id="teamNameDisplay">Nicht gesetzt</span></p>
|
||
</div>
|
||
|
||
<div id="lobbyHostControls" class="hidden" style="margin: 20px 0;">
|
||
<button class="big-btn" onclick="startGameFromLobby()" style="background: #00cc00;">SPIEL STARTEN</button>
|
||
</div>
|
||
|
||
<p id="lobbyStatus" style="font-size: 12px; color: #ffcc00; margin: 20px 0;">Warte auf Host...</p>
|
||
|
||
<button class="back-btn" onclick="leaveLobby()">← LOBBY VERLASSEN</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- GAME OVER SCREEN -->
|
||
<div id="gameOverScreen" class="overlay-screen hidden">
|
||
<div class="center-box">
|
||
<h1>ERWISCHT!</h1>
|
||
|
||
<p style="font-size: 18px; margin: 20px 0;">
|
||
Dein Score: <span id="finalScore" style="color:yellow; font-size: 24px;">0</span>
|
||
</p>
|
||
|
||
<div id="gameOverLeaderboardList" class="leaderboard-box" style="margin: 20px 0;">
|
||
Lade Leaderboard...
|
||
</div>
|
||
|
||
<button class="big-btn" onclick="restartGame()" style="background: #ff4444; margin-top: 20px;">ERNEUT VERSUCHEN</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- LOADING SCREEN -->
|
||
<div id="loading" class="loading-screen">
|
||
<div class="spinner"></div>
|
||
<p>Lade Escape From Teacher...</p>
|
||
<div id="loadingQuote" style="max-width:500px;margin-top:30px;padding:0 20px;text-align:center;"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sprüche Logic -->
|
||
<script>
|
||
const SPRUECHE = [
|
||
{ text: "Mobbing ist besser als gar keine sozialen Kontakte.", author: "Ein Lehrer" },
|
||
{ text: "Ein Lehrer kauft sich ein Auto, weil ihm die Farbe gefallen hat.", author: "Schulflur-Legende" },
|
||
{ text: "Was heißt Strafe auf Englisch? „Richard“?", author: "Ein Lehrer", ctx: "Während er versucht, einem Schüler etwas auf Englisch zu erklären" },
|
||
{ text: "Heute ist [alles in der Anwesenheitsliste] richtig eingetragen.", author: "Eine Lehrerin", ctx: "Am Montagmorgen. Ein paar Stunden später fehlte trotzdem jemand in der Liste." },
|
||
{ text: "Verstehen Sie überhaupt die Prüfungsfragen? Neh, ach …", author: "Ein Lehrer", ctx: "An einen Schüler" },
|
||
{ text: "Tut mir leid, dass ich Sie damit nerve, aber … [erzählt 10 Minuten über seine Weiterbildung zu Courage und Rechtsextremismus]. Ein Schüler meldet sich. – Ist das eine rechtsextreme Handlung?!", author: "Ein Lehrer" },
|
||
{ text: "Können wir nochmal eine LK über Straßennamen schreiben? – Ja klar, wenn du das willst.", author: "Schüler & Lehrerin", ctx: "Richard zur Deutschlehrerin im 3. Lehrjahr" },
|
||
{ text: "Mitten im WiKu-Unterricht betritt eine Lehrerin den Raum, schaut sich kurz um, schnappt sich den versteckten Wasserkocher vom Fensterstock und geht wieder. Ist das gerade wirklich passiert?", author: "Augenzeugen" },
|
||
{ text: "Neues Lieblingswort: „Hanebüchen“", author: "Ein Lehrer" },
|
||
{ text: "Einem Lehrer fällt die Kinnlade runter, als Reda chinesisch mit den chinesischen Lehrkräften spricht – und diese es verstehen.", author: "Augenzeugen" },
|
||
{ text: "Ich bin mit dem Staat verheiratet. … Ich hab das nur wegen der Pension gemacht.", author: "Ein Lehrer (Lehrer aus Überzeugung)" },
|
||
{ text: "Ich hab 'nen Freund, [Schüler]! – Das ist egal.", author: "Eine Lehrerin & Schüler" },
|
||
{ text: "Beschreibungen im Unterricht u.a.: Slavenhandel, Mafia, Kopfgeld, Knebelverträge, Voodoo-Zauber (bei Physik und Frontend), Menschen quälen mit Aufgaben, goldene Balkone bauen, geklauter Code … und ein Ast als Zeigestock, mit dem er auf die Tastatur haut.", author: "Ein Lehrer" },
|
||
{ text: "Ein Kollege hat vorgeschlagen, bei der Hitze schon um 6:40 Uhr anzufangen. Ich meinte, um diese Zeit ist noch niemand da, nicht einmal ich selber. Dann meinte ich, wir sollten lieber 5:40 Uhr anfangen. Dann kommen noch welche von ihrem Heimweg vorbei.", author: "Ein Lehrer" },
|
||
{ text: "Nachdem wir in ihrem Kreuzworträtsel etwa 10 Fehler gefunden haben, gibt sie zu, dass sie es bei einem Gläschen Wein erstellt hat. 1A Unterrichtsvorbereitung.", author: "Eine Lehrerin" },
|
||
{ text: "Die „Katastrophenprüfung“ im Sommer 2023 – und die „Entschuldigungsprüfung“ im Sommer 2024.", author: "Ein Lehrer" },
|
||
{ text: "Das „Pippi“-Diagramm: das UML-Sequenzdiagramm.", author: "Ein Lehrer" },
|
||
{ text: "Und wo ist euer Klassenbuch? Mit wem hattet ihr gestern zuletzt Unterricht? – Mit [dem Lehrer]. – Ah ja. – Der hat das gegessen.", author: "Eine Lehrerin" },
|
||
{ text: "Cool! Ich hab einen Klassensatz Bücher bestellt bekommen!", author: "Eine Lehrerin", ctx: "Freut sich wie ein Kind" },
|
||
{ text: "Ich hör viel zu viel Deutsch… Das ist nicht rassistisch gemeint. … Äh … Redet gefälligst in Englisch!", author: "Eine Lehrerin", ctx: "Im Englischunterricht" },
|
||
{ text: "Itze! Äh, äh, nowe! … Yes, this is good so.", author: "Eine Lehrerin" },
|
||
{ text: "Die anderen listen carefully, bitte.", author: "Eine Lehrerin" },
|
||
{ text: "Was mit Beschiss? Mit Beschiss kann ich. […] Ich hab den König gekrönt vom Bescheissen.", author: "Ein Lehrer" },
|
||
{ text: "Ein Lehrer erzählt die Geschichte von dem Huhn, das aggro wurde, als es einen Waschbären traf – das jetzt so viel wert ist wie seine neue Brille.", author: "Schulflur-Legende" },
|
||
{ text: "BPMN ist EPK auf Steroiden.", author: "Ein Lehrer" },
|
||
{ text: "Richard ist heute nicht da. – Was!? Dann wird das ja heute richtig still im Raum. Geil. Das hab ich jetzt nicht gesagt.", author: "Schüler & Lehrerin" },
|
||
{ text: "Zu Hausmeistern habe ich immer noch das beste Verhältnis – im Gegensatz zu manchen anderen.", author: "Ein Lehrer" },
|
||
{ text: "Ein Kollege hat das bestimmt entspannter gemacht. Ich mag Menschen quälen.", author: "Ein Lehrer", ctx: "Zu LF 3" },
|
||
{ text: "Morgen sind Schüler unserer polnischen Partnerschule mit in unserem Unterricht. Die wollen von dem Besten lernen – also von mir.", author: "Ein Lehrer" },
|
||
{ text: "Zwei Lehrer haben sich beim Kaffeetrinken über die Notengebung geeinigt. „[Der Kollege] ist da sehr entspannt, weil er Richard nur noch zwei Stunden die Woche hat.“", author: "Schulflur-Legende" },
|
||
{ text: "Ich bräuchte jetzt wirklich einen Kaffee oder ein Bier. Aber bietet mir bloß nicht was aus eurem Kofferraum an! Nur weil manche Schüler das schon gemacht haben…", author: "Eine Lehrerin", ctx: "Nach ausführlicher Diskussion über Englisch-Noten in der 9. Stunde" },
|
||
{ text: "Unterrichtsvorbereitung: „Ich werde es Ihnen beweisen. Hoffentlich habe ich keine zu große Klappe…“", author: "Ein Lehrer" },
|
||
{ text: "Ein Facharzt? Das ist ne echt gute Ausrede. Verdammte Scheiße…", author: "Ein Lehrer", ctx: "Zum Schüler, der früher gehen musste" },
|
||
{ text: "Scheiße, darauf kann ich nicht rumschreiben!", author: "Ein Lehrer", ctx: "Als er mit dem Tablet-Stift auf den Fernseher zugeht" },
|
||
{ text: "Can you read number 4? – Which number? – Please pay a little bit more attension to the lesson!", author: "Richard", ctx: "Während er versucht, die Klasse auf Englisch zu unterrichten, weil die Lehrerin noch nicht da war. Gelächter, weil er selbst sonst nur zu selten aufpasst." },
|
||
{ text: "Warum muss ich jetzt wieder Scheiße erklären, die ich net verzapft hab. Lasst mich doch in Ruhe.", author: "Ein Lehrer", ctx: "Als die Klasse mal wieder abschweift" },
|
||
{ text: "Dann können Rollstuhlfahrer gleich mit in den Krieg ziehen.", author: "Ein Lehrer" },
|
||
{ text: "Mobbing ist 3 Monate durchgängig. Ich kann sie also nicht gar nicht mobben, weil sie immer weg sind.", author: "Ein Lehrer" },
|
||
{ text: "Ich spiele kein Schach mehr, seit ich gegen ein (Klein-)Kind verloren hab.", author: "Ein Lehrer" },
|
||
{ text: "Sind denn alle schon da? Es sind so wenig gerade. – Es sind ja auch nur die A- und C-Klasse da. Vermisst du etwa Richard?", author: "Samuel & Mitschüler" },
|
||
{ text: "Spielen Sie „God of War“? So sehen sie auch aus.", author: "Ein Lehrer", ctx: "Zu einem Schüler in der ersten Reihe" },
|
||
{ text: "Ich hab gesehen, dass jetzt sogar Spiele aus dem Microsoft Store hier funktionieren. Kaum zu glauben.", author: "Ein Lehrer", ctx: "Über die Schultechnik" },
|
||
{ text: "Die Antwort soll „ja“ sein. Mit genug Reden kann man auch das Gegenteil argumentieren. Mit viel Liebe, ja.", author: "Ein Lehrer", ctx: "Beim Auflösen einer Aufgabe" },
|
||
{ text: "Hallo, [Herr Lehrer]! – Was macht ihr denn jetzt? – Wir gehen auf's Klo. – Was macht [Richard] jetzt? Sich ein Loch graben?", author: "Richard, David & ein Lehrer" },
|
||
{ text: "Offiziell gibt's das Notenbuch gar nicht. – Der könnte von mir sein.", author: "Sebastian & ein Lehrer", ctx: "Über eigenmächtige Eintragungen" },
|
||
{ text: "Nicht richtig, aber auch nicht zielführend. – Richard: In der Prüfung… Aber wenn das nicht die Antwort ist, kann ich doch die IHK verklagen?", author: "Eine Lehrerin & Richard" },
|
||
{ text: "Wollen Sie jetzt damit sagen, dass Stuttgart keinen Bahnhof braucht? – Nein, aber net so ein Ding. Hätten sie mal lieber die halbe Stadt weggesprengt und einen richtigen Bahnhof hingebaut.", author: "Ein Lehrer" },
|
||
{ text: "Es geht darum, Sie drei Jahre hinzuhalten – und dann sind Sie eh weg.", author: "Ein Lehrer", ctx: "Zum Prinzip Berufsschule" },
|
||
{ text: "Diesen Workaround gibt es hier nicht. Es gibt hier gar kein Problem. Am Tag darauf: Es gibt *** nochmal keine Probleme!", author: "Ein Lehrer", ctx: "Zu den „Problematica“ der IT-Infrastruktur" },
|
||
{ text: "Wenn man seine Kommentare aus dem Kontext reißt: „Ich denke immer, ich bin doof. Aber das ist so.“", author: "Ein Lehrer" },
|
||
{ text: "Wollen Sie etwas Lustiges hören? Nein? Dann eben etwas Trauriges…", author: "Ein Lehrer", ctx: "Freitagmorgen" },
|
||
{ text: "Ein Lehrer schickt einen Schüler, ein Messer aus dem Lehrerzimmer zu holen – Tür extra offengelassen. Der Schüler kommt mit Messer heraus, begegnet zwei verdutzt schauenden Lehrern, grüßt freundlichst und geht weiter, als ob er das jeden Tag machen würde.", author: "Schulflur-Legende" },
|
||
{ text: "Warum wollen Sie die Schule versichern? Die können Sie sowieso nicht verklagen.", author: "Ein Lehrer" },
|
||
{ text: "Das ist das Beste, das uns passieren kann. Dann können wir von null anfangen.", author: "Ein Lehrer", ctx: "Falls der einzige IT-Administrator-Lehrer mal nicht mehr da sein sollte" },
|
||
{ text: "Haltet euch sklavisch an die Notation!", author: "Ein Lehrer" },
|
||
{ text: "Nur die Paranoiden werden überleben.", author: "Ein Lehrer" },
|
||
{ text: "Ein Lehrer wünscht sich, dass die Schüler mehr Angst haben. Aber nicht, dass den Schülern Angst gemacht wird.", author: "Schulflur-Legende" },
|
||
{ text: "Ich bin gerade im Größenwahn und es wird immer verrückter.", author: "Ein Lehrer", ctx: "Mitten im Unterricht" },
|
||
{ text: "Und was haben Sie heute gemacht? – Nichts. – Und was soll ich jetzt darauf antworten? Wenn Sie einmal einen Yachthafen haben, …", author: "Ein Lehrer", ctx: "Am Ende des Unterrichts" },
|
||
{ text: "Die Schüler haben mich genötigt durchzumachen (damit sie eher gehen können).", author: "Ein Lehrer", ctx: "Nach der Mittagspause" },
|
||
{ text: "Programmieren kann so ekelhaft sein, wenn man sich wirklich damit beschäftigt.", author: "Ein Lehrer" },
|
||
{ text: "Vorsicht, sauer. Hab ich meinen Kindern geklaut.", author: "Ein Lehrer", ctx: "Beim Austeilen von sauren Gummischlangen" },
|
||
{ text: "[Herr Lehrer], Sie sind mein absoluter Lieblingslehrer, … – Mit was habe ich Ihre Anwesenheit verdient?", author: "Richard & ein Lehrer" },
|
||
{ text: "Die Beitragsätze der Sozialversicherungen haben sich geändert. Und ich muss nur kurz mein Auto aufsperren.", author: "Eine Lehrerin", ctx: "Im neuen Kalenderjahr" },
|
||
{ text: "Es gibt eine große Zeitspanne, in der quasi keine Lehrer ausgebildet wurden. – Und dann gibt es noch solche von der Resterampe wie mich.", author: "Ein Lehrer" },
|
||
{ text: "Ja. So viel Pech im Denken kann man gar nicht haben.", author: "Ein Lehrer", ctx: "Als ihn ein Schüler fragte, mit wem er Spaß bei Sinusfunktionen hatte" },
|
||
{ text: "Richard; bei dir, das hab ich gleich gelassen und gar keine Note drunter geschrieben.", author: "Eine Lehrerin", ctx: "Beim Zurückgeben freiwilliger Aufgaben" },
|
||
{ text: "Die Noten der letzten LK konnten nicht eingetragen werden, weil die Notenbücher verschwunden sind. Reaktion: „Die tauchen irgendwann schon wieder auf.“", author: "Eine Lehrerin" },
|
||
{ text: "Ein Lehrer kommt random in der Mittagspause ins Zimmer und erzählt von seinen kulinarischen Abenteuern – u.a. Gammelfisch am Wochenende.", author: "Zeugen" },
|
||
{ text: "Samuel: Ich hab für den Weg zum Netto länger gebraucht als die WiKu-LK gerade.", author: "Samuel" },
|
||
{ text: "[Schüler], waren Sie gestern da? – Nein, ich war krank. Warum? – Weil ein Kollege drauf gewettet hat, dass Sie nicht da sind. Ich hab die Wette verloren.", author: "Ein Lehrer" },
|
||
{ text: "[Herr Lehrer], wie heißen Sie eigentlich mit Vornamen? – „Unwichtig.“ – Aha, „Unwichtig [Nachname].“ – Wie würden Sie sich nennen, wenn Sie sich einen Namen aussuchen könnten? – „Ich-hab-zu-tun,-Geh-weg.“", author: "Richard & ein Lehrer" },
|
||
{ text: "Der Assi = der Assistenzarzt. „Hat der Assi Sie gut behandelt?“", author: "Ein Lehrer" },
|
||
{ text: "Dass ihr mal wisst, wie eine Prüfung physisch aussieht – hier die vom Sommer '26. – Die nehmen wir gerne! – Nein! Die vom Sommer '25.", author: "Ein Lehrer & Schüler" },
|
||
{ text: "Ich kenn einen Autor vom Westermann; der schimpft eigentlich nur.", author: "Ein Lehrer" },
|
||
{ text: "[Herr Lehrer], haben Sie ein Messer dabei? – Nein, leider nicht.", author: "Schüler & ein Lehrer" },
|
||
{ text: "Sag mal, die Amok-Läufer; das sind doch immer Schüler, oder?", author: "Ein Lehrer", ctx: "Zu einem Kollegen" },
|
||
{ text: "Das werdet ihr nicht mehr erleben mit den elektronischen Tafeln…", author: "Eine Lehrerin" },
|
||
{ text: "Ich darf mich doch, während ich die Aufgabe mache, umentscheiden. – Ich muss Sie aber verstehen. Denken Sie doch mal an mich!", author: "Schüler & ein Lehrer" },
|
||
{ text: "Wir schauen uns eine Aufgabe aus der Prüfung der Systemintegratoren an. Wir haben ja einen Experten hier sitzen. Richard: So einfach?! – Mehr trauen sie Euch nicht zu.", author: "Ein Lehrer & Richard", ctx: "Richard hatte sich in seiner Freistunde in den Unterricht gesetzt" },
|
||
{ text: "[Schüler], du hast leider eine 2 in der Arbeit… Haben wir uns trotzdem noch lieb?", author: "Ein Lehrer" },
|
||
{ text: "Kann ich Sie ihrem elendigem Schicksal überlassen? (= Bitte gehen Sie.)", author: "Ein Lehrer", ctx: "Zum Stundenbeginn" },
|
||
{ text: "Ich war leider zu spät. – Zu spät zum Unterricht, oder für was? – Zu spät zum Gaffen.", author: "Ein Lehrer", ctx: "Am Tag nach einem Unfall auf der Reichenbacher Straße" },
|
||
{ text: "Da wäre ich fast ausm Schlüpper geflogen!", author: "Eine Lehrerin" },
|
||
{ text: "Was stört sich die Eiche, wenn sich ein Schwein daran wälzt.", author: "Ein Lehrer" },
|
||
{ text: "Ich habe nichts verstanden. – Hättest du auch nicht, wenn Ton da gewesen wäre.", author: "Leon & ein Lehrer", ctx: "Bei einem Video mit Tonproblemen" },
|
||
{ text: "Ein Lehrer greift an eine gerissene Achillessehne (einer anderen Person), nur um zu wissen, wie sich das anfühlt: „Wie Matsch.“", author: "Augenzeugen" },
|
||
{ text: "Wo ist Sebastian? – Krank. Wo ist euer Klassenbuch? – Krank.", author: "Reda" },
|
||
{ text: "„W“-Fragen sind verpönt! Das geht gar nicht!", author: "Ein Lehrer" },
|
||
{ text: "Wenn Richard im Unterricht keine Zeit hat, mit Mitschülern zu reden – dann muss eine Lehrerin daran glauben…", author: "Schulflur-Legende" },
|
||
{ text: "Jetzt muss ich mir schon die Musterlösung schönsaufen.", author: "Ein Lehrer" },
|
||
{ text: "Ich muss die Prüfung nicht schreiben!", author: "Ein Lehrer", ctx: "Bei der Prüfungsvorbereitung" },
|
||
{ text: "Werd ich echt alt?", author: "Ein Lehrer", ctx: "Nachdem er die Anfänge von Wörtern nicht mehr gut verstand" },
|
||
{ text: "Bei euch hab ich ein gutes Gefühl. Apropos – wo ist denn Leon?", author: "Ein Lehrer", ctx: "Als die Prüfung näher rückte" },
|
||
{ text: "Ein Lehrer kennt leider alle Bibi & Tina-Filme und erkennt für die Hälfte der Folgen den Titel am Titelbild.", author: "Schulflur-Legende" },
|
||
{ text: "Die Geißel Gottes. Ich freue mich, Sie zu sehen…!", author: "Ein Lehrer", ctx: "Zu Richard" },
|
||
{ text: "Ja, wir haben ein Kind. Meine Frau war da mehr beteiligt als ich.", author: "Ein Lehrer" },
|
||
{ text: "Kind kriegen ist glaub ich schon geiler als auf'm Mount Everest zu steigen.", author: "Ein Lehrer" },
|
||
{ text: "Ein Lehrer setzt Richard nach einem unruhigen Stundenstart nach vorne und fordert ihn zur Mitarbeit auf. Danach hat er im Unterricht niemanden mehr, den er rügen konnte.", author: "Augenzeugen" },
|
||
{ text: "„Mach nicht den Reda!“ = In einen Raum gehen, vor dem Schüler warten, und ihnen noch zurufen, dass da eine andere Klasse drin ist – in dem Moment hat er die Tür schon aufgemacht und blickt in die verwirrten Gesichter der fremden Klasse.", author: "Schulflur-Legende" },
|
||
];
|
||
|
||
function showLoadingQuote() {
|
||
const el = document.getElementById('loadingQuote');
|
||
if (!el || !SPRUECHE.length) return;
|
||
const q = SPRUECHE[Math.floor(Math.random() * SPRUECHE.length)];
|
||
const txt = q.text.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
|
||
const ctx = q.ctx ? q.ctx.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>') : '';
|
||
const auth = q.author.replace(/&/g,'&');
|
||
el.innerHTML = '<p style="font-family:sans-serif;font-size:13px;color:#ddd;line-height:1.6;font-style:italic;">\u201E' + txt + '\u201C</p>'
|
||
+ (ctx ? '<p style="font-size:11px;color:#ccc;margin-top:4px;font-style:italic;">' + ctx + '</p>' : '')
|
||
+ '<p style="font-size:12px;color:#fc0;margin-top:6px;">\u2014 ' + auth + '</p>';
|
||
}
|
||
showLoadingQuote();
|
||
|
||
// Wechsle Spruch alle 4 Sekunden während des Ladens
|
||
const _loadingQuoteInterval = setInterval(function() {
|
||
if (document.getElementById('loading') && !document.getElementById('loading').classList.contains('hidden')) {
|
||
showLoadingQuote();
|
||
} else {
|
||
clearInterval(_loadingQuoteInterval);
|
||
}
|
||
}, 10000);
|
||
|
||
function showSprueche() {
|
||
document.querySelectorAll('.overlay-screen').forEach(el => el.classList.add('hidden'));
|
||
document.getElementById('spruecheMenu').classList.remove('hidden');
|
||
|
||
const shuffled = [...SPRUECHE].sort(() => Math.random() - 0.5);
|
||
const container = document.getElementById('spruecheList');
|
||
container.innerHTML = shuffled.map(q => {
|
||
const txt = q.text.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
|
||
const ctx = q.ctx ? q.ctx.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>') : '';
|
||
const auth = q.author.replace(/&/g,'&');
|
||
return '<div style="background:rgba(255,255,255,0.92);border-left:4px solid #fc0;margin:8px 0;padding:12px 15px;border-radius:3px;">'
|
||
+ '<p style="margin:0 0 6px;font-family:sans-serif;font-size:14px;color:#111;line-height:1.5;">' + txt + '</p>'
|
||
+ (ctx ? '<p style="margin:0 0 4px;font-size:11px;color:#555;font-style:italic;">' + ctx + '</p>' : '')
|
||
+ '<p style="margin:0;font-size:12px;color:#996600;font-weight:bold;">— ' + auth + '</p>'
|
||
+ '</div>';
|
||
}).join('');
|
||
}
|
||
</script>
|
||
|
||
<!-- WASM Execution -->
|
||
<script>
|
||
// Cache-Busting für JavaScript-Dateien (wird beim Build aktualisiert)
|
||
const BUILD_VERSION = 1767643088942;
|
||
document.write('<script src="wasm_exec.js?v=' + BUILD_VERSION + '"><\/script>');
|
||
document.write('<script src="game.js?v=' + BUILD_VERSION + '"><\/script>');
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|