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

_images/cursor-board.svg

Ü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

_images/win-horizontal.svg

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

_images/win-vertical-diagonal.svg

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