Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:tutorials:level1:tables

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
scripting:tutorials:level1:tables [2023/05/29 07:45] fritz_98scripting:tutorials:level1:tables [2024/05/13 13:26] (aktuell) fritz_98
Zeile 41: Zeile 41:
 </code> </code>
  
 +Tables, die wie Listen funktionieren, werden auch als //numerische Tables// bezeichnet.
 ----  ---- 
  
Zeile 186: Zeile 187:
 ===== Tables als Wörterbücher ===== ===== Tables als Wörterbücher =====
  
-Die andere Art von Tables sind solche, die **Paare** von Variablen einander zuordnet. Wie in einem Wörterbuch kann man in so einem Table für einen gesuchten Wert (Fremdwort, **Schlüsselwert**/**Key**) einen entsprechenden gespeicherten Wert (Wort in der Muttersprache, **Value**) vorfinden. Auch solche Tables werden mit geschweiften Klammern ''{}'' konstruiert. +Die andere Art von Tables sind solche, die **Paare** von Variablen einander zuordnet. Wie in einem Wörterbuch kann man in so einem Table für einen gesuchten Wert (Fremdwort, **Schlüsselwert**/**Key**) einen entsprechenden gespeicherten Wert (Wort in der Muttersprache, **Value**) vorfinden. Auch solche Tables werden mit geschweiften Klammern ''{}'' konstruiert. Im Gegensatz zur numerischen Variante werden diese Tables //assoziative Tables// genannt.
  
 Dazwischen stehen dann die Werte-Paare. Der Schlüsselwert/**Key** liegt dabei in eckigen Klammern ''[]'' und wird durch ein =-Zeichen mit einem Wert/**Value** assoziiert. Ein sehr kleines Englisch-Deutsch-Wörterbuch sähe zum Beispiel so aus: Dazwischen stehen dann die Werte-Paare. Der Schlüsselwert/**Key** liegt dabei in eckigen Klammern ''[]'' und wird durch ein =-Zeichen mit einem Wert/**Value** assoziiert. Ein sehr kleines Englisch-Deutsch-Wörterbuch sähe zum Beispiel so aus:
Zeile 221: Zeile 222:
 </code> </code>
  
-Es gibt für Tables eine weitere abkürzende Schreibweise, die sehr häufig benutzt wird. Wenn ein **Key** ein String ist, können die eckigen Klammern und Anführungszeichen weggelassen werden, sodass unser Wörterbuchbeispiel vereinfach so aussieht:+Es gibt für Tables eine weitere abkürzende Schreibweise, die sehr häufig benutzt wird. Wenn ein **Key** ein String ist, können die eckigen Klammern und Anführungszeichen weggelassen werden, sodass unser Wörterbuchbeispiel vereinfacht so aussieht:
 <code lua> <code lua>
 -- Dieses kleine Wörterbuch ist genau das gleiche wie oben in einer anderen Schreibweise -- Dieses kleine Wörterbuch ist genau das gleiche wie oben in einer anderen Schreibweise
Zeile 240: Zeile 241:
 Der String-Key wird also mit einem Punkt vom Table-Name getrennt. Der String-Key wird also mit einem Punkt vom Table-Name getrennt.
  
-FIXME table.getn geht nicht+**Hinweis**: Bei Tables, die Key-Value-Paare benutzen, funktioniert ''table.getn'' nicht! Die Funktion wird für solche Tables immer ''0'' ausgeben.
  
-FIXME Neue Werte hinzufügen+**Wichtig**: In Siedler 5 müssen alle **Keys** entweder Strings oder Zahlen sein! Andernfalls gehen die Tables beim Speichern und Laden verloren.
  
-FIXME Keys müssen Zahlen, Strings oder Booleans sein+\\ 
 + 
 +==== Ein Table verändern ==== 
 + 
 +Wir können unserem Wörterbuch wie gewohnt neue Werte hinzufügen. Für Strings bleiben beide Schreibweisen: 
 +<code lua> 
 +-- Wir definieren einige String-Paare im Dictionary 
 +Dictionary = { 
 +    Computer = "Rechner", 
 +    Mouse = "Maus", 
 +    Keyboard = "Tastatur", 
 +    Screen = "Bildschirm" 
 +
 + 
 +-- Jetzt fügen wir einige weitere hinzu: 
 +Dictionary["Speaker"] = "Lautsprecher" 
 +Dictionary["Headphones"] = "Kopfhörer" 
 + 
 +-- Dabei können wir die Schreibweise frei wählen 
 +Dictionary.Joystick = "Steuerknüppel" 
 +</code> 
 + 
 +\\ 
 + 
 +==== Tables als Werte ==== 
 + 
 +Wenn man in einem Table weitere "Untertables" einem Schlüsselwert zuordnet, hat das den Effekt, dass Tables "geschachtelt" werden. Diese Konstruktion wird uns später beispielsweise in [[ scripting:tutorials:level1:briefings |Briefings]] begegnen. 
 + 
 +Aus Rollenspielen kennst du vielleicht Charaktereditoren, mit denen man vornehmlich das Gesicht seines Spielcharakters anpassen kann. Die Eigenschaften des Spielcharakters können in einem geschachtelten Table gespeichert werden und so eine übersichtliche Struktur erhalten: 
 +<code lua> 
 +Character = { 
 +    Hair = { 
 +        Style = "Short Messy", 
 +        Color = "Black", 
 +        Effect = "Glossy" 
 +    }, -- Key-Value-Paare werden weiterhin durch Kommas getrennt. Die werden oft vergessen 
 +    Eyes = { 
 +        Type = 9, 
 +        Color = "Green", 
 +        Size = 5, 
 +        GapSize = 11 
 +    }, 
 +    Nose = { 
 +        Type = 3, 
 +        Size = 7, 
 +        Effect = "Dirt Patch" 
 +    } 
 +
 +</code> 
 +In diesem Beispiel haben wir oft "Type" oder "Color" als Key. Da diese aber immer einem anderen Teil des Gesichts zugewiesen sind, bleibt es eindeutig, worauf sie sich beziehen. Denn \\ 
 +''Character.Eyes.Type'' \\ 
 +ist eine andere Variable als \\ 
 +''Character.Nose.Type'' 
 + 
 +Man kann dem geschachtelten Table wie gewohnt neue Werte hinzufügen: 
 +<code lua> 
 +Character.Nose.Height = 8 
 + 
 +Character.Mouth = { 
 +    Type = 10, 
 +    Width = 15, 
 +    Color = "Deep Red", 
 +    Height = 4 
 +
 +</code> 
 + 
 +---- 
 + 
 +An dieser Stelle sind die Lua-Inhalte für diese Ebene abgeschlossen. Das nächste Kapitel gibt **wichtige** Konventionen an, //wie// man Lua lesbar aufschreibt. 
 + 
 +[[ scripting:tutorials:level1:loops | Voriges Kapitel: Schleifen ]]\\ 
 +[[ scripting:tutorials:level1:readable_code | Nächstes Kapitel: Gut lesbare Skripte ]]\\ 
 +[[ scripting:tutorials:level1:tables | Zurück nach oben ]]
scripting/tutorials/level1/tables.1685346306.txt.gz · Zuletzt geändert: 2023/05/29 07:45 von fritz_98