singe/docs/de/Learn.adoc

243 lines
9.9 KiB
Text

= Programmieren lernen mit Singe
Scott Duensing <scott@kangaroopunch.com>
:revnumber: 3.00
:revdate: 2026
:doctype: book
:toc: left
:toclevels: 3
:title-logo-image: image:singeLogo.png[Singe, pdfwidth=2.6in, align=center]
:source-highlighter: rouge
:icons: font
:experimental:
:imagesdir: ../images
:lang: de
include::locale.adoc[]
[preface]
[#_before_you_begin]
== Bevor du anfängst
Dieses Buch bringt dir das Programmieren bei. Es geht davon aus, dass du in deinem Leben noch keine Zeile
Code geschrieben hast, und es geht nicht davon aus, dass du Programmierer werden willst --
nur, dass du ein Spiel machen willst.
Jede Lektion endet mit etwas, das du starten und mit dem du spielen kannst. Nichts wird
für später aufgehoben: Es gibt keine Theoriekapitel, bevor das erste Bild auf dem
Bildschirm erscheint. Dein erstes funktionierendes Programm schreibst du in etwa zehn Minuten, und es
wird fünf Zeilen lang sein.
Singe ist eine Spiel-Engine. Du kannst damit alles machen, was du mit
jeder anderen Engine machen kannst, in zwei Dimensionen oder in drei, und der größte Teil dieses Buchs handelt
genau davon. Was es abhebt, ist, dass es außerdem FMV-Video („Full Motion Video“)
als die Welt abspielen kann, in der das Spiel stattfindet; so funktionierten die Laserdisc-Spiele
der Spielhallen, und das kann fast nichts anderes gut. Das ist eine
Fähigkeit, keine Pflicht: Ein Spiel spielt nur dann Video ab, wenn es darum bittet, und
nichts, was du in den ersten dreizehn Lektionen schreibst, kommt auch nur in die Nähe davon.
Die Sprache ist Lua, die Singe für alles benutzt. Lua wurde von Leuten gewählt,
die sie Künstlern und Designern beibringen mussten, und das merkt man. Es gibt keine
Semikolons, die man vergessen kann, keine Typen, die man deklarieren muss, und keinen Compiler, mit dem man kämpfen muss. Wenn du
einen Fehler machst, sagt dir Singe die Datei, die Zeile und was es nicht
verstanden hat.
[#_what_you_need]
=== Was du brauchst
* *Singe.* Eine Datei. Leg sie in einen Ordner, den du wiederfindest.
* *Einen Texteditor.* Editor, TextEdit im Modus für reinen Text, Notepad++, VS Code
oder irgendetwas anderes, das reinen Text speichert. Eine Textverarbeitung geht nicht: Sie
speichert Formatierungen, die du nicht siehst, und Singe kann das nicht lesen.
* *Sonst nichts.* Du brauchst keine Laserdisc, keine Videodatei, kein Zeichenprogramm
und keine Grafiken. Der ganze erste Teil zeichnet alles selbst, und
ab dem zweiten Teil kommen die Bilder, die Sounds, das Video und die Modelle, die du
brauchst, alle mit dem Buch oder mit der Engine. Was du brauchst, steht weiter
unten.
[#_how_to_read_this_book]
=== Wie du dieses Buch liest
Tipp den Code ab. Kopier ihn nicht und füg ihn nicht ein. Abtippen ist langsamer, und genau darum
geht es: Du wirst kleine Fehler machen, und indem du sie behebst, lernst du zu
lesen, was der Computer dir sagt. Jede Lektion hat einen Abschnitt *Probier es aus* mit
Änderungen, die du machen sollst, und die sind so wichtig wie die Lektion.
Wenn eine Lektion schiefgeht und du nicht siehst, warum, liegt das fertige Skript jeder
Lektion im Ordner `learn`, der mit diesem Buch kommt, benannt nach seiner
Lektion: `01-hello.singe` und so weiter. Lies es erst, nachdem du es selbst versucht hast.
[#_how_your_folders_are_laid_out]
=== Wie deine Ordner aufgebaut sind
Lektion eins richtet das ein, und jede spätere Lektion setzt es voraus, also lohnt es sich,
es jetzt einmal zu sehen.
Du hast einen *Arbeitsordner*, in dem deine Kopie von Singe liegt. Jede Lektion legt darin einen
neuen Ordner an, benannt nach dem Skript, das darin liegt.
[literal]
----
singe/ <- dein Arbeitsordner, mit Singe darin
Singe/ <- hier legt die Engine ihre eigenen Dateien ab
data/ <- und alles, was deine Spiele speichern
hello/
hello.singe
rocks/
rocks.singe
art/
----
Du startest eine Lektion aus dem Arbeitsordner, indem du ihren Ordner nennst, also startet `Singe rocks`
die Datei `rocks/rocks.singe`. Diese Kurzform funktioniert, weil Ordner und
Skript denselben Namen haben. Das ist dieselbe Form, die ein echtes installiertes Spiel hat, und
darum benutzt das Buch sie ab der ersten Lektion, statt später aufzuräumen.
[#_what_comes_with_this_book]
=== Was zu diesem Buch gehört
Ab dem zweiten Teil benutzen die Lektionen Bilder und Sounds. Sie liegen im
Ordner `art`, der mit dem Buch kommt, und du kopierst diesen Ordner in den
Lektionsordner, in dem du gerade arbeitest, und behältst den Namen bei. Es gibt ein Raumschiff, einen Felsen, einen
Schuss, einen Stern, vier Frames von jemandem, der läuft, und zwei Geräusche.
`art/README.txt` listet sie mit ihren Größen auf.
Den Rest liefert Singe selbst. Wenn du zum ersten Mal irgendetwas startest, entpackt die Engine
einen Ordner namens `Singe` in deinen Arbeitsordner, und darin sind ein Video, eine
Schriftart, zwei 3D-Modelle und ein Klick. Die Lektionen, die diese brauchen, benutzen die,
die schon auf deiner Festplatte liegen, also musst du nichts suchen und nichts kaufen. Nichts davon
ist hübsch. Alles davon ist echt, und etwas Besseres einzusetzen ist meist nur
ein geänderter Dateiname.
[#_this_is_not_the_forge_book]
=== Dies ist nicht das Forge-Buch
Forge, ein eigenes Werkzeug mit einem eigenen Buch, macht ein Spiel, indem man es beschreibt,
statt es zu programmieren. Das ist ein anderer Weg an einen anderen Ort, für
jemanden, der überhaupt keinen Code schreiben will. Wenn du hierhergekommen bist, um programmieren zu lernen,
bist du hier richtig. Du brauchst weder Forge noch sein Buch, und
dieses Buch baut nicht darauf auf.
Die _Singe-Referenz_ ist das Nachschlagewerk: jede Funktion, jedes Argument, jeder
Rückgabewert und das Programmiermodell dahinter. Sie ist kein Tutorial und
versucht nicht, eines zu sein. Ungefähr ab Lektion sechs wirst du anfangen, zu ihr zu greifen, und
am Ende dieses Buchs wirst du sie mehr benutzen als dieses Buch. Sie kommt
im selben Download wie dieses hier.
[#_the_series]
== Die Reihe
Einunddreißig Lektionen in vier Teilen. Jede braucht die vorige und sonst
nichts.
*Teil eins: Die Ideen.* Keine Grafiken, kein Video, nichts zu installieren. Du zeichnest mit
den Formen und dem Text, die die Engine schon hat, und lernst, woraus ein Programm
besteht.
. *Hallo* -- ein Skript, eine Funktion, ein String und etwas auf dem Bildschirm.
. *Zahlen, die sich ändern* -- Variablen, Rechnen und Bewegung hineinbringen.
. *Entscheidungen treffen* -- `if`, Vergleiche und die Steuerung abfragen.
. *Noch einmal* -- `for` und `while`, und hundert Stück von etwas zeichnen.
. *Deine eigenen Funktionen* -- Argumente, Rückgabewerte und warum du dir die Mühe machen solltest.
. *Listen von Dingen* -- Tabellen, `ipairs`, Hinzufügen und Entfernen.
. *Ein Spiel* -- alles bisher, spielbar, in etwa hundertzwanzig Zeilen.
. *Wenn etwas schiefgeht* -- Fehlermeldungen lesen, `debugPrint` und Neuladen mit F5.
*Teil zwei: Ein echtes Spiel.* Grafiken, Sound und die Form, die ein fertiges Spiel annimmt.
[start=9]
. *Bilder* -- Sprites, Laden, Zeichnen und Frames.
. *Sound* -- Effekte, Musik und wann man was lädt.
. *Dinge treffen* -- Kollision, das Spiele-Kit und Hitboxen.
. *Punkte, Leben und Game Over* -- Zustand, Speichern und Neustarten.
. *Ein Spielordner* -- `games.dat`, Grafiken für das Menü und Starten daraus.
*Teil drei: Video.* Film als die Welt des Spiels abspielen, und die Arcade-Konventionen,
die darum herum entstanden sind. Überspring diesen Teil, wenn dein Spiel kein
Video will; nichts danach hängt von diesem Teil ab.
[start=14]
. *Video abspielen* -- die Disc, Frames, Springen und Warten.
. *Die andere Schreibweise* -- das Thread-Modell und warum es zu Video passt.
. *Verzweigungen* -- Entscheidungen, Pfade und die Form eines verzweigten Videospiels.
. *Lightguns* -- Zielen, Schießen und die Kalibrierung, die ein Automat braucht.
. *Quick-Time-Events* -- Aufforderungen, Zeitfenster und die Reaktionszeit des Spielers bewerten.
*Teil vier: Alles andere.* Jede Lektion steht für sich; nimm sie in beliebiger
Reihenfolge.
[start=19]
. *Text, der gut aussieht* -- Schriftarten, Qualität und Ausmessen.
. *Menüs und Bildschirme* -- die GUI, Dokumente und Gestaltung.
. *Untertitel* -- und warum sie ein eigenes System sind.
. *Hinein in 3D* -- Szenen, Kameras und Koordinaten.
. *Modelle und Licht* -- glTF, Materialien und Animation.
. *Physik* -- Körper, Kräfte, Gelenke und wann man sie nicht benutzt.
. *Partikel* -- Emitter und eine Explosion bauen.
. *Figuren, die sich selbst bewegen* -- Navigation und Wegfindung.
. *Musik und MIDI* -- Spuren, SoundFonts und Instrumente.
. *Online* -- Konten, Highscore-Tabellen und der Katalog.
. *Daten aufbewahren* -- Datenbanken, Tabellen und die Fragen, die du ihnen stellst.
. *Ausliefern* -- Packen, Patchen, Lizenzen und die Veröffentlichung.
. *Im Automaten* -- Steuerung, Service-Menüs, Bezels und die Dinge, die nur
auf echter Hardware zählen.
include::lessons/01-hello.adoc[]
include::lessons/02-numbers.adoc[]
include::lessons/03-decisions.adoc[]
include::lessons/04-repeating.adoc[]
include::lessons/05-functions.adoc[]
include::lessons/06-tables.adoc[]
include::lessons/07-a-game.adoc[]
include::lessons/08-when-it-goes-wrong.adoc[]
include::lessons/09-pictures.adoc[]
include::lessons/10-sound.adoc[]
include::lessons/11-hitting-things.adoc[]
include::lessons/12-score.adoc[]
include::lessons/13-game-folder.adoc[]
include::lessons/14-video.adoc[]
include::lessons/15-threaded.adoc[]
include::lessons/16-branching.adoc[]
include::lessons/17-light-guns.adoc[]
include::lessons/18-qte.adoc[]
include::lessons/19-text.adoc[]
include::lessons/20-gui.adoc[]
include::lessons/21-subtitles.adoc[]
include::lessons/22-3d.adoc[]
include::lessons/23-models.adoc[]
include::lessons/24-physics.adoc[]
include::lessons/25-particles.adoc[]
include::lessons/26-navigation.adoc[]
include::lessons/27-midi.adoc[]
include::lessons/28-online.adoc[]
include::lessons/29-databases.adoc[]
include::lessons/30-shipping.adoc[]
include::lessons/31-cabinet.adoc[]