/Tetris-Preparation

Vorbereitung auf die Implementierung des Riesen-Tetris mit Raspberry und Python

MIT LicenseMIT

Tetris-Preparation

Vorbereitung auf die Implementierung des Riesen-Tetris mit Raspberry und Python.

Dieses Projekt entsteht als Teil der Berufsorientierung für Gymnasiasten (BOGY) für das Leibnitz-Gymnasium in Rottweil im Schuljahr 2018/19. Als Firmenpartner steht Mitutoyo CTL in Oberndorf als Ansprechpartner mit Hardware, Räumlichkeiten und Ansprechpartnern zur Verfügung.

Inspiration für das Thema "Riesen-Tetris" waren

Hardware

Das Praktikum befasst sich hauptsächlich mit der (teils hardwarenahen) Software-Seite. Die Hardware wurde im Wesentlichen von Mitutoyo CTL vorbereitet. Für eine komplette Vorbereitung im Rahmen des BOGY wäre nicht genügend Zeit. Damit dieses Projekt auch von anderen Interessenten umgesetzt werden können, beschreiben wir natürlich auch die Hardware.

Pinbelegung:

  • GPIO 10, SPI0 MOSI (Physikalisch 19) --> LED Matrix DIN (SPI Data In)
  • GPIO 8, SPI0 CE0 (Physikalisch 24) --> LED Matrix CS (SPI Chip Select)
  • GPIO 11, SPI0 SCLK (Physikalisch 23) --> LED Matrix CLK (SPI Clock)
  • GPIO 18 PWM0 (Physikalisch 12) --> WS2812

Vorbereitung / Einführung

Erster Nachmittag, 20.2.2019

Nach der Begrüßung und Führung durch das Gebäude haben wir mit Hilfe der Firmenpräsentation die Firma Mitutoyo, ihre Software und das angebotene Studium der Informatik (Informationstechnik) kennengelernt.

Im Anschluss haben wir kurz die Idee vorgestellt: es soll eine Hardware-Software-Kombination entstehen, mit der man zumindest Tetris spielen kann. Das Brainstorming ergab noch einige weitere Ideen und Anregungen, die wir optional umsetzen können, sofern gegen Ende des BOGY noch Zeit bleibt.

Für einen ersten Überblick gab es die Raspberry Pi Einführung. Den haben wir dann auch zusammengebaut, eingeschaltet und die Software aktualisiert (sudo apt-get update und sudo apt-get upgrade). Außerdem haben wir uns einen Überblick über die verwendete Hardware des Spielbretts verschafft sowie die dazu nötigen Ein- und Ausgabemöglichkeiten des Raspberrys.

Alle Teilnehmer haben bereits einen Github Account angelegt und wurden zu diesem Projekt hinzugefügt.

Weil noch Zeit übrig war, haben wir gleich die USB Soundkarte konfiguriert.

Hausaufgaben:

  • Fotofreigabedokument von den Eltern unterschreiben lassen

Zweiter Nachmittag, 27.2.2019

Heute sind wir tiefer eingestiegen in die Welt des Raspberry. Wir haben die Grundlagen von Linux besprochen, darunter im Wesentlichen den Systemaufbau, Benutzerrechte, Dateien und die Verzeichnisstruktur.

Ein Linuxsystem wie der Raspberry (genauer: Raspbian als Betriebssystem des Raspberry) lässt sich kaum ohne die Konsole einrichten. Daher sind wir auch auf die Befehle des Terminals Bash eingegangen und haben Dateien bearbeitet, Rechte geändert.

Hausaufgaben:

Dritter Nachmittag, 13.3.2019

Beim Daily Standup haben wir gefragt, wer sich zuhause einen virtuellen PC mit Raspbian eingerichtet hat. Mit den Folien der Bash waren wir noch nicht ganz durch, daher haben wir diesen Teil noch nachgeholt. Danach haben wir PyCharm kennengelernt und installiert. Damit waren wir vorbereitet für die Übungen aus der Python Einführung.

Hausaufgaben:

  • PyCharm Community Edition für Windows zuhause installieren
  • Eine oder zwei Aufgaben von Project Euler in Python lösen

Vierter Nachmittag, 20.3.2019

Im Daily Standup haben wir uns natürlich erkundigt, wer sich mit den Python Hausaufgaben beschäftigt hat. Danach haben wir die Python Einführung beim Thema Listen fortgesetzt und sind danach in die objektorientierte Programmierung mit der Präsentation Python Erweitert eingestiegen.

Für dieses Projekt nützliche Bibliotheken können sein:

  • Luma zur Ansteuerung von LEDs
  • Pygame zum Abspielen von Musik
  • Aiohttp für den Webserver, der das Spiel aufs Handy liefert
  • PyBluez, falls wir Zeit haben, Bluetooth-Unterstützung einzubauen

Hausaufgaben aus der Präsentation, Folie 20:

  • füge eine Methode zur Klasse Quader hinzu, die den Quader in einer Richtung dreht.
  • füge eine Funktion zur Klasse Quader hinzu, die das Volumen des Quaders ausrechnet.

Fünfter Nachmittag, 27.3.2019

Im Daily Standup haben wir nach dem Erfolg bei den Hausaufgaben bezüglich des Quaders gefragt. Außerdem wollten wir wissen, wann der Abend der Technik im Jahr 2019 stattfindet. Für diesen Abend werden die Teilnehmer Poloshirts bekommen, weshalb wir schon einmal die Größen abgefragt und ausprobiert haben. Wir haben auch schon die Uhrzeit für die BOGY-Woche festgelegt: wir möchten um 8:30 Uhr starten.

Als Grundlage für eine erfolgreiche Zusammenarbeit haben wir heute das Thema Versionskontrolle grundsätzlich behandelt und sind dann konkret auf Git Grundlagen eingegangen, was die Basis von Github ist.

Hausaufgaben:

  • Git installieren

  • Einen leeren Ordner anlegen

  • Im leeren Ordner die Git Bash öffnen (Kontextmenü)

  • Im Kontextmenü "Git Bash" auswählen

  • Das "Tetris Preparation" Repository klonen:

     git clone https://github.com/BogyMitutoyoCTL/Tetris-Preparation.git ./
    

Sechster Nachmittag, 3.4.2019

Beim Daily Standup haben wir besprochen, ob das Klonen des Repositories geklappt hat und wie wir in der BOGY-Woche verpflegt werden. In unserem Fall bestellen wir Essen von der Firma Fischer in Schramberg.

Heute haben wir die Projektmanagement-Methode Scrum kennengelernt, um dann gleich zur Tat zu schreiten und zu überlegen, welche Funktionen unser Tetris benötigt. Ausgehend von den identifizierten Funktionen haben wir überlegt, wie das EVA-Prinzip (Eingabe, Verarbeitung, Ausgabe) auf die Funktionen anzuwenden ist. Dadurch lassen sich schon Daten identifizieren, die zur Programmierung benötigt werden. Daraus wiederum lassen sich Klassen ableiten.

Programmier-Optionen

Außer einem Tetris-Spiel lässt sich das 10x20 große Spielfeld auch für andere Spiele sowie nützliche Dinge verwenden:

  • Snake
  • Pong
  • Bilder anzeigen
  • Digital-Uhr (Stunde, Minute und Sekunde auf dem großen Display, Datum auf dem kleinen Display)
  • Binär-Uhr (Stunde, Minute und Sekunde als 2x2 große Blöcke, Datum auf dem kleinen Display, ggf. auch binär)
  • Balken-Uhr (Zehner-Stunden, Einer-Stunden, Zehner-Minuten, Einer-Minuten, Datum auf dem kleinen Display)
  • Regenbogen-Uhr (Optionen wie zuvor, jedoch mit einem animierten (?) Regenbogen-Verlauf)
  • Tageslicht-Wecker: morgens dimmt sich das Licht von dunkel gelblich nach hell bläulich
  • Feuer-Animation für kalte Wintertage

Bei zwei Aufbauten:

  • Tetris gegeneinander: der Gegner bekommt n-1 Zeilen auf sein Display geschoben
  • Pong zu zweit