// Spielfeld, Statusanzeige, Restart-Button und Ergebnis-Anzeige aus dem HTML holen const board = document.getElementById("board"); const statusText = document.getElementById("status"); const restartBtn = document.getElementById("restart"); const results = document.getElementById("results"); // Variablen für Spieler, Spielfelder, Spielstatus und Punkte let currentPlayer, cells, gameActive, scoreX = 0, scoreO = 0; // Gewinnkombinationen (Reihen, Spalten, Diagonalen) const winConditions = [ [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6], ]; // Anzeige des Spielstands aktualisieren function updateResults() { results.innerHTML = `Spielstand: X - ${scoreX} | O - ${scoreO}`; } // Neues Spielfeld erstellen / Spiel zurücksetzen function createBoard() { board.innerHTML = ""; // altes Spielfeld leeren cells = Array(9).fill(""); // leeres 3x3 Array erzeugen gameActive = true; // Spiel aktivieren currentPlayer = "X"; // Spieler X beginnt statusText.textContent = "Spieler X beginnt!"; // 9 Felder erstellen for (let i = 0; i < 9; i++) { const cell = document.createElement("div"); cell.className = "cell"; // Standard CSS-Klasse cell.dataset.index = i; // Index für später speichern cell.onclick = handleClick; // Klick-Event hinzufügen board.appendChild(cell); // Feld ins Board einsetzen } updateResults(); // Spielstand einblenden } // Klick auf ein Feld function handleClick(e) { const i = e.target.dataset.index; // Index des Felds if (!gameActive || cells[i]) return; // Abbrechen falls Spiel vorbei oder Feld schon belegt cells[i] = currentPlayer; // Feld mit aktuellem Spieler füllen e.target.textContent = currentPlayer; e.target.classList.add("taken"); // CSS-Klasse für belegte Felder // Prüfen ob gewonnen if (checkWin()) { statusText.textContent = `Spieler ${currentPlayer} hat gewonnen!`; gameActive = false; // Spiel beenden currentPlayer === "X" ? scoreX++ : scoreO++; // Punkte vergeben updateResults(); // Score anzeigen } // Prüfen auf Unentschieden else if (!cells.includes("")) { statusText.textContent = "Unentschieden!"; gameActive = false; } // Spieler wechseln else { currentPlayer = currentPlayer === "X" ? "O" : "X"; statusText.textContent = `Spieler ${currentPlayer} ist dran!`; } } // Prüfen ob aktueller Spieler eine Gewinnbedingung erfüllt function checkWin() { return winConditions.some(c => c.every(i => cells[i] === currentPlayer)); } // Restart-Button mit Spielfeld verbinden restartBtn.onclick = createBoard; // Spiel initial starten createBoard();