v0.9.9
Keine Treffer für diese Suche.
Ablauf & Konzept
Was ist eine API — und wie läuft ein Frame ab?
Was ist eine API?

API = Application Programming Interface. Du rufst Funktionen auf, ohne zu wissen, wie sie intern funktionieren — wie ein Fernseher mit Fernbedienung. Beispielsweise liefert getFuel() den aktuellen Treibstoffstand, und setGravity(0.05) macht die Schwerkraft sanfter — ohne dass du die Physik dahinter kennst.

Das Spiel läuft in einer Schleife. Klicke auf eine Box im Diagramm für eine Erklärung mit Beispielcode.
Ablauf in jedem Frame — klick auf eine Box für mehr Info

Das Spiel läuft in einer Schleife. Pro Frame passieren diese Dinge in dieser Reihenfolge. Klicke auf eine Box, um eine Erklärung mit Beispiel zu sehen.

init(keyHandler) WHILE IS_RUNNING updateFunction() falls gesetzt tick() Physik · Position · Grenzen render() Terrain · Lander · HUD · repaint checkLanding() gelandet / Absturz? gameEndFunction() falls gesetzt delay(delayMs) Spielende Update-Hook setUpdateFunction() Custom Drawer setCustomDrawer() GameEnd-Hook setGameEndFunction() Tastaturevent keyHandler(code) ESC = Abbruch
Blaue Boxen = Deine Hooks

Diese Funktionen kannst du einsetzen. Du schreibst sie, die Engine ruft sie auf.

Gestrichelte Linie = intern

Physik und Rendering laufen automatisch — tick() und render() rufst du nie selbst auf.

Spielstart
Das Spiel initialisieren und starten
init(keyHandler=None)
Spielfenster öffnen und Tastatur-Funktion anmelden
ACTION
setStartupMessage(show)
Versionsmeldung beim Start ein- oder ausschalten
SET
start()
Spielschleife starten — blockiert bis Spielende
ACTION
restart()
Spielzustand zurücksetzen ohne neues Fenster
ACTION
Steuerung
Lander beschleunigen — typischerweise im keyHandler aufgerufen
thrust()
Triebwerk zünden — Schub nach oben. Kostet 5 Treibstoff.
ACTION
moveLeft()
Horizontalschub nach links. Kostet 2 Treibstoff.
ACTION
moveRight()
Horizontalschub nach rechts. Kostet 2 Treibstoff.
ACTION
Zustand abfragen
Aktuelle Spielwerte auslesen — in updateFunction und keyHandler verfügbar
getHeight() → float
Höhe der Kollisions-Probe über dem Terrain
GET
getVSpeed() → float
Vertikalgeschwindigkeit — positiv = fällt
GET
getHSpeed() → float
Horizontalgeschwindigkeit — negativ = links
GET
getFuel() → int
Verbleibender Treibstoff (0–200)
GET
getX() → float
Horizontale Position (0 = Mitte)
GET
isOverLandingZone() → bool
True wenn Lander über einem Landeplatz ist
GET
hasLanded() / hasCrashed() → bool
Ergebnis nach Spielende auslesen
GET
isRunning() → bool
True solange Spielschleife läuft
GET
getTerrainHeight(xPosition) → float
Terrain-Höhe (Weltkoordinate) an einer x-Position
GET
getFrameTime() → float
Dauer des letzten Frames in Millisekunden
GET
getStartPosition() → (float, float)
Startposition als Tupel (x, y) abfragen
GET
Pause
Spielschleife anhalten und fortsetzen
pauseGame() / resumeGame() / togglePause()
Pause ein- und ausschalten
ACTION
isPaused() → bool
True wenn das Spiel pausiert ist
GET
Hooks / Callbacks
Eigene Funktionen bei der Engine anmelden — vor init() aufrufen
setUpdateFunction(updateFunction)
Funktion anmelden, die jeden Frame vor der Physik aufgerufen wird
HOOK
setCustomDrawer(drawFunction)
Eigene Lander-Zeichenfunktion anmelden — ersetzt Standard-Lander
HOOK
setGameEndFunction(gameEndFunction)
Zusätzliche Endbedingung anmelden — True = Spiel endet sofort
HOOK
🌑
Fenster & Spielwelt
Fenstergröße, Terrain, Landezonen und Startposition konfigurieren
setWindowSize(width, height)
Spielfenstergröße setzen — das Fenster ist die gesamte Spielfläche
SET
getWindowSize() → (int, int)
Aktuelle Fenstergröße als (width, height) abfragen
GET
setTerrain(newTerrainHeights)
Geländeprofil als Höhenliste setzen (mind. 8 Werte)
SET
setLandingZone(startIndex, endIndex)
Einen Landeplatz als Terrain-Index-Bereich setzen
SET
setLandingZones(newLandingZones)
Mehrere Landeplätze auf einmal setzen
SET
getLandingZones() → list
Aktuelle Landezonen als Liste abfragen
GET
setStartPosition(newStartX, newStartY)
Startposition des Landers festlegen — bleibt bei restart()
SET
setGroundLevel(newGroundLevel) / getGroundLevel()
Grundlinie des Terrains setzen/abfragen
SET
setFuel(fuelAmount)
Startmenge des Treibstoffs setzen
SET
Lander
Aussehen, Größe und Ausrichtung des Standard-Landers anpassen
setLanderColor(newLanderColor)
Farbe des Standard-Landers setzen
SET
setLanderSize(newLanderSize) / getLanderSize()
Kantenlänge des Standard-Landers setzen/abfragen
SET
setScale(newScaleFactor) / getScale()
Lander-Zeichnung skalieren
SET
setRotation(angleDegrees) / getRotation()
Lander-Zeichnung drehen (Grad)
SET
Physik & Timing
Schwerkraft, Schubkraft, Geschwindigkeiten und Frame-Timing
setGravity(newGravityValue) / getGravity()
Schwerkraftstärke setzen/abfragen
SET
setDelay(newDelayMs) / getDelay()
Wartezeit am Ende jedes Frames (= Gesamttempo)
SET
setSmoothFactor(newSmoothFactor) / getSmoothFactor()
Stärke der Physikänderung pro Frame — nicht das Gesamttempo
SET
setThrustPower(newThrustPowerValue) / getThrustPower()
Schubkraft des Haupttriebwerks
SET
setSideThrust(newSideThrustValue) / getSideThrust()
Seitliche Schubkraft
SET
setMaxVerticalLandingSpeed(newMax) / getMaxVerticalLandingSpeed()
Max. Vertikalgeschwindigkeit für erfolgreiche Landung
SET
setMaxHorizontalLandingSpeed(newMax) / getMaxHorizontalLandingSpeed()
Max. Horizontalgeschwindigkeit für erfolgreiche Landung
SET
HUD
Heads-Up-Display im Spielfenster konfigurieren
setHudItems(itemListe)
Anzuzeigende HUD-Elemente als Liste setzen
SET
setHudFontSize(groesse) / getHudFontSize()
Schriftgröße der HUD-Anzeige setzen/abfragen
SET
setHudPosition(abstandLinks, abstandOben) / getHudPosition()
Position der HUD-Anzeige im Spielfeld
SET
Custom Drawer
Turtle-Zeichenbefehle — nur innerhalb der mit setCustomDrawer angemeldeten Funktion
ABSOLUT vs. RELATIV ZEICHNEN

Im Custom Drawer gibt es zwei Arten zu zeichnen:

✓ EMPFOHLEN — absolut
Koordinaten direkt angeben. setPos(x,y) und moveTo(x,y) — du siehst sofort welcher Punkt wo liegt.
penUp(); setPos(0, 15)   # Spitze oben
penDown()
moveTo(-18, -15)          # unten links
moveTo(18, -15)           # unten rechts
moveTo(0, 15)             # Dreieck schließen
penUp()
⚠ VORSICHT — relativ
forward(), left(), right() — funktionieren, aber die Winkelkonvention unterscheidet sich vom Schulunterricht. 0° = oben (nicht rechts!), Uhrzeigersinn. Das führt leicht zu gespiegelten oder gedrehten Formen.
(0,0) +X +Y –X –Y oben-links oben-rechts unten-links unten-rechts (0,15) (–18,–15) (18,–15) 90° 180° 270° Heading

Lander-Koordinatensystem — Mitte = (0,0)
Pink = Dreieck mit moveTo()

penUp() / penDown()
Stift heben (keine Linie) / absetzen (Linie zeichnen)
DRAW
setPenColor(penColor)
Stiftfarbe setzen — Farbname als String
DRAW
setPenWidth(penWidth)
Stiftbreite setzen (Integer ≥ 1, skaliert mit scaleFactor)
DRAW
setHeading(headingAngle)
Blickrichtung der Turtle setzen
DRAW
forward(stepLength) / back(stepLength)
In Blickrichtung vorwärts/rückwärts (zeichnet wenn penDown)
DRAW
left(turnAngle) / right(turnAngle)
Turtle nach links / rechts drehen (Grad)
DRAW
dot(dotSize)
Ausgefüllten Kreis an der aktuellen Position zeichnen
DRAW
setPos(localX, localY) / moveTo(localX, localY)
Turtle teleportieren / mit Linie bewegen (relativ zur Lander-Mitte)
DRAW
Kollisions-Probe
Den Auftreffpunkt des Landers definieren und sichtbar machen
setCollisionProbe(north, east, south, west)
Kollisionspunkt relativ zur Lander-Mitte definieren
SET
getCollisionProbe() / getCollisionX() / getCollisionY()
Probe-Offsets und Weltkoordinaten abfragen
GET
setShowCollisionProbe(showProbe) / getShowCollisionProbe()
Kollisions-Probe als Punkt einblenden (Debug)
DEBUG
setCollisionProbeStyle(probeColor, probeSize) / getCollisionProbeStyle()
Farbe und Größe des Probe-Punktes anpassen
DEBUG
Debug & Playfield
Optionales inneres Spielfeld einblenden — standardmäßig deaktiviert
v0.9.5: Das schwarze Fenster ist die gesamte Spielfläche. Ein Playfield ist optional und hat standardmäßig Margin 0 — es deckt sich mit dem Fenster. Der frühere "World Border" existiert nicht mehr.
setShowInnerPlayfieldBorder(showBorder) / getShowInnerPlayfieldBorder()
Inneren Spielfeldrahmen einblenden (Debug)
DEBUG
setInnerPlayfieldBorderStyle(borderColor, borderWidth) / getInnerPlayfieldBorderStyle()
Farbe und Breite des Playfield-Rahmens
DEBUG
setPlayfieldMargin(top, right, bottom, left) / getPlayfieldMargin()
Abstand des Playfields zum Fensterrand setzen
SET
Tastatur
Abbruch-Taste konfigurieren
setAbortKeyCode(newAbortKeyCode) / getAbortKeyCode()
Taste festlegen, die das Spiel sofort beendet
SET