| |||
Dieses Tutorium beschäftigt sich mit dem Zugriff auf Dateien. Befehle die auf Dateien zugreifen sind erforderlich, wenn man in einem Spiel Daten speichern möchte (wie etwa ein Speicherspiel oder die Highscore), aber auch wenn man selber Installationsprogramme oder ähnliches schreiben will. Bei jedem Dateizugriff ist es wichtig zu wissen in welchem Verzeichnis sich die Datei befindet auf die das Programm zugreifen soll. Normalerweise ist es das aktuelle Verzeichnis in dem sich der User befindet, also das Verzeichnis in dem sich das ausgeführte Programm (in diesem Fall unser Spiel) befindet. Es empfiehlt sich schon am Anfang eine klare Verzeichnisstruktur zu definieren. Das Hauptprogramm sollte sich auch in dem Hauptverzeichnis befinden, und dann kann es weitere Unterverzeichnisse geben, wie SAVE für Speicherspiele, DATA für Daten die das Spiel braucht oder GFX für Grafiken. Da man die Unterverzeichnisse häufig anwählen wird sollten die Namen möglichst kurz sein. Wer das befolgt hat kann mit dem lesen und schreiben von Dateien beginnen. Doch zuerst muss man sich für ein Format der Dateien entscheiden. Beginnen werden wird mit der einfacheren Variante. Daten können einfach in Textdatei gespeichert werden. Ein Speicherspiel könnte dann etwa so aussehen: MOTU 3 5 13407 Zuerst der Name, dann die verbleibenden Leben, dann das Level in dem ich mich befinde und zum Schluss die Punktezahl. Um das nun aus der Datei rauszukriegen müssen wir Zeile für Zeile einlesen. Das erledigt das Beispielprogramm: Global Name$, Level, Punkte, Leben Global Datei Datei = ReadFile ("Speicher1.dat") Name$ = ReadLine$(Datei) Leben = ReadLine$(Datei) Level = ReadLine$(Datei) Punkte = ReadLine$(Datei) CloseFile Datei Print "Name " + Name$ Print "Leben " + Leben Print "Level " + Level Print "Punkte " + Punkte Der Befehl OpenFile (Dateiname) öffnet eine Datei zum einlesen von Daten. Die Variable Datei wird verwendet um die Datei anzusprechen (mal wieder ein Handle). Die Funktion ReadLine schließlich liest eine ganze Zeile ASCII-Text ein und gibt ihn an eine Variable. Dabei ist der gelesene Text zwar erst einmal ein String, doch da Blitz Basic Strings die nur aus Zahlen bestehen automatisch in eine Zahl umwandelt wenn diese an eine Zahlenvariable übergegeben werden spielt das keine Rolle. CloseFile schließt die Datei dann wieder. Diesen Befehl muss (!) man durchführen, nachdem man mit einer Datei fertig ist. Möchte man etwas in eine Datei schreiben anstatt aus ihr zu lesen so muss man die Datei erst einmal anders öffnen: Statt ReadFile wird WriteFile zum öffnen verwendet, und statt ReadLine$ der Befehl WriteLine. CloseFile muss aber dennoch am Ende benutzt werden. Möchte man statt wie in dem Beispiel von eben die Daten, die in der Datei gespeichert sind, in sie hineinschreiben anstatt sie aus ihr herauszuholen, so kann man dieses Programm verwenden: Global Name$, Level, Punkte, Leben Global Datei Datei = WriteFile ("Speicher1.dat") WriteLine Datei, Name$ WriteLine Datei, Leben WriteLine Datei, Level WriteLine Datei, Punkte CloseFile Datei Diese Art gespeicherte Information zu verwalten ist zwar die einfachste, jedoch auch die unsicherste. Die gespeicherten Daten sich von dem Benutzer sehr leicht zu manipulieren. Einfach die Datei geöffnet und schon hat man 200 Leben mehr. Wem das nicht so wichtig ist, der kann ReadLine$ natürlich gerne verwenden, doch wer für seine Speicherspiele mehr Sicherheit wünscht muss direkt auf die Daten zugreifen die er gespeichert hat. Eine binäre Datei stellt für die meisten Benutzer schon eine hinreichende Sicherheitsstufe da, weil sie nicht mit Standarttextbetrachtern gelesen werden kann. Es werden die gleichen Befehle für öffnen und schließen der Datei verwendet, allerdings verwenden wir statt WriteLine und ReadLine$: ReadInt, WriteInt, ReadString$ und WriteString. Hier zwei Beispiele. Das erste schreibt die Daten in die Datei und das zweite liest sie wieder aus: Global Name$, Level, Punkte, Leben Global Datei Datei = WriteFile ("Speicher2.dat") WriteString Datei, "MOTU" WriteInt Datei, 3 WriteInt Datei, 5 WriteInt Datei, 12000 CloseFile Datei Und als zweites: Global Name$, Level, Punkte, Leben Global Datei Datei = ReadFile ("Speicher2.dat") Name$ = ReadString$(Datei) Leben = ReadInt(Datei) Level = ReadInt(Datei) Punkte = ReadInt(Datei) CloseFile Datei Print "Name: " + Name$ Print "Leben: " + Leben Print "Level: " + Level Print "Punkte: " + Punkte Wie man sieht ist der Dateizugriff in Blitz Basic sehr einfach. Mit Hilfe der bis zu diesem Punkt gelernten Sachverhalte sollte es durchaus schon möglich sein, ein komplettes 2D Spiel zu programmieren. Zwar fehlen sicher noch einige Befehle, denn die Tutorien können kaum alles beschreiben, doch mit ein bisschen Phantasie und einer großen Portion Willenskraft und Durchhaltevermögen kann es jetzt eigentlich richtig losgehen! Ich wünsche euch viel Glück und viel Spaß beim programmieren mit Blitz Basic! Bei Fragen wendet euch bitte an: mj@blitzbasic.de Quelle: www.BlitzBasic.de |