Falls sich tatsächlich noch wer dafür interessiert:Willkommen zur dritten Lektion der Programmierschule!
Diese Lektion ist diesmal ein wenig klein gehalten, es gibt aber auch nicht viel über dieses Thema zu sagen.
Inhalt1. Einführung Strings
2. Texte
3. Fonts
4. Textformatierung
5. Hausaufgaben Lektion 3
1. Einführung StringsDas ist ein String, aber nicht ein solcher wie wir ihn zum Programmieren verwenden können.
Strings sind wie Variablen auch eine Art Platzhalter für Daten.
Nur speichern Strings nicht wie bei Variablen Zahlenwerte, sondern eine ganze Zeichenfolge,
so können wir nicht nur Zahlen sondern ganze Texte anzeigen.
Es gibt grob gesagt zwei Arten, einen String auf dem Bildschirm anzuzeigen, mit einem Panel (besprechen wir später)
und/oder mit einem Text. Aber dazu müssen wir ihn natürlich zuallererst definieren:
Code:
STRING* my_str = "Hello world";
Wir definieren hiermit einen String mit dem Namen "my_str" und dem Inhalt "Hello world".
Wir können auch einen leeren String definieren und ihn dann später im Script füllen:
Code:
STRING* my_str = "";
Ein direkter Text muss immer zwischen zwei " stehen, sonst gibt der Compiler eine Fehlermeldung.
Nun hilft uns ein definierter String aber nicht viel weiter. Wir können ihn ja noch gar nicht sehen.
Das ändern wir jetzt.
2. TexteEin Text in A7 ist ein Objekt, welches mehrere Strings enthält und auf dem Bildschirm angezeigt werden kann.
Ein Text definiert sich folgendermassen:
Code:
TEXT* my_txt = {}
Wir definieren einen Text mit dem Namen my_txt ohne Inhalt.
Bauen wir dies nun in einen Script ein. Startet ein neues Projekt und speichert es
im Workordner in einem Ordner namens "lektion_3" (ihr müsst ihn natürlich zuerst erstellen) unter dem Namen "lektion_3.c" ab.
Nun kopiert folgenden Code als Grundgerüst in euren Script:
Code:
#include <acknex.h>
#include <default.c>
TEXT* my_txt =
{pos_x=100;
pos_y=100;
string="Hello world!";
string="We'll learn to use strings!";
flags=VISIBLE;
layer=2;}
function main()
{
video_set(800,800,0,2);
video_window(NULL,vector(800,800,0),1,"Lektion 3");
}
Wie ihr seht haben wir hier eine gefüllte TEXT-Definition.
Die Parameter darin werde ich euch in einer Tabelle erläutern:
pos_x: Horizontaler Abstand des Objektes vom linken Fensterrand in Pixel.
pos_y: Vertikaler Abstand des Objektes vom oberen Fensterrand in Pixel.
string: Hier definieren wir direkt ein String vom Text, d.h. wir müssen keinen mehr ausserhalb definieren.
Werden mehrere Strings auf diese Weise definiert, werden diese dann einfach untereinander angezeigt.
flags: Sozusagen die Verhaltensweise eines Objekts. VISIBLE bedeutet z.B. "sichtbar", währe dieser Flag nicht gesetzt wäre der Text unsichtbar.
Was es sonst noch an Flags gibt könnt ihr in der Hilfe nachschlagen, unter "Inhalt/Engine-Objekte/TEXT". Anstatt VISIBLE ist SHOW gebräuchlicher,
ich verwende es nur noch aus Gewohnheit...
layer: Wichtigkeit eines 2D-Objekts, damit kann man festlegen, welches 2D-Objekt, wenn sich zwei überlappen, in den Vordergrund stellen soll.
Allgemein gilt: Das Objekt mit dem höheren Layer-Wert überlappt Objekte mit niedrigerem layer Wert. Ist der Layer beider Objekte gleich,
entscheidet die Position vom Objekt-namen im Alphabet.
Tipp: Wenn ihr ein 2D-Objekt erstellt und dies wird komischerweise nicht angezeigt, überprüft zuerst,
ob VISIBLE oder SHOW gesetzt ist oder ob das Objekt nicht von einem anderen verdeckt wird.Startet nun den Script und ihr seht: Die beiden Strings von der TEXT-Definition werden mit 100 Pixel Abstand vom oberen und unteren Rand angezeigt.
Das Ganze ist aber irgentwie noch ziemlich hässlich, doch acu dafür gibts ne relativ einfache Lösung.
3. FontsFonts gibt es in jedem Programm, welches Text anzeigen kann. Es ist sozusagen die "Schriftart" vom Computer.
Wir können mit viel Zeitaufwand selber eine erstellen, oder aber wir nehmen einen vorgefertigten Font von Windows.
Zweiteres werde ich euch beibringen, Ersteres steht ebenfalls in der Hilfe unter "Engine-Objekte/FONT".
Um einen Font zu verwenden müssen wir ihn in unserem Script definieren: (Wer hätts gedacht)
Code:
FONT* my_font = "Times#20i";
Schreibt diese Definition über unsere TEXT-Definition und fügt folgende Zeile in der TEXT-Definition ein:
Code:
font=my_font;
Wir haben nun einen Font für unseren Text definiert, er enthält die Schriftart "Times" in der Pixelhöhe 20 und kursiv.
Startet nun den Script, wenn ihr alles richtig gemacht hat, sollten die beiden Sätze nun eine andere Schriftart bekommen haben.
Ok, es sieht immer noch scheisse aus, ABER es funtioniert!
4. TextformatierungSo ein String ist ja schön und gut, aber wir wollen ihn auch mit unserem Script verändern können!
Zum Glück gibt es da ein paar nützliche Funktiönchen, die genau das tun.
Das Schwierige an Strings ist eben, dass man sie nicht mit den Mathematischen Operatoren Vergleichen oder verändern kann.
Desshalb müssen wir auch alle Strings mit Funktionen verändern und vergleichen.
Nun wollen wir das "Hello world!" zu "Hello Kitty!" umwandeln!
Zuerst müssen wir aber noch einen String definieren, mit dem wir arbeiten können:
Code:
STRING* my_str = "Kitty!";
Er enthält auch das "Kitty!" welches wir an unser "Hello world!" anhängen wollen.
Da wir nun aber wieder mit Befehlen arbeiten müssen wir die Transformation in der Main-Funktion durchführen.
Die Befehle, die wir brauchen, lauten str_cat und str_trunc.
Gebt diese Befehle mal in der Suche von der Hilfe ein, dort wird erklärt, was diese beiden Befehle machen.
Ich werfe euch den Code einfach mal vor, aber keine angst, ich erläutere ihn gleich: ^^
Code:
#include <acknex.h>
#include <default.c>
FONT* my_font = "Times#20i";
STRING* my_str = "Kitty!";
TEXT* my_txt =
{pos_x=100;
pos_y=100;
string="Hello world!";
string="We'll learn to use strings!";
flags=VISIBLE;
font=my_font;
layer=2;}
function main()
{
video_set(800,800,0,2);
video_window(NULL,vector(800,800,0),1,"Lektion 3");
str_trunc((my_txt.pstring)[0],6);
str_cat((my_txt.pstring)[0],my_str);
}
Und hier die versprochene Erklärung:
Code:
str_trunc((my_txt.pstring)[0],6);
Dieser Befehl hier trennt 6 Zeichen vom Ende des Zielstrings ab.
Nun fragt ihr euch bestimmt, was das für ein Geschwür ist, wo eigentlich ein String hinsollte.
Es ist aber einfacher als es aussieht:
Da es sich bei einem Text um ein Objekt mit mehreren gespeicherten Strings handelt, müssen wir auch entsprechen darauf zugreifen.
"(my_txt.pstring)" ist hierbei also das Objekt, welche alle Strings von "my_txt" enthält,
und mit dem Index "[0]" verweisen wir auf einen bestimmten String davon.
0 steht hier für den ersten String in unserem Text, eben das "Hello world!", welches wir modifizieren wollen.
Mit (my_txt.pstring)[1] würden wir auf den zweiten String zugreifen, also "We'll learn to use strings!".
Das heisst, der Index startet man beim Zählen nicht bei 1, sondern bei 0. Wenn wir später mal Arrays behandeln, werden wir wieder darauf zurückkommen.
Jedenfalls haben wir nun das "World!" vom String abgetrennt.
Code:
str_cat((my_txt.pstring)[0],my_str);
Dieser Befehl hängt dem Zielstring den Quell-string an. Das heisst in diesem Fall wird my_str, also "Kitty!", an den ersten String unseres Textes, also "Hello " angefügt.
Das wars auch schon.
Startet den Script und voilá, "World" wurde durch "Kitty" ersetzt.
Es gibt aber natürlich noch viele andere Funktionen zum Modifizieren und zum Vergleichen von Strings, ihr findet alle in der Hilfe unter: "Inhalt/Engine-Funktionen/String-Funktionen"
Experimentiert umbedingt ein wenig damit rum und stellt allfällige Fragen, damit ihr auch wirklich alles verstanden habt.
so, dann wären wir schon wieder am Ende dieser Lektion, ich hoffe ihr hattet wenigstens ein bisschen Spass. ^^
Hausaufgaben Lektion 3Zitat:
Experimentiert mit mindestens einer String-Funktion herum, die wir noch nicht behandelt haben.
Nehmt ruhig als Grundgerüst unseren jetzigen Code, gestaltet ihn um wie ihr wollt.
Schickt mir dann am Schluss euren verarbeiteten Script per PM.
Da sowieso so gut wie niemand diese Hausaufgabe machen wird, *seufz* lass ich den Abgabetermin mal weg.
An die, die sich trotzdem mal dran versuchen: Vielen Dank und viel Spass.