1
0

1033 lines
38 KiB
HTML

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pokémon Quiz</title>
<!-- OG Tags -->
<meta property="og:title" content="Pokémon Quiz">
<meta property="og:description" content="Teste dein Pokémon-Wissen mit diesem Quiz">
<meta property="og:type" content="website">
<meta property="og:url" content="https://tools.ponywave.de/pokemon_quiz">
<meta property="og:image" content="https://tools.ponywave.de/pokemon_quiz/images/pokeball.png">
<!-- Favicon -->
<link rel="icon" href="images/favicon.ico">
<link rel="shortcut icon" href="images/favicon.ico">
<!-- Analytics -->
<script defer src="https://stats.ponywave.de/script" data-website-id="9ef713d2-adb9-4906-9df5-708d8a8b9131" data-tag="pokemon_quiz"></script>
<style>
body {
font-family: 'Arial', sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #f5f5f5;
color: #333;
}
h1 {
text-align: center;
color: #e91e63;
margin-bottom: 30px;
}
.container {
background-color: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
.start-screen, .quiz-screen, .result-screen, .generation-screen {
text-align: center;
}
.difficulty-buttons, .generation-buttons {
display: flex;
justify-content: center;
gap: 15px;
margin: 20px 0;
flex-wrap: wrap;
}
.info-text {
margin: 20px 0;
padding: 10px;
background-color: #e3f2fd;
border-radius: 5px;
font-style: italic;
color: #0d47a1;
}
button {
background-color: #4caf50;
color: white;
border: none;
padding: 10px 20px;
cursor: pointer;
border-radius: 5px;
font-size: 16px;
transition: background-color 0.3s;
}
button:hover {
background-color: #45a049;
}
.pokemon-image {
width: 200px;
height: 200px;
object-fit: contain;
margin: 20px auto;
display: block;
}
.silhouette {
filter: brightness(0); /* Silhouette-Effekt */
}
.pokemon-image.revealed {
filter: brightness(1); /* Normaler Zustand */
animation: reveal 0.5s ease-in-out;
}
@keyframes reveal {
0% { filter: brightness(0); }
100% { filter: brightness(1); }
}
.option-button {
display: block;
width: 100%;
margin: 10px 0;
background-color: #2196f3;
}
.option-button:hover {
background-color: #0d8aee;
}
.option-button.correct {
background-color: #4caf50;
}
.option-button.incorrect {
background-color: #f44336;
}
.next-button {
margin-top: 20px;
background-color: #9c27b0;
}
.next-button:hover {
background-color: #8e24aa;
}
.restart-button {
margin-top: 20px;
background-color: #ff9800;
}
.restart-button:hover {
background-color: #f57c00;
}
.progress {
margin-top: 20px;
font-style: italic;
color: #666;
}
.hidden {
display: none;
}
.back-button {
margin-top: 10px;
background-color: #f44336;
}
.back-button:hover {
background-color: #e53935;
}
.generation-all {
background-color: #673ab7;
}
.generation-all:hover {
background-color: #5e35b1;
}
.score {
font-size: 24px;
font-weight: bold;
margin: 20px 0;
color: #e91e63;
}
/* Stil für die Wissenseinschätzung */
.knowledge-rating {
font-size: 18px;
margin: 20px 0;
padding: 15px;
border-radius: 8px;
background-color: #f5f5f5;
text-align: center;
line-height: 1.5;
}
.knowledge-rating-title {
font-weight: bold;
font-size: 20px;
margin-bottom: 10px;
color: #673ab7;
}
/* Farbstile für verschiedene Bewertungsstufen */
.rating-beginner {
border-left: 5px solid #f44336;
}
.rating-intermediate {
border-left: 5px solid #ff9800;
}
.rating-advanced {
border-left: 5px solid #4caf50;
}
.rating-expert {
border-left: 5px solid #2196f3;
}
.rating-master {
border-left: 5px solid #9c27b0;
}
footer {
margin-top: 40px;
text-align: center;
color: #666;
border-top: 1px solid #ddd;
padding-top: 20px;
}
footer a {
color: #e91e63;
text-decoration: none;
}
footer a:hover {
text-decoration: underline;
}
.save-load-buttons {
display: flex;
justify-content: center;
gap: 15px;
margin: 15px 0;
}
.save-button {
background-color: #ff9800;
}
.save-button:hover {
background-color: #f57c00;
}
.load-button {
background-color: #2196f3;
}
.load-button:hover {
background-color: #0d8aee;
}
/* Modals und Popups */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s, visibility 0.3s;
}
.modal-overlay.active {
opacity: 1;
visibility: visible;
}
.modal {
background-color: white;
border-radius: 10px;
padding: 20px;
max-width: 400px;
width: 90%;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
text-align: center;
}
.modal h3 {
margin-top: 0;
color: #e91e63;
}
.modal-buttons {
display: flex;
justify-content: center;
gap: 15px;
margin-top: 20px;
}
.modal-buttons button {
min-width: 100px;
}
.quit-button {
background-color: #f44336;
margin-top: 10px;
}
.quit-button:hover {
background-color: #e53935;
}
.modal-confirm {
background-color: #4caf50;
}
.modal-cancel {
background-color: #9e9e9e;
}
/* Freeform-Modus Styles */
.freeform-input {
margin: 20px auto;
width: 100%;
max-width: 300px;
padding: 10px;
font-size: 16px;
border: 2px solid #2196f3;
border-radius: 5px;
text-align: center;
}
.freeform-input:focus {
outline: none;
border-color: #9c27b0;
box-shadow: 0 0 8px rgba(156, 39, 176, 0.5);
}
.mode-selection {
margin: 15px 0;
}
.mode-options {
display: flex;
justify-content: center;
gap: 15px;
margin: 15px 0;
}
.mode-button {
background-color: #ff9800;
}
.mode-button:hover {
background-color: #f57c00;
}
.mode-button.active {
background-color: #e65100;
box-shadow: 0 0 10px rgba(230, 81, 0, 0.5);
}
.freeform-feedback {
margin: 10px 0;
font-weight: bold;
font-size: 18px;
height: 25px;
}
.freeform-feedback.correct {
color: #4caf50;
}
.freeform-feedback.incorrect {
color: #f44336;
}
.submit-answer {
background-color: #2196f3;
margin-top: 10px;
}
.submit-answer:hover {
background-color: #0d8aee;
}
.correct-name {
margin-top: 10px;
font-weight: bold;
color: #4caf50;
}
</style>
</head>
<body>
<h1>Pokémon Quiz</h1>
<div class="container">
<!-- Generation-Auswahl Screen -->
<div class="generation-screen">
<h2>Wähle eine Pokémon-Generation</h2>
<img src="" alt="Zufälliges Pokémon" class="pokemon-image" id="random-pokemon">
<div class="generation-buttons">
<button class="generation-button" data-gen="1">Gen 1: Kanto (1-151)</button>
<button class="generation-button" data-gen="2">Gen 2: Johto (152-251)</button>
<button class="generation-button" data-gen="3">Gen 3: Hoenn (252-386)</button>
<button class="generation-button" data-gen="4">Gen 4: Sinnoh (387-493)</button>
<button class="generation-button" data-gen="5">Gen 5: Einall (494-649)</button>
<button class="generation-button" data-gen="6">Gen 6: Kalos (650-721)</button>
<button class="generation-button" data-gen="7">Gen 7: Alola (722-809)</button>
<button class="generation-button" data-gen="8">Gen 8: Galar (810-905)</button>
<button class="generation-button" data-gen="9">Gen 9: Paldea (906-1025)</button>
<button class="generation-button generation-all" data-gen="all">Alle Generationen</button>
</div>
<!-- Fortschritt laden Button anzeigen, wenn gespeichert -->
<div class="save-load-buttons">
<button id="load-progress-button" class="load-button hidden">Fortschritt laden</button>
</div>
</div>
<!-- Schwierigkeitsgrad-Auswahl Screen -->
<div class="start-screen hidden">
<h2>Wähle den Schwierigkeitsgrad</h2>
<img src="" alt="Zufälliges Pokémon" class="pokemon-image" id="difficulty-pokemon">
<!-- Spielmodus-Auswahl -->
<div class="mode-selection">
<h3>Spielmodus</h3>
<div class="mode-options">
<button id="mode-multiple-choice" class="mode-button active">Multiple Choice</button>
<button id="mode-freeform" class="mode-button">Freeform</button>
</div>
</div>
<div class="difficulty-buttons">
<button id="very-easy">10 Pokémon</button>
<button id="easy">25 Pokémon</button>
<button id="medium">50 Pokémon</button>
<button id="advanced">75 Pokémon</button>
<button id="hard">100 Pokémon</button>
<button id="expert">125 Pokémon</button>
<button id="all">Alle Pokémon</button>
</div>
<button class="back-button">Zurück zur Generation</button>
</div>
<!-- Quiz Screen -->
<div class="quiz-screen hidden">
<h2>Wie heißt dieses Pokémon?</h2>
<img src="" alt="Pokémon" class="pokemon-image silhouette" id="pokemon-image">
<!-- Multiple Choice Optionen -->
<div id="multiple-choice-container">
<div class="options" id="options">
<!-- Optionen werden hier dynamisch eingefügt -->
</div>
</div>
<!-- Freeform Eingabe -->
<div id="freeform-container" class="hidden">
<input type="text" id="freeform-input" class="freeform-input" placeholder="Pokémon-Name eingeben..." autocomplete="off">
<div id="freeform-feedback" class="freeform-feedback"></div>
<div id="correct-name" class="correct-name hidden"></div>
<button id="submit-answer" class="submit-answer">Überprüfen</button>
</div>
<button class="next-button hidden" id="next-button">Nächstes Pokémon</button>
<div class="progress" id="progress"></div>
<!-- Fortschritt speichern und Aufgeben -->
<div class="save-load-buttons">
<button id="save-progress-button" class="save-button">Fortschritt speichern</button>
<button id="quit-button" class="quit-button">Aufgeben</button>
</div>
</div>
<!-- Ergebnis Screen -->
<div class="result-screen hidden">
<h2>Quiz beendet!</h2>
<div class="score" id="final-score"></div>
<div id="knowledge-rating" class="knowledge-rating">
<div class="knowledge-rating-title">Wissenseinschätzung</div>
<div id="knowledge-rating-text"></div>
</div>
<button class="restart-button" id="restart-button">Neustart</button>
</div>
</div>
<!-- Modals -->
<div class="modal-overlay" id="save-modal">
<div class="modal">
<h3>Fortschritt gespeichert!</h3>
<p>Dein Fortschritt wurde erfolgreich gespeichert.</p>
<div class="modal-buttons">
<button class="modal-confirm" onclick="closeModal('save-modal')">OK</button>
</div>
</div>
</div>
<div class="modal-overlay" id="quit-modal">
<div class="modal">
<h3>Quiz wirklich beenden?</h3>
<p>Möchtest du das Quiz wirklich beenden? Dein aktueller Fortschritt geht verloren, wenn du nicht gespeichert hast.</p>
<div class="modal-buttons">
<button class="modal-cancel" onclick="closeModal('quit-modal')">Abbrechen</button>
<button class="modal-confirm" onclick="quitQuiz()">Beenden</button>
</div>
</div>
</div>
<footer>
<a href="https://tools.ponywave.de">Zurück zur Startseite</a> | &copy; 2025 Akamaru | Made with ❤️ by Claude
</footer>
<script>
// DOM-Elemente
const generationScreen = document.querySelector('.generation-screen');
const startScreen = document.querySelector('.start-screen');
const quizScreen = document.querySelector('.quiz-screen');
const resultScreen = document.querySelector('.result-screen');
const randomPokemonImage = document.getElementById('random-pokemon');
const difficultyPokemonImage = document.getElementById('difficulty-pokemon');
const pokemonImage = document.getElementById('pokemon-image');
const optionsContainer = document.getElementById('options');
const multipleChoiceContainer = document.getElementById('multiple-choice-container');
const freeformContainer = document.getElementById('freeform-container');
const freeformInput = document.getElementById('freeform-input');
const freeformFeedback = document.getElementById('freeform-feedback');
const correctNameElement = document.getElementById('correct-name');
const submitAnswerButton = document.getElementById('submit-answer');
const nextButton = document.getElementById('next-button');
const progressElement = document.getElementById('progress');
const finalScoreElement = document.getElementById('final-score');
const restartButton = document.getElementById('restart-button');
const backButton = document.querySelector('.back-button');
const generationButtons = document.querySelectorAll('.generation-button');
const saveProgressButton = document.getElementById('save-progress-button');
const loadProgressButton = document.getElementById('load-progress-button');
const quitButton = document.getElementById('quit-button');
const modeMultipleChoiceButton = document.getElementById('mode-multiple-choice');
const modeFreeformButton = document.getElementById('mode-freeform');
// Spielvariablen
let pokemons = [];
let currentPokemonIndex = 0;
let quizPokemons = [];
let correctAnswers = 0;
let answeredQuestions = 0;
let selectedGeneration = 1;
let maxPokemonNumber = 151; // Standard: Gen1
let gameMode = 'multiple-choice'; // Standard: Multiple-Choice
// Modal-Funktionen
function showModal(modalId) {
document.getElementById(modalId).classList.add('active');
}
function closeModal(modalId) {
document.getElementById(modalId).classList.remove('active');
}
function quitQuiz() {
closeModal('quit-modal');
quizScreen.classList.add('hidden');
generationScreen.classList.remove('hidden');
displayRandomPokemon(randomPokemonImage);
}
// Game Mode Selection
modeMultipleChoiceButton.addEventListener('click', () => {
setGameMode('multiple-choice');
});
modeFreeformButton.addEventListener('click', () => {
setGameMode('freeform');
});
function setGameMode(mode) {
gameMode = mode;
// UI-Update der Buttons
modeMultipleChoiceButton.classList.toggle('active', mode === 'multiple-choice');
modeFreeformButton.classList.toggle('active', mode === 'freeform');
}
// Generation-Bereiche
const generations = {
1: { min: 1, max: 151, name: "Kanto" },
2: { min: 152, max: 251, name: "Johto" },
3: { min: 252, max: 386, name: "Hoenn" },
4: { min: 387, max: 493, name: "Sinnoh" },
5: { min: 494, max: 649, name: "Einall" },
6: { min: 650, max: 721, name: "Kalos" },
7: { min: 722, max: 809, name: "Alola" },
8: { min: 810, max: 905, name: "Galar" },
9: { min: 906, max: 1025, name: "Paldea" }
};
// Fortschritt-Speicher-Funktionalität
// Prüfe, ob ein gespeicherter Fortschritt vorhanden ist
function checkSavedProgress() {
const savedProgress = localStorage.getItem('pokemonQuizProgress');
if (savedProgress) {
loadProgressButton.classList.remove('hidden');
} else {
loadProgressButton.classList.add('hidden');
}
}
// Fortschritt speichern
function saveProgress() {
const progress = {
selectedGeneration,
quizPokemons,
currentPokemonIndex,
correctAnswers,
answeredQuestions,
pokemons, // Speichere auch die verfügbaren Pokémon für die korrekten Antwortoptionen
gameMode // Speichere den Spielmodus
};
localStorage.setItem('pokemonQuizProgress', JSON.stringify(progress));
showModal('save-modal');
}
// Fortschritt laden
function loadProgress() {
const savedProgress = localStorage.getItem('pokemonQuizProgress');
if (savedProgress) {
const progress = JSON.parse(savedProgress);
selectedGeneration = progress.selectedGeneration;
quizPokemons = progress.quizPokemons;
currentPokemonIndex = progress.currentPokemonIndex;
correctAnswers = progress.correctAnswers;
answeredQuestions = progress.answeredQuestions;
// Spielmodus laden, falls vorhanden
if (progress.gameMode) {
gameMode = progress.gameMode;
}
// Stelle sicher, dass wir alle Pokémon haben, um korrekte Antwortoptionen zu generieren
if (progress.pokemons) {
pokemons = progress.pokemons;
} else {
// Lade die Pokémon für die aktuelle Generation, wenn sie nicht gespeichert wurden
loadPokemonForGeneration(selectedGeneration).then(() => {
showNextPokemon();
});
return;
}
// UI wechseln
generationScreen.classList.add('hidden');
startScreen.classList.add('hidden');
quizScreen.classList.remove('hidden');
resultScreen.classList.add('hidden');
// Zeige den richtigen Modus an
updateGameModeUI();
// Aktuelles Pokémon anzeigen
showNextPokemon();
}
}
// Spielmodus-UI aktualisieren
function updateGameModeUI() {
if (gameMode === 'multiple-choice') {
multipleChoiceContainer.classList.remove('hidden');
freeformContainer.classList.add('hidden');
} else {
multipleChoiceContainer.classList.add('hidden');
freeformContainer.classList.remove('hidden');
// Reset Freeform-Elemente
freeformInput.value = '';
freeformInput.disabled = false;
freeformFeedback.textContent = '';
freeformFeedback.className = 'freeform-feedback';
correctNameElement.textContent = '';
correctNameElement.classList.add('hidden');
submitAnswerButton.disabled = false;
}
}
// Lade Pokémon-Daten für eine bestimmte Generation
async function loadPokemonForGeneration(generation) {
try {
if (generation === "all") {
// Lade alle Generationen
pokemons = [];
for (let i = 1; i <= 9; i++) {
try {
const genResponse = await fetch(`json/gen${i}.json`);
const genData = await genResponse.json();
pokemons = pokemons.concat(genData);
} catch (genError) {
console.warn(`Generation ${i} nicht verfügbar:`, genError);
}
}
} else {
// Lade spezifische Generation
const response = await fetch(`json/gen${generation}.json`);
pokemons = await response.json();
}
return pokemons;
} catch (error) {
console.error('Fehler beim Laden der Pokémon-Daten:', error);
return [];
}
}
// Event-Listener für Fortschritt-Buttons
saveProgressButton.addEventListener('click', saveProgress);
loadProgressButton.addEventListener('click', loadProgress);
quitButton.addEventListener('click', () => showModal('quit-modal'));
// Pokemon-Daten laden
async function loadPokemonData(generation) {
try {
await loadPokemonForGeneration(generation);
maxPokemonNumber = generations[generation] ? generations[generation].max : 151;
setupDifficultyButtons();
displayRandomPokemon(difficultyPokemonImage);
// Zeige den Schwierigkeitsgrad-Screen
generationScreen.classList.add('hidden');
startScreen.classList.remove('hidden');
} catch (error) {
console.error('Fehler beim Laden der Pokémon-Daten:', error);
alert(`Generation ${generation} ist noch nicht verfügbar. Bitte wähle eine andere Generation.`);
}
}
// Event-Listener für Generationsauswahl
generationButtons.forEach(button => {
button.addEventListener('click', () => {
const gen = button.getAttribute('data-gen');
selectedGeneration = gen;
loadPokemonData(gen);
});
});
// Zufälliges Pokémon im Startbildschirm anzeigen
function displayRandomPokemon(imageElement) {
if (pokemons.length > 0) {
const randomIndex = Math.floor(Math.random() * pokemons.length);
const randomPokemon = pokemons[randomIndex];
const genFolder = getGenerationFolder(randomPokemon.nummer);
imageElement.src = `images/${genFolder}/${randomPokemon.nummer}.png`;
}
}
// Bestimme den Generationsordner basierend auf der Pokémon-Nummer
function getGenerationFolder(number) {
const num = parseInt(number);
for (let genId in generations) {
const gen = generations[genId];
if (num >= gen.min && num <= gen.max) {
return `gen${genId}`;
}
}
return "gen1"; // Fallback
}
// Schwierigkeitsgrad-Buttons einrichten
function setupDifficultyButtons() {
document.getElementById('very-easy').addEventListener('click', () => startQuiz(10));
document.getElementById('easy').addEventListener('click', () => startQuiz(25));
document.getElementById('medium').addEventListener('click', () => startQuiz(50));
document.getElementById('advanced').addEventListener('click', () => startQuiz(75));
document.getElementById('hard').addEventListener('click', () => startQuiz(100));
document.getElementById('expert').addEventListener('click', () => startQuiz(125));
document.getElementById('all').addEventListener('click', () => startQuiz(pokemons.length));
}
// Quiz starten
function startQuiz(count) {
// Alle Pokémon zufällig anordnen und dann nur die gewünschte Anzahl nehmen
const shuffledPokemons = shuffleArray([...pokemons]);
count = Math.min(count, shuffledPokemons.length);
quizPokemons = shuffledPokemons.slice(0, count);
// Spielvariablen zurücksetzen
currentPokemonIndex = 0;
correctAnswers = 0;
answeredQuestions = 0;
// UI wechseln
startScreen.classList.add('hidden');
quizScreen.classList.remove('hidden');
resultScreen.classList.add('hidden');
// Aktualisiere die Spielmodus-UI
updateGameModeUI();
// Erstes Pokémon anzeigen
showNextPokemon();
}
// Nächstes Pokémon anzeigen
function showNextPokemon() {
if (currentPokemonIndex >= quizPokemons.length) {
showResults();
return;
}
const currentPokemon = quizPokemons[currentPokemonIndex];
// Bild setzen
const genFolder = getGenerationFolder(currentPokemon.nummer);
pokemonImage.src = `images/${genFolder}/${currentPokemon.nummer}.png`;
pokemonImage.classList.add('silhouette');
pokemonImage.classList.remove('revealed');
// Je nach Spielmodus UI anpassen
if (gameMode === 'multiple-choice') {
// Optionen generieren
generateOptions(currentPokemon);
} else {
// Freeform-Felder zurücksetzen
freeformInput.value = '';
freeformInput.disabled = false;
freeformInput.focus();
freeformFeedback.textContent = '';
freeformFeedback.className = 'freeform-feedback';
correctNameElement.textContent = '';
correctNameElement.classList.add('hidden');
submitAnswerButton.disabled = false;
}
// Fortschritt aktualisieren
progressElement.textContent = `Pokemon ${currentPokemonIndex + 1} von ${quizPokemons.length}`;
// Next-Button verstecken
nextButton.classList.add('hidden');
}
// Optionen für aktuelles Pokémon generieren (Multiple Choice)
function generateOptions(currentPokemon) {
// Optionen-Container leeren
optionsContainer.innerHTML = "";
// Richtige Antwort
const correctAnswer = currentPokemon.name;
// Zwei falsche Antworten auswählen
const incorrectOptions = getRandomIncorrectOptions(correctAnswer, 2);
// Alle Optionen mischen
const allOptions = shuffleArray([correctAnswer, ...incorrectOptions]);
// Optionen-Buttons erstellen
allOptions.forEach(option => {
const button = document.createElement('button');
button.classList.add('option-button');
button.textContent = option;
button.addEventListener('click', () => checkMultipleChoiceAnswer(button, option, correctAnswer));
optionsContainer.appendChild(button);
});
}
// Antwort überprüfen (Multiple Choice)
function checkMultipleChoiceAnswer(button, selectedOption, correctAnswer) {
// Pokémon aufdecken
pokemonImage.classList.add('revealed');
pokemonImage.classList.remove('silhouette');
// Alle Buttons deaktivieren
const allButtons = optionsContainer.querySelectorAll('button');
allButtons.forEach(btn => {
btn.disabled = true;
if (btn.textContent === correctAnswer) {
btn.classList.add('correct');
}
});
// Ausgewählten Button markieren
if (selectedOption === correctAnswer) {
button.classList.add('correct');
correctAnswers++;
} else {
button.classList.add('incorrect');
}
// Nächster Button anzeigen
nextButton.classList.remove('hidden');
answeredQuestions++;
}
// Event-Listener für Freeform-Antworten
submitAnswerButton.addEventListener('click', checkFreeformAnswer);
freeformInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
checkFreeformAnswer();
}
});
// Antwort überprüfen (Freeform)
function checkFreeformAnswer() {
const currentPokemon = quizPokemons[currentPokemonIndex];
const correctAnswer = currentPokemon.name;
const userAnswer = freeformInput.value.trim();
// Pokémon aufdecken
pokemonImage.classList.add('revealed');
pokemonImage.classList.remove('silhouette');
// Eingabefeld und Button deaktivieren
freeformInput.disabled = true;
submitAnswerButton.disabled = true;
// Antwort vergleichen (unabhängig von Groß-/Kleinschreibung)
const isCorrect = userAnswer.toLowerCase() === correctAnswer.toLowerCase();
// Feedback anzeigen
if (isCorrect) {
freeformFeedback.textContent = "Richtig!";
freeformFeedback.className = "freeform-feedback correct";
correctAnswers++;
} else {
freeformFeedback.textContent = "Falsch!";
freeformFeedback.className = "freeform-feedback incorrect";
correctNameElement.textContent = `Die richtige Antwort ist: ${correctAnswer}`;
correctNameElement.classList.remove('hidden');
}
// Nächster Button anzeigen
nextButton.classList.remove('hidden');
answeredQuestions++;
}
// Zufällige falsche Optionen generieren
function getRandomIncorrectOptions(correctAnswer, count) {
// Liste aller Pokémon-Namen ohne die richtige Antwort
const allNames = pokemons.map(p => p.name).filter(name => name !== correctAnswer);
return shuffleArray(allNames).slice(0, count);
}
// Ergebnisse anzeigen
function showResults() {
quizScreen.classList.add('hidden');
resultScreen.classList.remove('hidden');
finalScoreElement.textContent = `Deine Punktzahl: ${correctAnswers} von ${quizPokemons.length}`;
// Berechne den Prozentsatz der richtigen Antworten
const percentage = (correctAnswers / quizPokemons.length) * 100;
// Aktualisiere die Wissenseinschätzungsanzeige
updateKnowledgeRating(percentage);
}
// Array zufällig mischen (Fisher-Yates Algorithmus)
function shuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
// Zurück zur Generationsauswahl
backButton.addEventListener('click', () => {
startScreen.classList.add('hidden');
generationScreen.classList.remove('hidden');
displayRandomPokemon(randomPokemonImage);
});
// Event-Listener einrichten
nextButton.addEventListener('click', () => {
currentPokemonIndex++;
showNextPokemon();
});
restartButton.addEventListener('click', () => {
resultScreen.classList.add('hidden');
generationScreen.classList.remove('hidden');
displayRandomPokemon(randomPokemonImage);
});
// Anwendung initialisieren
// Prüfe, ob ein gespeicherter Fortschritt vorhanden ist
checkSavedProgress();
// Zeige zufälliges Pokémon im Generationsauswahl-Screen
fetch('json/gen1.json')
.then(response => response.json())
.then(data => {
const tempPokemons = data;
const randomIndex = Math.floor(Math.random() * tempPokemons.length);
const randomPokemon = tempPokemons[randomIndex];
randomPokemonImage.src = `images/gen1/${randomPokemon.nummer}.png`;
})
.catch(error => {
console.error('Fehler beim Laden der Vorschau:', error);
randomPokemonImage.src = 'images/gen1/001.png'; // Fallback
});
// Aktualisiere die Wissenseinschätzungsanzeige
function updateKnowledgeRating(percentage) {
const knowledgeRating = document.getElementById('knowledge-rating');
const knowledgeRatingText = document.getElementById('knowledge-rating-text');
// Setze die Klasse zurück
knowledgeRating.className = 'knowledge-rating';
// Bestimme die Bewertungsstufe und Text basierend auf dem Prozentsatz
let ratingClass, ratingText;
if (percentage < 20) {
ratingClass = 'rating-beginner';
ratingText = 'Pokémon-Anfänger: Du hast gerade erst mit deiner Reise begonnen! Aber keine Sorge, jeder große Trainer fängt klein an. Trainiere weiter und werde mit der Zeit besser!';
} else if (percentage < 40) {
ratingClass = 'rating-intermediate';
ratingText = 'Pokémon-Trainer: Du kennst schon einige Pokémon, aber es gibt noch viel zu entdecken. Weiter so, du bist auf dem richtigen Weg!';
} else if (percentage < 60) {
ratingClass = 'rating-advanced';
ratingText = 'Erfahrener Trainer: Du hast ein solides Wissen über Pokémon! Mit ein bisschen mehr Training könntest du es mit den Arenaleitern aufnehmen.';
} else if (percentage < 80) {
ratingClass = 'rating-expert';
ratingText = 'Pokémon-Experte: Beeindruckend! Du kennst dich sehr gut in der Welt der Pokémon aus. Die Top Vier sind nicht mehr weit entfernt!';
} else {
ratingClass = 'rating-master';
ratingText = 'Pokémon-Meister: Unglaublich! Dein Wissen ist auf dem Niveau eines Pokémon-Champions. Professor Eich wäre stolz auf dich!';
}
// Wende die Klasse an und setze den Text
knowledgeRating.classList.add(ratingClass);
knowledgeRatingText.textContent = ratingText;
}
</script>
</body>
</html>