Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:ffprg2-2024:tetris [2024/12/13 09:16] – [Code zum Starten] Ivo Blöchliger | lehrkraefte:blc:informatik:ffprg2-2024:tetris [2025/01/20 12:36] (current) – [Code zum Starten] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Tetris ====== | ||
| + | |||
| + | ===== Code zum Starten ===== | ||
| + | * {{lehrkraefte: | ||
| + | |||
| + | Was schon läuft: | ||
| + | * Darstellung im Raster | ||
| + | * Abfrage Tastatur | ||
| + | * Abfrage Touch (nur 1 Player) | ||
| + | * Tetris, alles bis auf Linien abbauen. | ||
| + | ===== Vorgehen ===== | ||
| + | * Code in '' | ||
| + | * Code in tetris.js vervollständigen, | ||
| + | * In '' | ||
| + | * Mit '' | ||
| + | * Für die Methode '' | ||
| + | * Gameplay mit '' | ||
| + | |||
| + | ==== setTimeout im Kontext einer Instanz (Objekt) ==== | ||
| + | Soll im setTimeout eine Methode einer Instanz (Objekt) aufgerufen werden, muss eine Wrapper-Funktion (z.B. mit ''< | ||
| + | <code javascript> | ||
| + | // Methode der aktuellen Instanz in 1000ms aufrufen | ||
| + | // Derweil den Timeout-Handler speichern, damit er annuliert werden kann. | ||
| + | this.timeoutHandler = setTimeout( ()=> | ||
| + | </ | ||
| + | In der '' | ||
| + | <code javascript> | ||
| + | | ||
| + | // Sonstiges Zeugs | ||
| + | // Falls nötig, neuen timeout setzen. | ||
| + | </ | ||
| + | |||
| + | ==== Callback für Game-Handling ==== | ||
| + | Ziel: Code in ui.js soll aufgerufen werden, wenn etwas Spezielles im Tetris-Objekt passiert, z.B. | ||
| + | * Game over | ||
| + | * mehr als eine Zeile auf einmal abgebaut wurde (damit dem Gegner welche «untergeschoben» werden können). | ||
| + | |||
| + | Vorgehen: Beim Anlegen eines Tetris-Objekts wird ein Object mit Callbacks übergeben. | ||
| + | <code javascript> | ||
| + | function unterschieben(tetrisInstanz, | ||
| + | // Tu was mit der Tetris-Instanz | ||
| + | } | ||
| + | function machMalFertig() { | ||
| + | // Tu wat | ||
| + | } | ||
| + | |||
| + | tetris = new Tetris(raster, | ||
| + | </ | ||
| + | |||
| + | In der Tetris-Klasse sieht die Sache dann wie folgt aus: | ||
| + | <code javascript> | ||
| + | // im Constructor die callbacks speichern: | ||
| + | | ||
| + | |||
| + | // in der Funktion, die Linien abbaut, den Callback aufrufen | ||
| + | | ||
| + | </ | ||