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).

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

  • Erstelle einen neuen Ordner, in dem die ganze Web-App enthalten sein wird!
  • Erstelle erst nur das HTML in tictactoe.html!
    • Eine gute Möglichkeit wäre ein Element mit 9 <button> Elementen, die mit einem Grid-Layout auf 3×3 Felder formatiert werden können.
    • Eine andere Möglichkeit wäre, die Matrix zu verschachteln mit einem Container, der drei Zeilen-Elemente mit je drei Feldern enthält.
  • Formatiere anschliessend mit CSS!
    • Muss:
      • Layout des Spielfelds auf 3×3 Felder.
      • Horizontale Zentrierung des Spielfelds (selfhtml)
      • Ansprechende Formatierung (Hintergrundfarbe, Schriftgrösse, Abstände, abgerundete Ecken…)
    • Nice-to have:
      • Responsive (Spielfeld passt sich der Grösse des Browserfensters an)
      • Mobile funktioniert gut (selfhtml)
  • Halt, nicht einfach im Internet abschreiben!

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:

  • überprüft, ob der Spielzug legal ist (Feld frei, Spiel noch nicht beendet?)
  • setzt das Feld auf X oder O
    • einerseits muss der Inhalt des Buttons gesetzt werden, damit der Wert im HTML angezeigt wird.
    • andererseits setzen wir ein Attribut data-state, das dazu dient, die Spiellogik zu betreiben.
  • … überprüft ob das Spiel zu Ende ist
    • entweder, weil ein Spieler gewonnen hat,
    • oder weil keine freien Felder übrig sind
  • … schaltet die Farbe des Spielers um.

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.

  • ksk_ef/web/apps/client.txt
  • Zuletzt geändert: 2024-08-11 08:14
  • von hof