Arrays

Aus X-Lexikon
Version vom 30. Mai 2011, 23:15 Uhr von 4th Fleet Commander (Diskussion | Beiträge) (erstellt)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springenZur Suche springen

Achtungzeichen.gif Achtung: Diese Seite ist in Bearbeitung durch 4th Fleet Commander. Solange dieses Banner hier steht, werden sämtliche Änderungen ohne Vorwarnung überschrieben.



Nun soll es um Arrays gehen. Die Arrays braucht man relativ häufig beim Scripten in X3TC, da sie eine wichtige Variablenform darstellen.

Was ist ein Array?

Ein Array ist erst einmal nur eine Variable, jedoch eine ganz besondere. Eine normale Variable kann nur einen Wert aufnehmen, z.B. eine Zahl, einen Namen, eine Schiffsklasse einen Sektor etc.
Ein Array kann jedoch mehrere Werte in sich aufnehmen. Hierzu nutzt es sogenannte Indizes, an denen die einzelnen Werte gespeichert werden. Die einzelnen Werte können auch verschieden sein, man kann also durchaus Zahlen zusammen mit Schiffen in ein Array packen. Man kann auch mehrere Arrays ineinander packen, dies macht vor allem bei Flottenverbänden für die KI einen Sinn.

Wie ist ein Array aufgebaut?

Wir schauen uns zunächst einmal den Grundcode eines Arrays an. Der sieht folgendermaßen aus:

So sieht ein Array aus. Nun wollen wir uns das ganze mal detaillierter anschauen:

An erster Stelle steht das Wort ARRAY. Dieses dient im Grunde nur dazu, damit man weiß, dass es sich um ein Array handelt. In den Klammern stehen nun die im Array enthaltenen Werte.
Die einzelnen Werte sind durch Kommata voneinander getrennt. Die Kommata markieren die einzelnen Indizes. Wichtig: Der erste Index (hier ist dort "Buster" gespeichert) hat die Nummer 0, und nicht die 1.

Wie lese ich ein Array aus?

Die Werte aus dem Array kann man nun per Code abfragen. Dazu verwendet man den Namen des Arrays, gefolgt von der Nummer des Index, die in eckigen Klammern geschrieben wird. Wir nennen unser Array nun einmal "Testarray", und fragen nun die Werte ab.
Wir möchten nun den Wert "Energiezellen" aus dem Array auslesen. Dieser steht an fünfter Stelle im Array, doch da der erste Index die Nummer 0 hat, stehen die Energiezellen an Index Nummer 4.

Der Befehl sieht nun folgendermaßen aus:

Die Variable "$Ergebnis" würde hier nun den Wert "Energiezellen" annehmen.

Wenn man jetzt aber das Array nicht selbst erstellt hat, oder man aus sonstigen Gründen nicht weiß, wie viele Indizes das Array hat, so kann man das abfragen. Das macht man mit dem Befehl:

Dieser Befehl liefert nun die Größe des Arrays, sprich also, wie viele Indizes darin enthalten sind. Wichtig: Dieser Wert entspricht nicht der Nummer des letzten Index', da der erste Index ja wieder die Nummer 0 hat. So muss hier 1 abgezogen werden, um die Nummer des letzten Index zu ermitteln.

Systematisches Auslesen

Man kann so ein Array jetzt auch systematisch auslesen. Dies macht man mit der "while-Schleife", die schon vorher erklärt wurde.

Vorgehensweise:
Das Script soll nun folgendes machen:

  • Größe des Arrays ermitteln
  • Eine Zähler-Variable auf diese Größe setzen
  • Die while-Schleife beginnen
  • Die Zählervariable um 1 senken
  • Den Wert des Arrays am Index der Zählervariable auslesen
  • Mit diesem Wert arbeiten
  • Die Schleife beenden

Und so sieht der zugehörige Code aus:

Wir schauen uns nun mal den Ablauf des Scriptes an, und zwar an einem einfachen Array. Dieses Array sieht folgendermaßen aus:

Wir merken uns:Die 3 steht an Index 0; die 5 steht an Index 1; die 7 steht an Index 2. Nun führen wir das Script aus:

  • Zuerst wird die Größe des Arrays ausgelesen. Das Array hat 3 Indizes, also ist die Variable $zaehler nun = 3.
  • Jetzt kommt die Prüfung: while $zaehler > 0. Die Variable hat den Wert 3, das ist größer 0, also wird die Schleife ausgeführt.
  • Nun wird $zaehler um 1 erniedrigt, die Variable hat also jetzt den Wert 2.
  • Jetzt wird der Wert ausgelesen, und als Index wird hier $zaehler verwendet. Diese Variable hat den Wert 2, also wird der zweite Index genommen. Am zweiten Index steht jetzt die 7, die Variable $array.wert hat nun also den Wert 7.
  • Der "wait"-Befehl dient nur zur Schonung der Performance.
  • Das end definiert das Ende der Schleife, nun wird also wieder zur Einstiegsbedingung zurückgekehrt.
  • Wieder die Prüfung, $zaehler ist 2, und da 2 > 0 ist die Bedingung erfüllt.
  • Anschließend wird $zaehler um 1 erniedrigt, hat jetzt also den Wert 1.
  • Jetzt wird wieder der Arraywert ausgelesen, und zwar nun am Index nr. 1. Die Variable $array.wert hat jetzt also den Wert 5.
  • wait und end dürften bekannt sein, also wieder zur Bedingung nach oben.
  • $zaehler hat den Wert 1, und 1 > 0 , also ist die Bedingung erfüllt.
  • $zaehler wird um 1 erniedrigt, hat also jetzt den Wert 0.
  • wieder wird ausgelesen, und zwar am Index 0. Die Variable $array.wert hat nun den Wert 3.
  • wieder wait und end, nun zurück zur Bedingung
  • $zaehler hat nun den Wert 0. Nun wird geprüft, ob $zaehler > 0 ist, also wird geprüft, ob 0 > 0 ist. Das ist jedoch nicht der Fall, und so wird die Schleife nun nicht mehr durchlaufen.

Jetzt wurden alle Werte im Array ausgelesen.