Lite-C Programmierung Kapitel 1 – Grundlagen
Teil 2 – Variablen und Strings
Teil 2.1 Variable
Teil 2.2 Strings
Teil 2.3 Pointer
2.1 Variable
Obwohl man mit ihnen nur eines kann, Zahlen speichern sind sie der Wichtigste Bestandteil eines jeden Quellcodes.
Wenn man sich die Spieloberfläche eines beliebigen Spieles ansieht sieht man bestimmt irgendwelche Zahlen oder Balken oder sonstige Anzeigen. All diese sind Variablen, das Level des Charakters, die Munition oder Leben für all diese Werte ist jeweils eine bestimmte Variable im Quellcode deklariert.
Im Quellcode sieht das in etwa dann so aus:
1 ...
2 var leben = 1000;
3 var munition = 300;
4 var ep = 0;
5 var weapon;
6 var pos[3];
7 ...
All diese Werte findet man auch im Spiel wieder.
Hier in dem Beispiel ist es immer der gleiche Datentyp "var". Var steht bei Lite-C einfach nur als Kürzel für Variable.
Man sieht oben das einige Variablen einen Wert zugewissen bekommen haben und andere nicht. Ob man einer Variable bereits bei der Deklaration einen Wert zuweist ist eigentlich egal allerdings wenn man einer Variable keinen Wert zuweist muss sie hinterher durch hineinschreiben einen Wert bekommen!
Bei der Variable "pos" in Zeile 6 wurde was ganz anderes gemacht. Dort wurde ein Wert in eckige Klammern geschrieben. Das ist eine Schreibweise wie man ein sogenannten Array deklariert. Ein Array ist eine Variable die mehrere Werte erhalten kann. Wird z.B. für Koordinaten verwendet.
Dies ist allerdings eine Funktion die erst ab der Extra-Version von 3D Game Studio verfügbar ist. bei der Gratis oder Demo-Version taucht da eine Fehlermeldung beim compilieren auf.
In anderen Programmiersprache gibt es auch noch andere Datentypen wie z.B. Integer ("int") oder Double ("double"). Diese sind wiederrum für verschiedene Zahlentypen zugeordnet. Das bedeutet eine Integer-Variable kann nur Ganzzahlen, Zahlen ohne Komma, speichern und eine Double-Variable kann auch noch Gleitpunktzahlen, also Zahlen mit Komma, speichern.
Nicht nur welche Art von Zahlen auch die länge der Zahl ist abhängig von Datentyp. Die Länge der Zahlen wir in Bits gemessen. Bit steht jedoch nicht für eine Ziffern sondern eine Stelle im Binären Zahlensystem.
Hier ist eine kleine Auflistung von weiteren Datentypen (Hochzahlen als "x..." und extrem große zahlen als "*10x..." angegeben und Punkt und Komma auseinanderhalten!):
Datentyp
|
Bezeichner
|
Größe
|
Zahlenbereich
|
1. Charcter
|
char
|
8 Bit
|
-128 bis 127
|
2. Short Integer
|
short int
|
16 Bit
|
-32.768 bis 32.767
|
3. Integer
|
int
|
32 Bit
|
-2.147.483.648 bis 2.147.483.647
|
4. Double
|
double
|
64 Bit
|
2,23*10x-308 bis 1,79*10x308
|
5. Long Double
|
long double
|
80 Bit
|
3,37*10x-4932 bis 1,18*10x4932
|
In 3D Game Studio sind verschiedene Datentypen, wie auch die Array erst ab der Extra-Version mit dabei. Man kann andere Datentypen als var zwar verwenden, doch dann wird die Variable immer auf 0 gesetzt und auch beim ausgeben angezeigt, auch wenn man sie vorher mit einen Wert deklariert hat oder einen reinschreibt. Warum dies der Fall ist, ist mir jedoch nicht klar.
Doch "var" ist hier völlig ausreichend da er ein ähnlicher dateityp wie der Double ist. Man muss nur entsprechende Parameter beim Ausgeben in der "digits-Funktion" angeben.
Wem eine genauere Erläuterung dieser Tabelle interessiert kann im Anhang des Workshops unter Datentypen und Zahlensysteme nachschlagen.
2.2 Strings
Strings sind sowas änliches wie Variablen nur das der zugewisene Speicherplatz nich für Variablen, sprich Zahlen, sonder für Text gedacht ist. Man kann auch Zahlen in diese Strings reinschreiben, nur kann man mit diesen nicht rechnen sondern nur ausgeben.
Um diese Strings auszugeben muss man zu den entsprechenden Strings noch Texte definieren. Die Wörter String und Text müssen, im vergleich zum alten WDL-Skript, in der definition groß geschrieben werden und nach dem String muss ein Sternchen " * " stehen weil eine String-Definition ist eigentlich nur der Pointer welcher auf dem eigentlichen Speicherplatz des Strings zeigt. Beim der Text-Definition muss nach dem Textnamen ein Gleichzeichen " = " gesetzt werden und dann die gewöhnliche geschweifte Klammer " { } " Weil ein Text ist keine direkte funktion, sondern eher eine erweiterte Definition:
1 STRING* hw = "Hallo Welt!";
2 ...
3 TEXT hw_ =
4 {
5 string= hw;
6 font = "Arial#24b";
7 flags = SHOW;
8 }
9 ...
Man kann aber auch die String-Definition weglassen und den String gleich in der Text-Definition deklarieren, allerdings ist es klüger jeden Text als einen extra String zu definieren, da er so öfters verwendet werden kann ohne jedesmal neu deklariert zu werden:
1 ...
2 TEXT hw_ =
3 {
4 string = "Hallo Welt!";
5 font = "Arial#24b";
6 flags = SHOW;
7 }
8 ...
Ein wichtiger Aspekt bei Strings und Texten sind die Fonts.
Fonts sind die Schriftarten indem der anzuzeigende Text angezeigt werden soll. Einen Font definiert man in der TExt-Definition über den Befehl "font =". Dahinter schreibt man entweder in Anführungszeichen direkt welchen der auf dem Rechner vorabinstallierten Fonts man benutzen will und dazu gleich hinter einer Raute " # " die Schriftgröße in Punkten und weitere Effekte wie Fett " #25b ", Kursiv" #25i " oder Unterstrichen " #25u". Natürlich ist auch eine kombination möglich nur man muss bedenken nur eine Raute zuschreiben. Man kann aber auch, was bereits im WDL-Skript funktionierte, das man den gewünschten Font als Bitmap-Datei " .bmp " oder eine PCX_Datei " .pcx " in die Text-Definition einbindet. Dabei ist jedoch die größe des Fontes eingeschränkt, da die Bitmap-Datei nur eine bestimmte größe haben darf um noch verarbeitet zu werden.
In der Bitmap-Datei muss jeder Buchstabe und jede Zahl an einer bestimmten Stelle gesetzt, bzw. gezeichnet worden sein, so wie in diesem Beispiel (vergrößert):
2.3 Pointer
Pointer sind quasi Variablen, nur mit dem unterschied das diese nicht direkt Werte speichern, sondern auf den Platz zeigen wo der Wert geschrieben steht. Deshalb auch der Name Pointer, er "zeigt" auf den eigentlichen Wert.
Pointer werden ohne das übliche "var, int, long, etc." für Variablen deklariert und mit einemSternchen ("*") direkt hinter dem Namen.
Bei der Spieleprogrammierung werden Pointer meist für Objekte und oft im Skript definierte View-Entitys benutzt um denen quasi manuel Aktionen zuzuweisen.
Hier ein Beispiel mit einer Entitiy-Definition in der Kurzfassung:
1 ENTITY* entity1; //Entity-Pointer deklaration
2 ENTITY* entity2;
3
4 entity1 = my; //Pointer initiallisieren
5 entity1.alpha = 50; //Entity Parameter zuweisen
6 entity2.npc; //Action einer View-Entity zuweisen
In C-Skrpit werden folgende Pointer unterstützt:
-ENTITY*
-STRING*
-PANEL*
-MATERIAL*
Wenn du die Aktivitäten von mir unterstützen willst spende von mir aus mit einem klick über PayPal
©2011-2021 LordDevil aka. Dennis-R. Guthe