AES |
Deflate |
GIF |
X-Face |
Games
Download der Klasse inkl. Beispiele.
Die Tetromino-klasse enthält forgende public-Variablen:
bool gameOver;
sowie Funktionszeiger:
void (*block_dropped)(int, Tetromino*, void*);
void (*line_erased)(Tetromino*, void*);
und einen benutzerdefinierten Parameter:
void *user_param;
- Wann immer eine Zeile auf dem Spielfeld vollständig gelöscht wird, wird die line_erased-Funktion mit dem benutzerdefinierten Parameter aufgerufen.
- Wann immer ein Block auf einer anderen Struktur aufsetzt, wird die Funktion block_dropped aufgerufen, der int-Parameter enthält die ID des Blocks, der nicht nun nicht mehr in den Bewegungsablauf mit den step-Funktionen (siehe unten) angesteuert werden kann.
- gameOver ist eine Variable, die genutzt werden sollte aber nicht muss. Um ein höchstmaß an Flexibilität zu gewährleisten, funktionieren alle Methoden unabhängig von dieser Variablen.
- user_param, block_dropped und line_erased müssen nicht zwingend verwendet werden und können im Laufe des Programms beliebig verändert werden.
Methoden:
Im Folgenden ist gelegentlich von einer Id in Gestalt eines int-Wertes die Rede. Hier handelt es sich um eine Zahl, die genutzt werden kann um bwegliche Tetromino-Blöcke auf dem Spielfeld zu bewegen. Diese Id ist nicht zwingend für ein Element konstant, da die beweglichen Elemente fortlaufend nummeriert bleiben. Es gilt: seinen m, n zwei Ids mit m < n, so wurde m zeitlich vor n im Spielgeld eingefügt. Hat ein Block den Boden erreicht und wurde somit durch die Spiellogik unbeweglich, verschwindet der block aus der Liste steuerbarer Elemente. Siehe dazu auch elts().
Tetromino(int width, int height);
Tetromino();
Die Konstruktoren erzeugen ein Spielfeld der Dimension width * height. Sollten keine Werte angegeben werden, wird das traditionelle Feld von 10 * 20 erzeugt.
int newElt();
int newElt(char t, int x, int y);
newElt erstellt ein Element auf dem Spielfeld. t kann die Werte i, j, l, o, s, t oder z annehmen (andere Werte verursachen undefiniertes Verhalten). x und y sin die Koordinaten, an denen da Element auf das Spielfeld eingesetzt wird.
Wird newElt ohne Parameter aufgerufen, wird eim Zufälliges Element eingefügt (an der oberen Kante des Spielfelds, horizontal mittig).
Der Rückgabewert ist die Id des Elements. Diese kann verwendet werden, um später das Element zu steuern. Ist der Rückgabewert -1, konnte das Element nicht erzeugt werden.
void getDims(int *width, int *height);
Liefert die Höhe und Breite des Feldes. Die Parameter müssen auf gültige Speicherbereiche zeigen.
char getPos(int x, int y);
Liefert den Inhalt der Spielfeld-Koordinate. Diese kann entweder leer sein (Rückgabewerte ' ') oder ein Tetromino-Element enthalten (mögliche Werte: ijlostz)
int fieldOwnerId(int x, int y);
Liefert Information darüber, welches Element gerade das Feld belegt. Gibt die Funktion eine nicht-negative Zahl zurück, ist der Rückgabewert die Id des Tetromino-Elements, das gerade das Feld belegt. Ist die Rückgabe -1, so ist das Feld entweder leer oder es wird von einem Element belegt, das nach der Spiellogik nicht mehr bewegt werden kann. In diesem Fall liefert getPos() weitere Informationen.
bool moveAndTest(int idx, int x, int y);
Verschiebt das Element mit der Id 'idx' an die Koordinaten x, y. Sollte idx keine gültige Id sein oder die Koordinaten außerhalb des Feldes liegen, ist der Rückgabewert false. Bei einer erfolgreichen änderung der Koordinaten ist der Rückgabewert true. Wenn sich die neue Position des Elements mit einem belegten Feld überlappen würde, wird die alte Position beibehalten und false zurückgegeben.
bool stepDown(int idx);
bool stepLeft(int idx);
bool stepRight(int idx);
benutzt moveAndTest() um das Element mit der angegebenen Id an um einen Schritt in die jeweilige Richtung zu bewegen. Nutzt die Funktion moveAndTest() und gibt ihren Rückgabewert zurück.
bool fallDown(int idx);
Führt stepDown() aus, bis die Funktion einen festen Boden erreicht hat.
bool flip(int idx);
Dreht das Element im Uhrzeigesinn. Wenn die Drehung dazu führt, dass das Element außerhalb des Spielfelds ragt oder eine feste Struktur überlappt, wird die Bewegung nicht ausgeführt und false zurückgegeben. Ist idx eine nicht existierende Id, ist der Rückgabewert false. Wurde flip() erfolgreich ausgeführt, ist die Rückgabe true.
Eine Drehung gegen den Uhrzeigesinn ist ebenfalls möglich, eine Zeile dafür habe ich auskommentiert im Programmcode der Klasse in tetromino.cpp hinterlegt.
int eraseLines();
Löscht alle Zeilen, die voll besetzt sind (also keine Lücken mehr aufweisen)
int elts();
Liefert die Anzahl der Elemente, die gerder auf dem Spielfeld beweglich sind. ist der Rückgabewert n, so sind die gültigen Ids 0, 1, ..., n - 1
Impressum