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
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
- Zufällige Geheimzahl wird generiert
- Spieler gibt Zahl ein
- Überprüfung der Eingabe
- Feedback durch Nachrichten
- Punkteabzug bei falschen Versuchen
- Gewinn/Verlust-Bedingungen
- Möglichkeit zum Neustarten