E-Book, Deutsch, 316 Seiten
Reihe: Rheinwerk Computing
Wegesin Let’s code Lua!
1. Auflage 2024
ISBN: 978-3-367-10418-5
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Dein Einstieg in die Spieleprogrammierung
E-Book, Deutsch, 316 Seiten
Reihe: Rheinwerk Computing
ISBN: 978-3-367-10418-5
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Dein spielerischer Einstieg in die Programmierung – super leicht mit der einfachen Programmiersprache Lua!
Schritt für Schritt zum ersten eigenen Game – mit diesem Buch erstellst du nicht nur dein erstes eigenes Spiel, sondern lernst auch noch nebenbei das Programmieren. Auch ohne Vorkenntnisse lernst du mithilfe von Lua die Grundlagen des Programmierens und tauchst in die spannende Fantasywelt des jungen Zauberers Marvin ein. Spiel für Spiel eignest du dir die Grundlagen der Programmierung an: Variablen, Schleifen und Funktionen. Und zum Schluss wirst du alles, was du beim Programmieren der Minispiele gelernt hast, in der „Cave of Doom“ unter Beweis stellen.
- Schnelle Lernerfolge mit der einfachen Programmiersprache Lua
- Spiel für Spiel: Vom Quiz, über interaktive Geschichten bis zu 2D Action
- Ausführliche Erklärungen, viele Beispiele, Screenshots und Grafiken
- Zeig, was du gelernt hast, in der »Cave of Doom«!
Durch die Fantasywelt des Zauberers Marvin hat dieses Buch einen spannenden roten Faden und erleichtert das Lernen auf unterhaltsame Art. Mit der Storyline schaffst du es mit Lua spielend leicht zu eigenen Ergebnissen und lernst nebenbei das Programmieren.
Aus dem Inhalt:
- Der spielerische Einstieg in die Programmierung
- How to Code: die Grundlagen lernen mit Lua
- Schritt für Schritt zum ersten eigenen Game
- Variablen und Ausdrücke, Arrays und Funktionen
- Quiz, interaktive Geschichten, Monster bekämpfen!
- Spiel für Spiel dazulernen
- Einführung in Löve2D
- Spiele mit Grafik, Sound und Input
- Hier kommt alles zusammen: die Cave of Doom
Maxime Wegesin hat 2014 an der Uni Bonn seinen Master of Science in Mathematik abgeschlossen. Schon während seines Studiums begleitete er mehrere Programmierkurse und entdeckte seine Leidenschaft dafür, anderen das Programmieren näherzubringen. Diese Begeisterung vertiefte er als Betreuer beim ComputerCamp, wo er miterlebte, wie Jugendliche mit großer Freude ihre ersten Schritte in der Computerprogrammierung machten und ihre kreativen Ideen zum Leben erweckten. Nach dem Studium arbeitete Maxime einige Jahre als Programmierer, bevor er eine neue Herausforderung suchte und sich entschloss, eine Ausbildung zum Erzieher zu absolvieren. Heute arbeitet er in einem Kindergarten und hat seine Begeisterung für die Informatik nie verloren. Mit seinem Buch möchte Maxime jungen Menschen die Freude am Programmieren vermitteln und sie ermutigen, ihre eigenen kreativen Ideen in die Tat umzusetzen.
Autoren/Hrsg.
Weitere Infos & Material
Vorwort ... 15
TEIL I. Reisevorbereitungen ... 19
1. Eine (sehr) kurze Geschichte der Programmierung ... 21
2. Richte deine Entwicklungsumgebung ein ... 25
Der Lua-Interpreter ... 25
Notepad für Coder ... 29
3. Hacker's Delight: das Terminal ... 31
Ordner und dir ... 31
Ordner wechsel dich! ... 33
Ein Ordner für unseren Code ... 33
Dein erstes Programm ... 34
Herzlichen Glückwunsch! ... 35
TEIL II. Reise nach Lua ... 37
4. Daten, Daten, Daten ... 39
Wie sehen Lua-Programme aus? ... 39
Kommentare ... 40
Variablen und Ausdrücke ... 41
Variablennamen ... 43
Mehrfachdeklaration und -zuweisung ... 44
Zahlen ... 45
Strings ... 48
Ein Datentyp für ... nichts ... 51
Zusammenfassung ... 51
Game: Marvin und der Mond ... 52
5. Der Computer lernt zuhören ... 55
Eingabe erwartet ... 55
Mehr Kontrolle über die Ausgabe ... 56
Escape-Sequenzen ... 56
Lua hilft gern ... 58
Fehlermeldungen ... 59
Zusammenfassung ... 60
Game: Der Abschied ... 61
6. Kleine Helfer für den Programmierer ... 63
Wie rufe ich eine Funktion auf? ... 63
Ein kleiner Spaziergang durch die Bibliothek ... 65
Zusammen stark ... 69
Zusammenfassung ... 70
Game: Marvin auf Reisen ... 71
7. Entscheidungen treffen ... 73
Wenn ja, dann Schwert ... 73
Ansonsten was? ... 75
Viele Bedingungen ... 75
Codeblöcke und die Lebensdauer von Variablen ... 77
Zur Formatierung ... 80
Zusammenfassung ... 80
Game: Ein Höhlenabenteuer ... 81
8. Rechnen mit Wahrheit ... 85
Wann erhältst du einen Boolean? ... 85
Und, oder, nicht? ... 87
Kompliziertere Bedingungen ... 88
Sind auch andere Ausdrücke als Bedingungen erlaubt? ... 89
Zusammenfassung ... 90
Game: Feuer, Wasser, Eis ... 91
9. Ich wiederhole mich sehr gern ... 97
while und repeat ... 97
Endlosschleifen und break ... 99
Die for-Schleife ... 100
Zusammenfassung ... 102
Game: Markt der Magier ... 103
10. Neue Helfer rekrutieren ... 111
Eigene Funktionen definieren ... 112
Call by Value ... 114
Funktionen und ihre Variablen ... 115
Eine Funktion für Zufallsnamen ... 116
Zahlen, Strings, Booleans ... und Funktionen? ... 117
Zusammenfassung ... 118
Game: Die Zauberschule ... 119
11. Daten am laufenden Band ... 127
Arrays und Indizes ... 127
Arrays wachsen und schrumpfen lassen ... 128
Das Array und die for-Schleife ... 130
Zauberhafter Umgang mit Arrays ... 131
Mehrdimensionale Arrays ... 134
Zusammenfassung ... 137
Game: Der Keller ... 138
12. Ein Held ist keine Zahl ... 145
Vom Array zur Table ... 145
Der Schlüssel zum Verständnis ... 146
Tables erweitern ... 147
Arrays sind auch nur Tables ... 148
Eine Table, zwei Variablen ... 149
for-Schleife revisited ... 150
Objektorientierte Programmierung ... 151
Ein Objekt für Ork-Krieger ... 152
Ork-Krieger haben ihre Methoden ... 153
Eine Fabrik für Charaktere ... 156
Meister aller Klassen ... 157
Charakter ist nicht gleich Charakter! ... 159
Zusammenfassung ... 162
Game: Die Rückkehr ... 163
13. Codemonster in Stücke schneiden ... 173
Unser erstes eigenes Modul ... 173
Module und die Hauptdatei ... 175
Variablen und Konstanten in Modulen ... 176
Module, Module, Module ... 178
Zusammenfassung ... 179
Game: Cave of Doom ... 180
14. Herzlichen Glückwunsch! ... 201
Epilog ... 202
TEIL III. Aufbruch in eine neue Welt ... 203
15. What is Löve? ... 205
Was ist ein Framework, und wozu brauchen wir es? ... 205
Installation ... 206
Ein kleiner Überblick über Löve ... 208
Zusammenfassung ... 215
16. Bewegung auf Tastendruck ... 217
Einrichten des Projekts ... 217
Wir laden das Spiel in Löve ... 218
Bei jedem Tastendruck eine neue Runde ... 219
Eine Löve-Anwendung beenden ... 222
Eine Hauptschleife, viele Zustände ... 222
Zusammenfassung ... 225
17. Cave of Doom wird bunt ... 227
Hübsche Kacheln für die Höhle ... 227
Charaktere und Animation ... 239
Textausgabe ... 249
Der Vollbildmodus ... 259
Zusammenfassung ... 259
18. Es ist so still im Dungeon ... ... 261
Sounds laden und abspielen ... 261
Spiel denselben Song noch mal! ... 265
Auch Sounds können Schlange stehen ... 267
Zusammenfassung ... 276
19. Zum Abschluss ... 277
Anhang ... 279
A ... Wie geht es von hier weiter? ... 279
B ... Der komplette Code für Cave of Doom ... 285
C ... Die Lua-Standardbibliothek ... 307
Index ... 313
6.2 Ein kleiner Spaziergang durch die Bibliothek
Jetzt weißt du alles, was es über Funktionsaufrufe zu wissen gibt. Als Nächstes machen wir einen kleinen Spaziergang durch Luas Standardbibliothek und schauen, was alles möglich ist. Eine längere Liste von Funktionen findest du im Anhang.
6.2.1 GROSS und klein
Die Funktionen string.upper() und string.lower() nehmen einen String, verwandeln alle seine Buchstaben in Groß- bzw. Kleinbuchstaben und geben das Ergebnis zurück:
print(string.upper(s)) --> BEISPIEL
print(string.lower(s)) --> beispiel
Listing 6.4 LAUT und leise
6.2.2 Ein String und seine Teile
Die Funktion string.sub() gibt einen Teil eines Strings zurück. Dazu bekommt string.sub() drei Argumente: den String, den Index des ersten Buchstabens des gewünschten Teilstrings und den Index des letzten Buchstabens des Teilstrings. Wenn du das dritte Argument weglässt, geht string.sub() davon aus, dass du den Rest des Strings bis zum letzten Buchstaben zurückbekommen möchtest.
Vielleicht fragst du dich, was mit Index gemeint ist? Der Index eines Buchstabens ist einfach die Stelle, an der er sich im String befindet. Der Index des ersten Buchstabens in einem String ist 1, der Index des zweiten Buchstabens 2 und so weiter:
| String | " | B | e | i | s | p | i | e | l | " |
| Index | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
Tabelle 6.1 Strings und Indizes
Ein paar Beispiele verdeutlichen, wie das funktioniert:
print(string.sub(s, 1, 3)) --> Bei
print(string.sub(s, 5, 5)) --> p
print(string.sub(s, 4, 8)) --> spiel
print(string.sub(s, 4)) --> spiel
Listing 6.5 Langsam wird es kompliziert ...
6.2.3 Wer suchet, der findet
Die Funktion string.find() sucht einen String in einem anderen. Wenn der Suchbegriff gefunden ist, gibt string.find() den Index zurück, an dem er sich befindet. Wird er nicht gefunden, gibt die Funktion nil zurück.
print(index) --> 1
index = string.find("Beispiel", "spiel")
print(index) --> 4
index = string.find("Beispiel", "Spiel")
print(index) --> nil
Listing 6.6 Groß- und Kleinbuchstaben sind nicht dasselbe.
6.2.4 Die echte Länge eines Strings
Ich hatte schon erwähnt, dass der Längenoperator (#) die Anzahl der Bytes und nicht die Anzahl der Buchstaben eines Strings zurückgibt. Das kann ein Problem bei UTF-8-codiertem Text sein, weil manche Buchstaben mit mehreren Bytes codiert werden. Glücklicherweise hat Lua in Version 5.3 einige Funktionen zum Umgang mit UTF-8-codierten Strings in seine Standardbibliothek aufgenommen.
Eine davon ist utf8.len(), die die Anzahl der Buchstaben in einem String zurückgibt:
-- Das "ü" wird durch zwei Bytes kodiert.
print(#color) --> 5
-- Die Anzahl der Buchstaben erhältst du mit der Funktion utf8.len().
print(utf8.len(color)) --> 4
Listing 6.7 Vier Buchstaben
6.2.5 Spiel mit dem Zufall
Die Funktion math.random() gibt eine Zufallszahl zurück. Je nachdem, wie viele Argumente du übergibst, verhält sich math.random() unterschiedlich. Wenn du kein Argument übergibst, gibt math.random() dir eine Kommazahl zurück, die zwischen 0 und 1 liegt.
print(math.random()) --> 0.40266258824049
Listing 6.8 Beispielergebnisse für math.random() ohne Argument
Wenn du eine Ganzzahl übergibst, bekommst du eine zufällige ganze Zahl zwischen 1 und der übergebenen Zahl.
print(math.random(6)) --> 1
Listing 6.9 Beispielergebnisse für math.random() mit einem Argument
Wenn du zwei Zahlen übergibst, bekommst du eine Zahl, die zwischen diesen beiden Zahlen steht.
print(math.random(10, 20)) --> 18
Listing 6.10 Beispielergebnisse für math.random() mit zwei Argumenten
Kann der Computer Zufall?
Wenn du eine ältere Lua-Version als Lua 5.4 verwendest, kann es sein, dass du bei jedem Programmstart dieselben Zufallszahlen erhältst. Das liegt daran, dass Computer eigentlich keine Zufallszahlen generieren können. In Wahrheit rechnet der Computer mit einer Formel Zahlen aus, die für uns aussehen wie Zufallszahlen. Man spricht daher auch manchmal von Pseudozufallszahlen.
Dazu fängt er mit einer Zahl an und berechnet aus dieser Zahl die nächste »Zufallszahl«. Die Zahl, mit der der Computer anfängt, nennt man Saat oder Seed.
In Lua kannst du die Saat selbst setzen, indem du die Funktion math.randomseed() aufrufst. Wenn du eine bestimmte Zahl als Seed setzt, wirst du immer dieselben Zufallszahlen bekommen.
Stell dir zum Beispiel vor, du möchtest ein Spiel programmieren, in dem es Tausende Sternensysteme gibt. Jeder Planet in diesem Sternensystem hat andere Eigenschaften. Weil du dir nicht jedes per Hand ausdenken willst, benutzt du Zufallszahlen, um die Sternensysteme zu generieren. Du möchtest aber, dass bei jedem Spielstart dieselben Sternensysteme generiert werden.
Dann mag es sinnvoll sein, selbst eine Saat zu setzen:
-- Wie viele Monde hat der Planet?
local moons = math.random(10)
-- Ist der Planet bewohnbar? (0 = Nein, 1 = Ja)
local isHabitable = math.random(0,1)
print(moons) --> 5
print(isHabitable) --> 0
Listing 6.11 Hier kommen jedes Mal dieselben Ergebnisse heraus.
Bei Lua-Versionen vor Version 5.4 musst du einen Trick anwenden, um jedes Mal andere Zufallszahlen zu bekommen: Die Funktion os.time() liefert dir die aktuelle Zeit in Sekunden. Das heißt, bei jedem Programmstart bekommst du eine andere Zahl.
-- Wie groß ist der Planet?
local diameter = math.random(2000, 140000)
-- Ist der Planet gasförmig? (0 = Nein, 1 = Ja)
local isGasPlanet = math.random(0,1)
print(diameter) --> 9
print(isGasPlanet) --> 1
Listing 6.12 Hier kommen bei jedem Aufruf unterschiedliche Zahlen heraus
In Lua 5.4 passiert das allerdings automatisch, das heißt, wenn du selbst keine Saat setzt, bekommst...




