header

Tetris zum Selbermachen

Das Erlernen einer neuen Programmiersprache ist, selbst wenn man in der Programmierung kein Anfänger mehr ist, eine Aufgabe, die sich selten in wenigen Stunden erledigen lässt. Im mindesten muss man sich eine große Menge an Schlüsselwörtern, Operatoren und Eigenarten einprägen. Wenn dieses Wissen dann nicht angewendet wird, geht es wieder verloren. Aus diesem Grund ist es wichtig, möglichst schnell etwas in der neuen Programmiersprache zu programmieren, damit sich dieses Wissen festigen kann.

Hier möchte ich nun ein Beispiel vorstellen, welches meiner Meinung nach als solche Programmieraufgabe besonders geeignet ist: Tetris! Ich selbst habe es mir zur Gewohnheit gemacht, es zu implementieren, sobald ich eine neue Programmiersprache lerne oder mit einer neuen Hardware arbeite.

Tetris ist wohl das bekannteste Computerspiel aus der Anfangszeit der Heimcomputer. Noch heute ist es weit verbreitet und auf jeder denkbaren Plattform verfügbar. Es lässt sich in jeder Programmiersprache realisieren, da es keine besonderen Ansprüche hat: Arrays, Schleifen, Bedingungen, Eingabe und Ausgabe - das kann jede Programmiersprache.

Hier (*click*) habe ich einmal einen Beispielcode vorbereitet. Während ich diesen Text hier schrieb, las ich einen Artikel (*click*) über eine Umfrage, nach der Javascript eine der beliebtesten Programmiersprachen ist. Deswegen das Beispiel in JS!

[Kurzanleitung: Setze Cursor auf das Textfeld oben links und die steuerung erfolgt mit dem Pfeiltasten: Die pfeile nach rechts bzw. links bewegen den Tetromino nach rechts bzw. links. Der Pfeil nach oben dreht einen Tetromino um 90 Grad gegen den Uhrzeigersinn. Der Pfeil nach unten setzt den Tetromino auf den Boden der Spielfeldes]

Ich habe den Code so elementar wie möglich gehalten (selbst die Arrays sind eindimensional, obwohl 2-dimensionale Arrays "bequemer" gewesen wären), sodass das Programm in andere Sprachen "übersetzbar" ist. Angepasst werden müssen nur die Funktionen zur Eingabe und Ausgabe: diese sind wie immer Abhängig von Programmiersprache, Betriebssystem und Hardware. Hier gibt es die üblichen Unterschiede: Wird die Eingabe/Ausgabe über Hardware geregelt? Wird das Eingabe- bzw. das Ausgabegerät direkt vom Programm angesteuert oder über das Betriebssystem? Auch die Eingabe muss der Leser dieses Codes mit seiner Programmierumgebung ausmachen: Wird für eine Eingabe eine Art Interrupt ausgelöst, die dem Programm signalisiert, dass eine Taste gedrückt wurde? Oder muss das Programm in regelmäßigen Abständen einen Eingabepuffer auf neue Daten prüfen?

Als sehr spezielles Beispiel hier einmal Tetris auf einer dreifarbigen LED-Matrix. Die Eingabe erfolgt über ein Smartphone, welches Daten per Bluetooth-Antenne an einen ATmega644PA (diesen Chip habe ich ausgewählt, weil er mit seinen 32 programmierbaren I/O-Pins ein unkompliziertes Ansteuern der angeschlossenen Hardware ermöglicht) überträgt. Der Code für dieses Projekt folgt, sobald er aufbereitet wurde. ;-)