Zum Inhalt

Guess My Number - Detaillierte Code-Dokumentation

1. HTML-Dokument (index.html)

Dokumentkopf

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- Zeichenkodierung und Viewport-Einstellungen -->
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />

    <!-- Stylesheet-Verknüpfung -->
    <link rel="stylesheet" href="style.css" />

    <!-- Seitentitel -->
    <title>Guess My Number!</title>
</head>
- Definiert HTML5-Dokument - Setzt responsive Darstellung - Verknüpft externe CSS-Datei - Setzt Seitentitel

Dokumentinhalt

<body>
    <header>
        <!-- Haupttitel -->
        <h1>Guess My Number!</h1>

        <!-- Bereichshinweis -->
        <p class="between">(Between 1 and 20)</p>

        <!-- Neustart-Button -->
        <button class="btn again">Again!</button>

        <!-- Geheimzahl-Container -->
        <div class="number">?</div>
    </header>

    <main>
        <!-- Linker Spielbereich -->
        <section class="left">
            <!-- Eingabefeld für Zahl -->
            <input type="number" class="guess" />
            <!-- Überprüfen-Button -->
            <button class="btn check">Check!</button>
        </section>

        <!-- Rechter Informationsbereich -->
        <section class="right">
            <!-- Nachrichten-Anzeige -->
            <p class="message">Start guessing...</p>

            <!-- Punktestand -->
            <p class="label-score">💯 Score: <span class="score">20</span></p>

            <!-- Höchstpunktestand -->
            <p class="label-highscore">🥇 Highscore: <span class="highscore">0</span></p>
        </section>
    </main>

    <!-- JavaScript-Verknüpfung -->
    <script src="script.js"></script>
</body>
</html>
- Strukturiert Spieloberfläche - Definiert Eingabe- und Informationsbereiche - Bindet JavaScript-Datei ein

2. CSS-Dokument (style.css)

Schriftart und Grundreset

@import url('https://fonts.googleapis.com/css?family=Press+Start+2P&display=swap');

* {
  margin: 0;
  padding: 0;
  box-sizing: inherit;
}
- Importiert Pixelschrift - Setzt Standardmargin und Padding - Verwendet vererbte Box-Sizing

HTML und Body-Styling

html {
  font-size: 62.5%; /* Vereinfacht REM-Berechnungen */
  box-sizing: border-box;
}

body {
  font-family: 'Press Start 2P', sans-serif;
  color: #eee; /* Hellgraue Schriftfarbe */
  background-color: #222; /* Dunkelgrauer Hintergrund */
}
- Setzt Basis-Schriftgröße - Definiert Schriftart und Farbschema

Layout-Struktur

header {
  position: relative;
  height: 35vh; /* 35% Höhe */
  border-bottom: 7px solid #eee;
}

main {
  height: 65vh; /* 65% Höhe */
  display: flex;
  align-items: center;
  justify-content: space-around;
}
- Definiert Header- und Hauptbereichsgröße - Verwendet Flexbox für Ausrichtung

Elementspezifisches Styling

.number {
  background: #eee;
  color: #333;
  font-size: 6rem;
  width: 15rem;
  text-align: center;
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translate(-50%, 50%);
}

.btn {
  background-color: #eee;
  color: #222;
  font-size: 2rem;
  cursor: pointer;
}

.btn:hover {
  background-color: #ccc;
}
- Stilisiert Geheimzahl-Anzeige - Definiert Button-Aussehen - Implementiert Hover-Effekt

3. JavaScript-Dokument (script.js)

Initialisierung

'use strict'; // Aktiviert strikten Modus

// Zufällige Geheimzahl zwischen 1-20
let secretNumber = Math.trunc(Math.random() * 20) + 1;
let score = 20; // Initialer Punktestand
let highscore = 0; // Höchstpunktestand
- Generiert zufällige Geheimzahl - Setzt Anfangswerte für Punkte

Hilfsfunktion für Nachrichten

const displayMessage = function (message) {
  // Aktualisiert Nachrichten-Element
  document.querySelector('.message').textContent = message;
};
- Vereinfacht Nachrichtenaktualisierung

Check-Button Event Listener

document.querySelector('.check').addEventListener('click', function () {
  // Konvertiert Eingabe zu Zahl
  const guess = Number(document.querySelector('.guess').value);

  // Verschiedene Spielzustände
  if (!guess) {
    displayMessage('⛔️ No number!'); // Keine Eingabe
  } else if (guess === secretNumber) {
    displayMessage('🎉 Correct Number!'); // Richtige Zahl
    // Zusätzliche Gewinn-Aktionen
  } else if (guess !== secretNumber) {
    // Falscher Tipp
    if (score > 1) {
      displayMessage(guess > secretNumber ? '📈 Too high!' : '📉 Too low!');
      score--; // Punkteabzug
    } else {
      displayMessage('💥 You lost the game!'); // Spiel verloren
    }
  }
});
- Implementiert Spiellogik - Behandelt verschiedene Eingabeszenarien

Neustart-Funktion

document.querySelector('.again').addEventListener('click', function () {
  // Setzt alle Spielelemente zurück
  score = 20;
  secretNumber = Math.trunc(Math.random() * 20) + 1;

  displayMessage('Start guessing...');
  document.querySelector('.score').textContent = score;
  document.querySelector('.number').textContent = '?';
  document.querySelector('.guess').value = '';

  // Styling-Reset
  document.querySelector('body').style.backgroundColor = '#222';
  document.querySelector('.number').style.width = '15rem';
});
- Ermöglicht Spielneustart - Setzt alle Elemente in Ursprungszustand

Spielablauf

  1. Zufällige Geheimzahl wird generiert
  2. Spieler gibt Zahl ein
  3. Überprüfung der Eingabe
  4. Feedback durch Nachrichten
  5. Punkteabzug bei falschen Versuchen
  6. Gewinn/Verlust-Bedingungen
  7. Möglichkeit zum Neustarten