Inhaltsverzeichnis

Client-Side TicTacToe

Tic-Tac-Toe ist ein Spiel mit 3×3 Feldern. Die Spieler:innen setzen abwechslungsweise ein leeres Feld auf X bzw. O. Das Spiel ist beendet, wenn ein Spieler drei Felder in horizontaler, vertikaler oder diagonaler Reihe besetzen kann, oder wenn keine freien Felder übrig sind (unentschieden).

Auftrag A: Struktur & Formatierung

Erstelle HTML & CSS, um ein TicTacToe-Spiel darzustellen:

Grid Layout

Eine gute Möglichkeit, um die grossen Blöcke einer Seite zu organisieren, ist das Grid-Layout. Wie der Name schon sagt, wird ein Container-Element mit display: grid in einem Raster aufgeteilt, und dessen Kind-Knoten füllen das Raster aus:

Der Container für das TicTacToe-Spiel könnte zum Beispiel folgendes CSS haben:

ttt-grid {
    display: grid;                          /* Grid-Layout verwenden */
    grid-template-columns: repeat(3, 1fr);  /* Je 3 Spalten & Zeilen. */
    grid-template-rows: repeat(3, 1fr);     /* Jede 1fr = fractional unit, also ein Drittel gross. */
    gap: 1em:                               /* Abstand im Innern des Grid. */
    aspect-ratio: 1 / 1;                    /* Das Element soll quadratisch sein. */   
}

Ohne weitere CSS-Angaben werden die neun Kinder-Knoten (z.B. button Elemente) der Reihe nach in die Felder des Grids eingefügt. Zusammen mit border etc. ergibt sich ein gut aussehendes 3×3 Spielfeld.

Mehr Informationen zum Grid-Layout auf Selfhtml.

Auftrag B: Spiel-Logik

Das Ziel dieses Auftrags ist, dass zu zweit im Browser TicTacToe gespielt werden kann. Dazu nutzen wir JavaScript.

Jeder button benötigt einen Click-Handler, der ausgeführt wird, wenn die spielende Person darauf klickt.

Der Click-Handler:

Um die Darstellung des Spiels zu ändern, setzen wir den Text des Buttons. Um die Spiellogik zu betreiben, speichern wir den Zustand zudem in einem Attribut data-state:

tictactoe.js
    let color = 'X'; // or 'O'
    button.innerText = color;
    button.setAttribute('data-state', color);

In CSS können wir mit einem geeigneten Selektor die Zellen formatieren, die einen bestimmten Attributwert haben:

tictactoe.css
button[data-state="X"] {  
    background-color: red;
}
button[data-state="O"] {  
    background-color: blue;
}

Für Benachrichtigungen (z.B. über das Ende des Spiels) kann man die Funktion alert(message) nützen, die ein Browser-Popup anzeigt. Schöner ist es, einen Bereich im HTML zu definieren, der Meldungen anzeigt.

Hinweise