Glückwunsch!
Glückwunsch, dein Programm funktioniert, und du hast das Ende des Lua-Kurses erreicht! Emma ist mit 30 Münzen in die Saison gestartet und hat drei Beete angelegt. Immer wenn Hugo mehr zahlte als der Markt, hat sie ihm ihre Ernte verkauft, und der Rest ging auf den Markt. Sie hat die Saison mit 174 Münzen beendet. Und jede Zeile davon hast du selbst geschrieben.
Eine letzte Verbesserung. Emma will eine neue Pflanze ausprobieren: Tomaten. In deinem Programm bedeutet das zwei neue Zeilen Daten, einen Datensatz in pflanzen und einen Eintrag in plan, und sonst nichts. Die Preisliste, das Pflanzen, das Wachsen, die Scheune, Hugo und der Markt arbeiten alle mit dem, was in den Listen steht, also finden die Tomaten von selbst überall ihren Platz. Achte auch auf die Münzen: Die Tomatensamen kosten genau die 6 Münzen, die Emma noch hat, und dank <= kann sie sie kaufen.
Was du gelernt hast. Sieh dir an, wie jede Lektion des Kurses in deinem Programm ihren Platz gefunden hat:
- Lua-Grundlagen:
print, ein Programm, das von oben nach unten läuft, und Kommentare, die es in Teile gliedern. Wenn etwas schiefging, sagte dir die Fehlermeldung, in welcher Zeile. - Variablen und Typen:
local-Variablen wiemuenzenund Ganzzahlen, die%dausgibt. Bei einer Dezimalzahl wie3.5würde%dmit einem Fehler enden. - Bedingungen entscheiden, ob Emma genug Münzen hat, ob ein Beet reif ist, ob Hugo mehr zahlt als der Markt und ob es etwas auszugeben gibt.
- Schleifen gehen den Plan, die Tage und die Beete durch, eine Schleife in einer Schleife.
for aufschlag = 2, 0, -1zählt abwärts, und daswhile truein Hugos Skript ist nicht endlos, weil es bei jedemyieldpausiert. - Tabellen als Listen enthalten die Pflanzen, den Plan, die Beete und das Wetter.
table.insertfügt etwas hinzu,#beetezählt,table.concatverbindet Texte undtable.sortsortiert sie. - Funktionen gliedern das Programm in Teile mit klaren Aufgaben:
findePflanzesucht,sortierteNamensortiert, undverkaufegibt aus und gibt die Münzen zurück. Seine Standardparameter hielten den alten Aufrufverkaufe(scheune)am Laufen. - Tabellen als Dictionaries: Jede Pflanze ist ein Datensatz,
wachstum[heute]schlägt das Wetter nach, und die Scheune zählt die Pflanzen nach Namen. Weilpairskeine Reihenfolge hat, werden die Schlüssel vor der Ausgabe sortiert. - Zeichenketten:
string.formatbaut die Zeilen mit%sund%d, und..verbindet den Rest. - Objekte und Metatabellen: Die Klasse
Beethält die Daten und Methoden eines Beets zusammen.__indexfindet die Methoden,beet:wachsen()übergibt das Beet alsself, und__tostringmacht darausKarotte 2/3. - Koroutinen: Hugos Skript pausiert bei
coroutine.yieldund macht am nächsten Tag mitten in seiner Schleife weiter, mit seinen Variablen so, wie sie waren.
Lua auf deinem eigenen Computer. Hier hat dein Browser die Programme ausgeführt. Um sie woanders auszuführen, hast du mehrere Möglichkeiten:
- Online, ohne etwas zu installieren: Mit der offiziellen Demo auf lua.org/demo.html kannst du Lua 5.4 direkt im Browser ausprobieren. Füge dein Programm ein und führe es aus.
- macOS: Installiere Lua mit Homebrew im Terminal mit
brew install lua. Speichere dein Programm alsmain.luaund führe es in seinem Ordner mitlua main.luaaus. - Ubuntu und Debian Linux: Installiere Lua mit
sudo apt install lua5.4und führe dein Programm mitlua5.4 main.luaaus. - Windows: Lade fertiges Lua von LuaBinaries herunter. Das Programm heißt
lua54.exe, du führst dein Programm also mitlua54 main.luaaus.
Schreibe deine Programme in einem Editor, der Lua versteht, zum Beispiel in Visual Studio Code mit der Erweiterung „Lua“ von sumneko (dem Lua Language Server). Er markiert Fehler schon beim Tippen, noch bevor du das Programm ausführst.
Die Fehlermeldungen sind die, die du von hier kennst, mit zwei kleinen Unterschieden: Die erste Zeile beginnt mit dem Namen des Befehls, etwa lua: , und der Traceback endet mit [C]: in ?. Enthält der Plan zum Beispiel einen Tippfehler, gibt lua main.lua Folgendes aus:
lua: main.lua:101: attempt to index a nil value (local 'pflanze')
stack traceback:
main.lua:101: in main chunk
[C]: in ?Andere Luas. Du hast das Standard-Lua 5.4 gelernt. Du wirst auch seinen Verwandten begegnen:
- Luau, die Sprache von Roblox, ist aus Lua 5.1 hervorgegangen. Sie hat Dinge, die das Standard-Lua nicht hat:
muenzen += 5und Ähnliches,continuein Schleifen, Texte mit Werten in Backticks,`Münzen: {muenzen}`, und optionale Typen,local muenzen: number = 5. Alle ihre Zahlen sind Dezimalzahlen, deshalb gibtprint(10 / 2)5aus. Und Roblox-Spiele benutzen zusätzlich zu der Sprache, die du gelernt hast, die eigenen Objekte von Roblox, zum Beispielgame,workspaceund Ereignisse. - LuaJIT ist ein sehr schnelles Lua 5.1, das die Spiel-Engine LÖVE, Defold und Neovim benutzen. Lua 5.1 kennt kein
//und unterscheidet nicht zwischen Ganz- und Dezimalzahlen. - Add-ons für World of Warcraft benutzen Lua 5.1, und PICO-8 benutzt eine kleine Sprache, die Lua ähnlich ist.
Wie geht es weiter? Du kennst jetzt Lua von print bis zu Metatabellen und Koroutinen. Hier sind ein paar Ideen, was du als Nächstes tun kannst:
- Verbessere dein Programm weiter. Opa Josef könnte ein zweiter Händler mit einer eigenen Koroutine sein, und Emma könnte an den verkaufen, der mehr zahlt. Die Saison könnte länger sein, ein Beet könnte eine Methode
beet:istReif()bekommen, und auf deinem eigenen Computer kann das Wetter mitmath.randomzufällig sein: Dort braucht kein Test jedes Mal dieselbe Ausgabe. Am meisten lernst du, wenn du deine eigenen Probleme löst. - Spiele mit LÖVE. LÖVE ist eine kostenlose Engine für 2D-Spiele, und du schreibst das ganze Spiel in Lua: was in jedem Frame passiert, was gezeichnet wird und was ein Tastendruck bewirkt.
- Roblox Studio. Roblox-Spiele werden in Luau geschrieben, in Roblox Studio. Fast alles aus diesem Kurs funktioniert dort, und du ergänzt es um die Objekte und Ereignisse von Roblox.
- Neovim. Der Texteditor Neovim wird in Lua eingerichtet und erweitert, du kannst jetzt also eigene Einstellungen und Plugins dafür schreiben.
- Das Lua-Handbuch. Das Lua 5.4 Reference Manual beschreibt die ganze Sprache und alle ihre Funktionen (auf Englisch). Und das Buch Programming in Lua von Roberto Ierusalimschy, einem der Autoren von Lua, erklärt sie ausführlich.
Und wenn du eine andere Sprache ausprobieren möchtest, warten die Kurse Python, JavaScript und C auf dich.
So schreibst du es:
Anweisungen
- 1
Füge am Ende von
pflanzenTomaten hinzu:{name = "Tomate", tage = 4, samenPreis = 2, preis = 7}. Und am Ende vonplanwill Emma 3 Tomatensamen:{name = "Tomate", samen = 3}. Ändere sonst nichts. Das Programm gibt dann alles aus, was du zu Beginn der Lektion gesehen hast:PREISLISTE Karotte: Samen 2, Verkauf 5 Kürbis: Samen 5, Verkauf 20 Erdbeere: Samen 4, Verkauf 12 Weizen: Samen 1, Verkauf 3 Tomate: Samen 2, Verkauf 7 Beet 1: Karotte x4 für 8 Münzen Beet 2: Weizen x6 für 6 Münzen Beet 3: Kürbis x2 für 10 Münzen Nicht genug Münzen für Erdbeere x2 Beet 4: Tomate x3 für 6 Münzen Münzen: 0 Tag 1 (sonnig): Karotte 1/3, Weizen 1/2, Kürbis 1/6, Tomate 1/4 Tag 2 (sonnig): Karotte 2/3, Weizen 2/2, Kürbis 2/6, Tomate 2/4 Hugo: Weizen 6 x 4 = 24 Tag 3 (regnerisch): Karotte 3/3, Weizen 2/2, Kürbis 4/6, Tomate 4/4 Tag 4 (wolkig): Karotte 1/3, Weizen 1/2, Kürbis 5/6, Tomate 1/4 Hugo: Karotte 4 x 7, Tomate 3 x 9, Weizen 6 x 5 = 85 Tag 5 (sonnig): Karotte 2/3, Weizen 2/2, Kürbis 6/6, Tomate 2/4 Hugo: Kürbis 2 x 21, Weizen 6 x 4 = 66 Tag 6 (wolkig): Karotte 3/3, Weizen 1/2, Kürbis 1/6, Tomate 3/4 Markt: Karotte 4 x 5 = 20 Saisonende: 195 MünzenBekommen die Tomaten kein Beet, prüfe die Bedingung für den Kauf der Samen: Emma hat genau 6 Münzen übrig, und das reicht.