Zum Inhalt springen

Blitz2D: Einfache Textfunktionen

Aus Wikibooks

Navigation: BlitzBasic >>> Blitz2D >>> Funktionen >>> Grundwissen

Wichtig:

[Bearbeiten]

Weil die einfachen Textfunktionen in den 3 Versionen von Blitzbasic unterschiedlich funktionieren, sollten sie nur zur Fehlersuche verwendet werden, oder um sich in einem kleinen Hilfsprogramm über die Wirkung von Funktionen oder Anweisungen klar zu werden. Niemals sollten einfache Textfunktionen in eigenen Programmen (außer für Fehlersuche) verwendet werden. In diesem Buch werden jedoch diese Funktionen zunächst für einfache Beispiele verwendet, da ihre Handhabung ohne weitergehendes Wissen leichter ist.

Funktionen:

[Bearbeiten]

In Blitz3D wird bei jedem Programmstart ein 300x400-2D-Startfenster erzeugt, dass man normalerweise als Einstellungsfenster für 3D-Optionen verwendet. In dieses Fenster erfolgen die Ausgaben der einfachen Textfunktionen. Da bei Blitzplus keine 3D-Funktionen verfügbar sind, gibt es auch kein Startfenster und die Ausgabe erfolgt statt dessen in ein Dos-Fenster.

Syntax: Print [{Text}]]
Mit Print schreibt man den angegebenen Text ab der aktuellen Textposition. Es wird jedoch maximal ein Text erwartet, die Angabe weiterer Texte oder Textvariablen führt zu einer Fehlermeldung. Danach wird immer ein Zeilenvorschub gemacht, so dass die nächste Ausgabe am linken Rand der folgenden Zeile erfolgt. Die eckigen Klammern um {Text} bedeuten, dass ein Text nicht unbedingt angegeben werden muss, also optional ist. Wenn der Text weggelassen wird, wird mit Print nur ein Zeilenvorschub erzeugt.

Syntax: Write {Text}
Mit Write schreibt man den angegebenen Text ab der aktuellen Textposition. Danach wird aber kein Zeilenvorschub gemacht, so dass die nächste Ausgabe dort beginnt, wo Write aufgehört hat. Da {Text} bei Write nicht in eckigen Klammern ist, muß ein Text angegeben werden, denn Write ohne Ausgabetext hätte keinerlei Wirkung.

Syntax: [{Rückgabe=}]Input[(][{Text}][)]
Mit Input schreibt man den angegebenen Text ab der aktuellen Textposition und wartet dann auf eine Benutzereingabe, was durch ein blinkendes Rechteck angezeigt wird. Die Eingabe wird durch die Enter-Taste beendet und alle bis dahin eingegebenen druckenden Zeichen werden in die Rückgabevariable übergeben.

  • Wenn die Input-Funktion als Anweisung verwendet wird (also keine Rückgabe gespeichert wird), können die runden Klammern weggelassen werden. Dadurch wartet das Programm nur auf die Enter-Taste. Eingegebene Zeichen werden zwar angezeigt, werden aber nicht gespeichert.
  • Wenn die Rückgabevariable keine Stringvariable ist, wird die Eingabe entsprechend dem Rückgabedatentyp konvertiert.
  • Funktionen oder Berechnungen in der Eingabe werden nicht ausgewertet.

Beispiele

[Bearbeiten]
;hier wird die Eingabe einer Integerzahl (Ganzzahl) erwartet,
;trotzdem kann man jeden beliebigen Text eingeben. In die
;Variable a% werden aber nur von links beginnend die Ziffern
;übernommen, sowie ein Vorzeichen. 
a%=Input("Zahl: ")
Print a ;nachdem der Datentyp festgelegt ist, braucht er nicht mehr angegeben werden
Input
End

Eine Eingabe von -3.7 übergibt also nur -3 in die Variable a%

Syntax: Locate {X},{Y}
Mit Locate wird die aktuelle Textposition für die nächste Ausgabe mit Print, Write oder Input festgelegt. Dabei gibt X die Position relativ zum linken Rand und Y die Position relativ zum oberen Rand an.

Hinweis: Bei BlitzPlus gibt es keine Locate-Funktion.

Programmbeispiele

[Bearbeiten]

Mit diesen ersten Funktionen lassen sich schon einige kleine Programme schreiben, wie das "Hello-World-Programm", das in fast jeder Programmiersprache am Anfang gezeigt wird.

Hello World

[Bearbeiten]
Print "Hello World"

Wenn man dieses Programm so startet (mit F5), sieht man eigentlich nichts, da das Programm sofort nach der Ausgabe beendet wird und die Ausgabe so schnell wieder verschwindet, dass wir sie gar nicht sehen können. Um das zu verhindern, können wir das Programm mit Input dazu bringen, so lange zu warten, bis die Enter-Taste gedrückt wird.

Print "Hello World"
Locate 140,130
Input "(Enter) drücken"

Dieses Programm gibt zunächst "Hello World" oben-links aus, verschiebt dann mit Locate die Textposition so, dass "(Enter) drücken" etwa mittig im Startfenster ausgegeben wird. Da für Input keine Rückgabevariable angegeben wird, kann man zwar Text anstelle von Enter eingeben, der auch angezeigt wird, aber nach drücken von Enter ignoriert wird.

Input-Eingabe verwenden

[Bearbeiten]
Name$=Input ("Gib deinen Namen ein")
Print "Hallo "+Name$
Input "(Enter) drücken"

Zunächst einmal wird in diesem Programm "Input" einmal als Funktion (in der ersten Zeile) mit Rückgabewert und Text in Klammern, und einmal als Anweisung (in der dritten Zeile) ohne Rückgabewert und Text ohne Klammern verwendet.

Außerdem werden scheinbar an Print zwei Texte ("Hallo " und Name$) übergeben, obwohl oben erklärt wurde, dass Print maximal einen Text erwartet. Tatsächlich werden aber die beiden Texte durch das Pluszeichen(+) zu einem Text erst zusammen gefasst und danach als ein Text an Print übergeben. Dieses Zusammenfassen von Texten und/oder Textvariablen kann man auch schon vor der Ausgabe machen:

Name$=Input ("Gib deinen Namen ein")
Name$="Hallo "+Name$
Print Name$
Input "(Enter) drücken"

Mathematisch betrachtet scheint die zweite Zeile falsch zu sein, da an den beiden Seiten der Gleichung unterschiedliche Werte stehen. Bei der Programmierung bedeutet dies jedoch, dass der Variablen links vom Gleichheitszeichen die Berechnung rechts vom Gleichheitszeichen zugewiesen wird. Durch diese Zeile wird also das Wort "Hallo " vor den Namen in der Textvariablen gespeichert und ist nach der Zeile ein Teil der Variablen Name$. Auf diese Art kann man auch mehrere verschiedene Texte, Textvariablen und Funktionen, die Texte zurück geben zu einer Textvariablen zusammenfassen. Es ist also auch möglich, die Rückgabe der Input-Funktion in der ersten Zeile gleich mit in die Zusammenfassung hineinzubringen:

Name$="Hallo "+Input ("Gib deinen Namen ein: ")
Print Name$
Input "(Enter) drücken"

Selber probieren

[Bearbeiten]

Programmieren erlernt man nicht dadurch, dass man Programme von anderen Programmierern abtippt, sondern vor allem dadurch, dass man selber möglichst oft das anwendet, was man gelernt hat. Damit können wir hier schon anfangen, indem wir nur die letzten beiden Zeilen so lassen und davor selber Texte mit Input abfragen und mit Print oder Write ausgeben und mit Locate die Ausgabeposition bestimmen.

Häufige Anfängerfehler:

[Bearbeiten]
  • Wenn Print mit einer Zeichenkette nur eine 0 ausgibt, wurde das Dollarzeichen($) hinter dem Variablennamen vergessen. Dadurch wird die Variable nicht als String (Text) sondern als Integer (Ganzzahl) definiert und durch die automatische Konvertierung wird der Text zur Zahl konvertiert. Wenn der Text jedoch nicht mit einer Ziffer beginnt, erhält die Integervariable den Wert 0, aber es wird keine Fehlermeldung ausgegeben.
  • Die Fehlermeldung "Variable type mismatch" erhält man, wenn eine Variable zweimal mit unterschiedlichem Datentyp verwendet wird. Dies tritt beispielsweise auf, wenn man bei der ersten Verwendung einer Stringvariablen das Dollarzeichen vergisst und dadurch die Variable als Integer definiert wird. Wenn man dann bei der zweiten Verwendung der Variablen das Dollarzeichen dahinter stehen hat, wird eine Integervariable als String angesprochen, was dann zu der Fehlermeldung führt.
  • Wenn beim Zusammenfügen einer Zeichenkette aus Texten und Stringvariablen nicht das gewünschte Ergebnis erzielt wird, liegt das oft daran, dass eine Zeichenkette nicht in Hochkomma(") eingeschlossen ist. Dadurch wird der Inhalt der Zeichenkette als Variablenname interpretiert.
  • Das Startfenster von Blitz3D hat ein Format von 400x300 Punkten. Wenn man mit Locate die Ausgabeposition auf höhere Werte setzt, erscheint der nächste auszugebende Text außerhalb des sichtbaren Bereichs.