Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Nächste Überarbeitung | Vorherige Überarbeitung | ||
| ksk_ef:web:apps:client [2024-08-11 07:41] – angelegt hof | ksk_ef:web:apps:client [2024-08-11 08:14] (aktuell) – hof | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | # Client-Side TicTacToe | + | ## Client-Side TicTacToe |
| [[wpde> | [[wpde> | ||
| - | {{: | + | {{: |
| - | ## Auftrag Struktur & Formatierung | + | ### Auftrag |
| Erstelle HTML & CSS, um ein TicTacToe-Spiel darzustellen: | Erstelle HTML & CSS, um ein TicTacToe-Spiel darzustellen: | ||
| Zeile 14: | Zeile 14: | ||
| * Eine andere Möglichkeit wäre, die Matrix zu verschachteln mit einem Container, der drei Zeilen-Elemente mit je drei Feldern enthält. | * 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! | * Formatiere anschliessend mit CSS! | ||
| - | * Layout des Spielfelds auf 3x3 Felder. | + | |
| - | * Ansprechende Formatierung (Hintergrundfarbe, | + | |
| - | * Kannst du sogar die Spiel-Logik programmieren? | + | * Horizontale Zentrierung des Spielfelds ([[https:// |
| + | | ||
| + | * Nice-to have: | ||
| + | * Responsive (Spielfeld passt sich der Grösse des Browserfensters an) | ||
| + | * Mobile funktioniert gut ([[https:// | ||
| * Halt, nicht einfach im Internet abschreiben! | * Halt, nicht einfach im Internet abschreiben! | ||
| - | * Hinweise benötigt? | ||
| - | * [[ef_informatik: | ||
| - | * [[https:// | ||
| + | ### Auftrag B: Spiel-Logik | ||
| + | |||
| + | Das Ziel dieses Auftrags ist, dass zu zweit im Browser TicTacToe gespielt werden kann. Dazu nutzen wir [[..:js]]. | ||
| + | |||
| + | Jeder `button` benötigt einen Click-Handler, | ||
| + | |||
| + | Der Click-Handler: | ||
| + | * überprüft, | ||
| + | * 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`, | ||
| + | * ... ü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`: | ||
| + | <code javascript tictactoe.js> | ||
| + | let color = ' | ||
| + | button.innerText = color; | ||
| + | button.setAttribute(' | ||
| + | </ | ||
| + | |||
| + | In [[..: | ||
| + | |||
| + | <code css tictactoe.css> | ||
| + | button[data-state=" | ||
| + | background-color: | ||
| + | } | ||
| + | button[data-state=" | ||
| + | background-color: | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | 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. | ||
| + | |||
| + | <nodisp 2> | ||
| + | ++++Hinweise| | ||
| + | * [[ef_informatik: | ||
| + | * [[https:// | ||
| + | ++++ | ||
| + | </ | ||