Vier Gewinnt Teil 1: Offline¶
Zur späteren Referenz: Der Code für alle folgenden Schritte ist verfügbar auf https://github.com/cwalther/micropython-workshop-fourinarow/commits/master. Während des Kurses brauchen wir das aber nicht.
Schritt 2: Cursor¶
Übung: Zeige einen Cursor an, der sich mit den Links- und Rechts-Tasten auf den ersten 7 Pixeln der obersten Zeile bewegen lässt.
Tipp: Benutze den bitweisen Und-Operator & mit k und den Konstanten pew.K_…, um festzustellen, ob eine Taste gedrückt ist. Sein Ergebnis ist entweder Null oder ungleich Null und kann somit direkt in einer if-Bedingung verwendet werden.
Schritt 3: main()-Funktion¶
Mitschreiben: Den Code in eine Funktion einpacken. Dies hat folgende Vorteile:
Die Funktion kann nochmals aufgerufen werden, ohne dass das Modul nochmals importiert werden muss.
In MicroPython sind lokale Variablen effizienter als globale.
Neues: def
Schritt 4: Wer ist am Zug?¶
Mitschreiben: Nach jedem Einwerfen eines Steins umschalten, wer am Zug ist.
Neues: Bitweises Oder: |
Übung: Teste das Programm. Was ist noch nicht gut?
Schritt 5: Flanken-Detektion¶
Mitschreiben: Nur auf die steigende Flanke des Tastendrucks reagieren.
Neues: Bitweises Nicht: ~, Binärzahlen: 0b…
Schritt 6: Brett anzeigen und Stein platzieren¶
Mitschreiben: Brett anzeigen.
Übung: Platziere bei einem Zug den neuen Stein am richtigen Ort auf dem Brett. Finde dazu mit einer while-Schleife den untersten noch freien Platz in der Spalte unter dem Cursor.
Schritt 7: Gewinn horizontal¶
Mitschreiben: Gewinn durch horizontale Reihen detektieren und hervorheben.
Neues: for … in range(), all(), List Comprehension und Generator Expression (auf REPL ausprobieren), Tuple in mehrere Variablen auflösen
Schritt 8: Gewinn vertikal und diagonal¶
Übung: Detektiere auch Gewinn durch vertikale und diagonale Reihen.
Schritt 9: Beenden¶
Mitschreiben: Nach einem Gewinn die normale Tastenbehandlung stoppen und beim nächsten Tastendruck das Programm beenden.
Da das Programm nun sauber beenden kann und nicht mehr mit ctrl-C unterbrochen werden muss, kann es auch aus dem Menu gestartet werden und kehrt nach dem Beenden zum Menu zurück. Das erspart einem das ständige del sys.modules['four']; import four. Drücke ctrl-D, um MicroPython neu zu starten, so dass main.py ausgeführt wird und das Menu anzeigt. Der Neustart unterbricht die WebREPL-Verbindung, sie kann aber nachher wieder aufgebaut werden, um trotzdem die Ausgabe des Programms und eventuelle Fehlermeldungen zu sehen.
Schritt 10: Animation¶
Mitschreiben: Das Einwerfen eines Steins animieren, auf solche Art, dass mehrere Steine gleichzeitig fallen können.
Neues: Generator Function, range() mit negativem Schritt, next(), try … except
Schritt 11: Blinken¶
Mitschreiben: Eine gewinnende Reihe durch Blinken statt durch orange Farbe hervorheben.
Übung: Teste das Programm. Welche zwei Dinge funktionieren noch nicht gut?
Schritt 12: Warten auf Animationen¶
Übung: Blinke und beende bei Tastendruck erst, wenn die drop-Animation fertig ist.
Tipp:
Prüfe
len(animations), um zu sehen, wie viele Animationen noch am Laufen sind.blink()darf durchaus schon vorher starten, es kann einfach so lange nichts tun, wie kein sichtbares Blinken erwünscht ist.