Hallo,
In dieser Aufgabe geht es um Tetrominos. Tetrominos bestehen aus vier quadratischen Blöcken, die nicht gedreht werden können.
Das Tetromino der Sorte 0 ist ein senkrechter Balken.
Das Tetromino der Sorte 1 ist ein quadratischer 2x2 Block
Das Tetromino der Sorte 2 hat die Form des umgedrehten Buchstaben T.
......
Diese Tetrominos sollen nacheinander auf einem Spielfeld mit einer Breite von 10 Kästchen und unbegrenzter Höhe platziert werden. d.h. (x, y) ∈ {0, . . . , 9} × {0, . . . }
Die Eingabe erfolgt über eine Text-Datei mit zwei Spalten und jeweils einer Zeile pro Tetromino. In jeder Zeile steht zuerst die Tetromino-Sorte (0-4), dann folgt ein Leerzeichen, die x-Position (0-9) und schließlich ein Zeilenumbruch (\n).
beispiel:
4 5
0 0
3 4
2 7
Die Ausgabe des Spielfelds erfolgt ebenfalls über eine Text-Datei. Hierbei soll für jede Koordinate des Spielfelds ausgegeben werden, welche Sorte von Tetromino sich dort befindet, oder ein Leerzeichen, wenn dort nichts ist.
Meine Lösung:
ich habe erstmal zwei structs definiert. einmal Tetris mit Nummer, x un y. Und einmal das Spielfeld mit Zeilen,
Spalten, und eine Liste von Tetriminos.
ich habe dann ein paar Funktionen implementiert, wie
C:
spielfeld* feld_einlesen(FILE *in){
spielfeld *sf = malloc(sizeof(spielfeld));
sf->tetr = malloc(sizeof(tetris));
int nummer, x;
while (fscanf(in, "%d %d", &nummer, &x)!= EOF){
tetris_einlesen(nummer, x);
}
return sf;
}
tetris* tetris_einlesen(int nummer, int x){
tetris *t = malloc (sizeof(tetris));
t->nummer = nummer;
t->x = x;
int y = y_berechnen(nummer, x);
t->y = y;
einfuegen(t,nummer, x, y);
return t;
}
int y_berechnen (int nummer, int x){
int boolean = ist_frei();
return 0;
}
int ist_frei(void){
return 0;
}
tetris * einfuegen(tetris *start, int nummer, int x, int y){
if(start == NULL){
start = malloc(sizeof(tetris));
start->nummer = nummer;
start->x = x;
start->y = y;
start->next = NULL;
return start;
}
tetris *neu = malloc(sizeof(tetris));
neu->nummer = nummer;
neu->x = x;
neu->y = y;
neu->next = start;
start = neu;
return start;
}
void print_feld(spielfeld *sf, FILE *out){
int j, k;
for(j = 0; j < sf->zeilen; j++){
for(k = 0; k < sf->spalten; k++){
fprintf(out,"%i\n",sf->tetr[j].nummer);
}
printf("\n");
}
}
Deutliches Beispiel...
Eingabe:
1 0
2 1
3 2
1 3
1 8
Ausgabe: sehe den Anhang..
Ein- und Ausgabe findet ihr im Anhang.
ich hoffe, ich könnte euch einen besseren Überblick über die Aufgabe liefern. Freue mich auf jede Hilfe.
Liebe Grüße