Benutzer:Mirco1989/BlitzBasic

Aus Wikibooks

Blitzbasic-Einleitung[Bearbeiten]

Blitzbasic oder das, was später als Blitz2D bezeichnet wurde, ist die Grundlage aller Blitz-Versionen. Es ist in jeder Blitzversion enthalten, jedoch nicht überall mit dem gleichen Anweisungssatz und manche Anweisungen haben auch eine unterschiedliche Funktion. Das liegt erst einmal daran, das die einzelnen Versionen eine unterschiedliche Hauptfunktion haben und deshalb nicht jede Anweisung für jede Version sinnvoll ist, andererseits wurden die Versionen zu unterschiedlichen Zeiten weiter entwickelt. In der Referenz wird jedoch jede Anweisung oder Funktion genau beschrieben und auf jeden Unterschied hingewiesen.

Für Anfänger ist das Programm Blitz3D am besten geeignet, weil es einerseits die meisten 2D-Anweisungen hat und andererseits bei einem Fehler am leichtesten zu beenden ist. Jeder Leser sollte jetzt alle Versionen haben und das Programm Blitz3D starten. Wer das Programm noch nicht hat, sollte besser das Buch nochmal von Anfang an lesen.

Jetzt geht es los[Bearbeiten]

Nach dem Start vom Blitz3D wird automatisch der Editor "ide.exe" gestartet. Dieser Editor besteht nur aus einem Menü, einer Iconleiste und einem Arbeitsbereich. Da noch kein Programmcode vorhanden ist, wird die Startseite der internen Hilfe in den Arbeitsbereich geladen. Durch einen Klick auf das erste Icon der Iconleiste, welches ein leeres Blatt darstellt, oder durch anklicken des Menüeintrags "New" im "File"-Menü wird ein neues leeres Programm im Arbeitsbereich angezeigt. Direkt über dem Arbeitsbereich wird ein neuer Tab mit der Aufschrift "<untitled>" angezeigt und man kann jetzt durch Auswahl des entsprechenden Tab zwischen dem Programm und der Hilfe auswählen, was im Arbeitsbereich angezeigt werden soll. Doch bevor es ans Programmieren geht, sollte man noch im Menü "Program" den Eintrag "Debug Enabled?" auswählen, damit bei jedem Programmstart aus dem Editor ein Debug-Fenster erscheint, das bei Problemen hilfreich sein kann.

Die wichtigste Anweisung bei Blitzbasic[Bearbeiten]

Eine Anweisung sollte in keinem Programm fehlen, dabei ist es noch nicht einmal eine Anweisung und hat auch keinerlei Auswirkung auf das fertige Programm. Gemeint ist damit das Semikolon(;), dass bei Bitzbasic den Anfang eines Kommentars anzeigt. Alles was nach dem Semikolon steht wird bei der Kompilierung ignoriert(weggelassen). Doch wer sich nicht rechtzeitig angewöhnt, seine Programme mit Kommentaren zu versehen, kommt niemals über kleine Programme hinaus, weil er bei jedem umfangreicheren Programm den Überblick verliert und eine Fehlersuche dann sehr schwierig und Zeitaufwendig wird. Nur mit einem Semikolon und einem Kommentar kann man das Programm schon mit F5 starten. Aber da keine weiteren Anweisungen da sind, wird das Programm gleich darauf wieder beendet und es wird die Nachricht "Program has endet" ausgegeben. Hier ist jedoch schon der erste Unterschied zu BlitzPlus, bei Blitz3D wird immer ein Startfenster auf Bildschirmmitte erzeugt, bei BlitzPlus jedoch nicht.

Darf es auch noch weniger sein?[Bearbeiten]

Das Semikolon(;) bewirkt nichts, doch obwohl das sich unsinnig anhört, bewirkt die Anweisung End noch weniger. End sorgt nämlich dafür, das die Nachricht "Program has endet" nicht mehr ausgegeben wird. Dadurch kann der Programmierer festlegen, wo sein Programm enden soll. Wird jedoch die Nachricht trotzdem ausgegeben, so wurde das Programm an einer Stelle beendet, die der Programmierer nicht beabsichtigt hat und er sollte nach einem Fehler im Programm suchen.

Warten ist schon mehr als nichts tun[Bearbeiten]

Es gibt in Blitzbasic mehrere Anweisungen, mit denen auf etwas gewartet wird. Da Blitzbasic 3 Möglichkeiten von Benutzereingaben unterscheidet, gibt es auch 3 Anweisungen, die auf die jeweilige Eingabe warten:

  • WaitMouse ;wartet darauf, dass eine beliebige Maustaste gedrückt wird
  • WaitJoy ;wartet darauf, dass eine beliebige Taste bei einem Joystick oder Gamepad gedrückt wird
  • WaitKey ;wartet darauf, dass eine beliebige Taste auf der Tastatur gedrückt wird

Doch eigentlich sind das keine Anweisungen, sondern Funktionen, die als Anweisungen benutzt werden können. Der Unterschied besteht erstens darin, dass bei einer Funktion ein Wert zurück gegeben wird, in diesem Fall die Taste, die gedrückt wurde. Zweitens müssen Parameter hinter dem Funktionsnamen in Klammern gesetzt werden, aber auch wenn keine Parameter übergeben werden, müssen die Klammern hinter dem Funktionsnamen stehen. Bei Anweisungen können Parameter in Klamern gesetzt werden, müssen aber nicht. Darum nochmal das ganze als Funktion mit Detailbeschreibung:

  • Taste=WaitMouse()

Alternativ kann auch MouseWait sowohl als Anweisung, als auch als Funktion verwendet werden. MouseWait ist jedoch keine offizielle Schreibweise und darum in der Hilfe nicht gelistet. daher ist es empfehlenswert, immer WaitMouse zu verwenden. Rückgabe: 1=linke Taste, 2=rechte Taste, 3=mittlere Taste (oder Druck auf das Mausrad)

  • Taste=WaitJoy([Port])

Alternativ kann auch JoyWait sowohl als Anweisung, als auch als Funktion verwendet werden. JoyWait ist jedoch keine offizielle Schreibweise und darum in der Hilfe nicht gelistet. daher ist es empfehlenswert, immer WaitJoy zu verwenden. ACHTUNG: Bei BlitzPlus und BlitzMax gibt es weder JoyWait, noch WaitJoy Der Parameter "Port" kann angegeben werden, muss jedoch nicht. Wenn er angegeben wird bedeutet 0, das nur beim ersten Jostick/Gamepad auf einen Tastendruck gewartet wird Bei Port=1 wird beim zweiten Joystick/Gamepad gewartet usw. Wird Port nicht angegeben, so werden alle angeschlossenen Joysticks/Gamepads überprüft. Rückgabewert: Nr der gedrückten Taste (1 bis maximal 32) Wenn kein Joystick oder Gamepad angeschlossen ist, wird nicht gewartet und 0 zurück gegeben.

  • Taste=WaitKey()

ACHTUNG: Bei Blitz3D gibt es keine Alternative, bei BlitzPlus jedoch ist KeyWait ohne Einschränkungen nutzbar Rückgabe: Der Ascii-Code der Taste (Beschreibung später) HINWEIS: Auf manchen Blitz-Seiten wird behauptet, das Strg, Alt und Shift nicht beachtet werden, das ist Falsch, richtig ist, das nur Strg nicht beachtet wird. Alt und Shift beenden zwar das Warten auf einen Tastendruck nicht, aber Kombinationen der Tasten mit anderen Tasten können erkannt werden. Damit kann man jetzt das Beenden des Programms so lange aufhalten, bis der Benutzer eine gewünschte Aktion tätigt

; Beispiel: Warten auf die Tastatur
WaitKey
End

Unveränderlich[Bearbeiten]

Bei der Funktion WaitJoy hatten wir den Parameter Port, der angibt, bei welchem Joystick/Gamepad auf einen Tastendruck gewartet werden soll. (0 für den 1.Joystick, 1 für den 2.Joystick usw.) Damit man sich nicht merken muss, welche Zahl zu welchem Joystick gehört und besonders, dass die Zahl immer um 1 niedriger ist als der abgefragte Joystick, gibt es die Anweisung Const, mit der man den Zahlen Namen geben kann. Der Name und sein Zahlenwert bleiben dann für das ganze Programm konstant miteinander verbunden und können nicht mehr verändert werden. Beispiel:

Const JoyPort1 =0
Const JoyPort2 =1
Const JoyPort3 =2
Const JoyPort4 =3

Jetzt kann man schreiben:

WaitJoy JoyPort2 ;Warten auf Taste an Joystick 2

Das man an JoyPort2 auf eine Taste von Joystick2 wartet, ist schon wesentlich leichter zu merken Da hier die Funktion WaitJoy wieder als Anweisung genutzt wird, muss "JoyPort2" nicht in Klammern stehen
WICHTIG!Da der Name und sein Wert mit Const fest verbunden werden und nicht mehr geändert werden können, darf der Name für nichts anderes verwendet werden. (man sollte also einen eindeutigen Namen wählen)

Jedem seinen eigenen Namen[Bearbeiten]

Bei Menschen kann es durchaus vorkommen, dass zwei oder mehr verschiedene Menschen den gleichen Namen haben. Das ist in einem Programm anders. Jeder Name muss eindeutig sein. Dabei nicht auf die Gross/klein-Schreibung geachtet. "JoyPort2" ist also der gleiche Name wie "joyport2". Ein in einem Programm einmal vergebener Name hat (fast) überall die gleiche Bedeutung. Auf das "fast" kommen wir später zurück. Außerdem gibt es auch noch Regeln, was als Name akzeptiert(anerkannt) wird:

Ein Name beginnt immer mit einem Buchstaben (klein oder gross), danach können Buchstaben, Ziffern oder der Tiefstrich (_) in beliebiger Reihenfolge stehen, jedoch keine anderen Zeichen. Dabei gibt es eigentlich keine Beschränkung, wie lang ein Name ist.

Sicher wird es irgendwo eine Grenze geben, wie viele Zeichen bei Namen gespeichert werden, jedoch habe habe ich das mit Konstanten getestet, die einen Unterschied erst beim 300.Zeichen (mehr als 2 Fensterbreiten) hatten und es wurde kein Fehler gemeldet. Wer möchte schon bei jeder Verwendung eines Namens so viele Zeichen eingeben. Überall, wo man bei einer Anweisung oder Funktion einen Namen verwenden muss, verwende ich die Form <Name>, die man nicht abtippen soll, sondern einen selber erstellten Namen verwenden muss. Beispiel:

Const <Name> = <Wert>

Haben sie Reserviert?[Bearbeiten]

Blitzbasic verwendet für eigene Anweisungen, Funktionen und Konstanten bestimmte Namen, die als "Schlüsselwörter"(Keywords) bezeichnet werden. Diese Schlüsselwörter sind bei vielen anderen Programmiersprachen reserviert, aber bei Blitzbasic sind nur Schlüsselwörter von Konstanten reserviert, die Namen von Anweisungen und Funktionen können jedoch jedoch für eigene Namen im Programm verwendet werden. Beispiele:

Const Pi=1 ;erzeugt einen Fehler, weil "Pi" als Konstante mit dem Wert 3.14159 voreingestellt ist
Const WaitMouse=5 ;erzeugt keinen Fehler, "WaitMouse" als Funktion definiert(festgelegt) ist.

Ich habe vorher im Absatz "Unveränderlich" geschrieben, das "Const" eine Anweisung ist. Das muss ich jetzt korrigieren, da man "Const" nicht als Namen verwenden kann:

Const ist es keine Anweisung, sondern ein vordefiniertes, reserviertes Schlüsselwort, das die Zuweisung eines konstanten Namens an einen Wert einleitet.

Oft verwenden, aber nur einmal programmieren[Bearbeiten]