Wie kann ich die position und form jedes bausteins in einer text datei oder -was weis ich- abspeichern?
Mehrere Möglichkeiten. Es gibt eine langsame simple, und eine komplexere aber dafür schnelle Variante.
Die simple sieht so aus das du einfach alle Zahlen (ich nehme einfach mal an das jeder Block durch eine Zahl repräsentiert werden kann) nimmst und in Strings umwandelst und dann in ne Textdatei schreibst. Laden ist dann genau andersrum.
Das is lame, suckt und deswegen geh ich nicht weiter darauf ein.
Edit: Außerdem haben die über mir schon erklärt warum die Methode scheiße ist, sogar mit Codebeispielen.
Mehr Komplex ist das ganze als binär zu speichern, sprich, du wandelst deine Zahlen nicht mehr in Strings um sondern schreibst direkt alle bytes der Zahlen in die Textdatei. Das produziert deutlich kleinere Dateien, und ist viel viel schneller zu lesen da halt keine Umwandlung stattfindet.
Als erstes musst du stdio.h includen (mit den eckigen Klammern). Dann baust du dir sowas:
var levelSizeWidth, levelSizeHeight; // Breite und Höhe des Levels
void writeToFile(STRING *name)
{
FILE *file = fopen(_chr(name), "wb"); // Öffne die Datei zum schreiben
// Als erstes wird die Ausdehnung des Levels gespeichert:
fwrite(&levelSizeWidth, 4, 1, file); // Schreibe den Wert von levelSizeWidth in die Datei
fwrite(&levelSizeHeight, 4, 1, file);
// Und jetzt jedes einzelne Blöcklein
var x, y;
for(x=0; x<levelSizeWidth; x++)
{
for(y=0; y<levelSizeWidth; y++)
{
fwrite(&block[x][y], 4, 1, file);
}
}
fclose(file); // Die Datei wieder freigeben
}
Und fertig. Lesen geht dann ähnlich:
var levelSizeWidth, levelSizeHeight; // Breite und Höhe des Levels
void readFromFile(STRING *name)
{
FILE *file = fopen(_chr(name), "rb"); // Öffne die Datei, diesmal zum lesen
// Jetzt holen wir uns erstmal die Ausdehnung wieder:
fread(&levelSizeWidth, 4, 1, file); // Dann wolln wir doch mal lesen...
fread(&levelSizeHeight, 4, 1, file);
// Und jetzt können wir locker flockig jeden Block auslesen
var x, y;
for(x=0; x<levelSizeWidth; x++)
{
for(y=0; y<levelSizeWidth; y++)
{
fread(&block[x][y], 4, 1, file);
}
}
fclose(file); // Die Datei wieder freigeben
}
Das Dateiformat sieht dann so aus das zuerst die Ausdehnung des Levels gespeichert wird und danach der Wert jedes Blocks, dh. man muss nicht extra schreiben in welcher Zeile und Spalte der Block ist sondern kann ganz locker anfangen zu lesen und zu schreiben wenn die Ausdehnung bekannt ist.