Spezifikation des Projekts (Tetris)
Es gab im Laufe der Jahrzehnte viele Versionen von Tetris mit subtilen Unterschieden in der Spielmechanik. Sie sollen im Wesentlichen die Version für das Nintendo Entertainment System (NES) von 1989 nachimplementieren, siehe https://tetris.wiki/Tetris_(NES,_Nintendo). Von einigen sehr speziellen Besonderheiten weichen wir dabei ab, um die Implementierung nicht unnötig zu verkomplizieren.
Detaillierte Anforderungen für volle Punktzahl
1. Es gibt sieben verschiedene Tetrominos, ein I-förmiges (genannt: I), zwei L-förmige (genannt: L und J), zwei Z-förmige (genannt: Z und S), ein quadratisches (genannt: O) und ein T-förmiges (genannt: T). Jedes davon besteht aus genau vier Quadraten.
2. Das Spielfeld (der Teil, in dem die Tetrominos fallen) hat 10 Spalten und 20 Zeilen. Jedes Tetromino startet so, dass sich das oberste Quadrat des Tetrominos in der obersten Zeile befindet. Die Startrotation ist immer gleich und im Nintendo Rotation System beschrieben. Über der obersten Zeile gibt es zwei zusätzliche Zeilen für den Fall, dass ein Tetromino gleich beim Start roriert wird und über die oberste Zeile hinausragt. Im Originalspiel wir der herausragende Teil nicht gezeichnet. Sie können es in Ihrem Programm auch so machen, oder einfach zeichnen.
3. Jedes neue Tetromino wird zufällig aus der Menge der sieben möglichen Tetrominos gewählt. Ist das Tetromino dabei das gleiche wie bei der vorherigen Wahl, wird noch einmal zufällig gewählt. Ist es dann wieder das gleiche, ist das halt so und es wird ausgewählt. Die Wahrscheinlichkeit, zweimal hintereinander das gleiche Tetromino zu bekommen ist also 1/49.
4. Ein Tetromino fällt mit einer bestimmten Geschwindigkeit, die vom Level abhängt (zu den Levels, siehe Punkt X). Mit der Pfeiltaste nach unten bewegt man das Tetromino unabhänig von der Geschwindigkeit eine Zeile weiter nach unten. Ein Tetromino fällt solange, bis es die tiefstmögliche Zeile erreicht (entweder die allerunterste Zeile oder die unterste Zeile, in der es nicht mit einem der bereits liegenden Tetrominos kollidiert). Wenn es diese Zeile erreicht, gilt es noch solange als fallend, bis es es gemäß seiner Fallgeschwindigkeit in die nächste Zeile fallen würde (wenn es ginge).
5. Solange ein Tetromino noch fällt, kann es nach links (mit der Pfeiltaste nach links) oder nach rechts (mit der Pfeiltaste nach rechts) verschoben werden. Voraussetzung ist, dass sich das Tetromino in der neuen Position weder mit dem Rand noch mit den schon liegenden Tetrominos überschneidet.
6. Solange ein Tetromino noch fällt, kann es außerdem nach links (mit Taste 'a') oder nach rechts (mit Taste 's') rotiert werden. Voraussetzung ist, dass sich das Tetromino in der neuen Position weder mit dem Rand noch mit den schon liegenden Tetrominos überschneidet. Wie genau jedes Tetromino von seiner bisherigen in die neue Position rotiert wird, ist im Nintendo Rotation System beschrieben. Sie sollen die right-handed Version implementieren (obere Tabelle). Für alle Tetrominos, die eine mittlere Zelle haben, ist das eine natürliche Rotation um 90 Grad, für das I-Tetromino beachten Sie bitte die Spezifikation genau.
7. Sobald eine Zeiles des Spielfeldes ganze mit Quadraten von Tetrominos gefüllt ist, wird sie gelöscht. Alle Quadrate von bereits liegenden Tetrominos darüber fallen dann um eins herunter. Es kann vorkommen, dass nach dem Untenankommen eines Tetrominos bis zu vier Zeilen auf einmal gefüllt sind und gelöscht werden.
8. Rechts vom Spielfeld wird, zusammen mit dem Schriftzug "Next", das Tetromino anzeigt, das als nächstes ausgewählt werden wird.
9. Es gibt verschiedene Level. Der erste Level ist Level 0. Sobald zehn Zeilen oder mehr gelöscht sind, kommt man von Level i zu Level i+1. Falls mehr als zehn Zeilen gelöscht wurden, zählen die überschüssigen Zeilen schon für den nächsten Level. Die Level unterscheiden sich ausschließlich durch die Geschwindigkeit, mit der die Tetrominos fallen. Die Geschwindigkeiten sind in der ersten Tabelle im Abschnitt "Details" von https://tetris.wiki/Tetris_(NES,_Nintendo) definiert. Ein Frame ist dabei 1/60 Sekunde. Die Geschwindigkeit von 48 Frames per Gridcell für Level 0 entspricht also einer Fallgeschwindigkeit von 60/48 = 1.25 Zeilen pro Sekunde. Ab Level 29 sind es 60 Zeilen pro Sekunde, also ziemlich schnell.
10. Es gibt einen Punktestand, der rechts oben neben dem Spielfeld angezeigt wird. Zu Beginn ist der Punktestand 0. Wenn nach dem Fall eines Tetrominos 'k' Zeilen gelöscht werden (für k = 1, 2, 3 oder 4) erhöht sich die Punktzahl auf Level 'i' wie folgt: '40 * (i+1)' für 'k = 1', '100 * (i+1)' für 'k = 2', '300 * (i+1)' für 'k = 3', '1200* (i+1)' für 'k = 4'.
Ideen für optionale Zusatzfeatures
1.