2‑Spieler Racing in Scratch – WASD & Pfeiltasten

Komplettes Mini‑Handbuch im gleichen Stil: Zwei Autos, getrennte Steuerung, Runden‑Logik mit Anti‑Cheat, Crash‑Regeln und fairem Reset.

🔎 Überblick

Ziel

  • Zwei Spieler fahren auf derselben Strecke (Top‑Down‑Ansicht).
  • Wer zuerst 3 Runden korrekt beendet, gewinnt.
  • Abkürzen gilt nicht: Mittel‑Checkpoint nötig.

Steuerung

  • Auto 1: WASD (W=Gas, S=Bremse, A/D=Lenken)
  • Auto 2: Pfeiltasten (↑=Gas, ↓=Bremse, ←/→=Lenken)
  • Optional: Handbremse (Shift / Strg) als kurzer Drift‑Boost

Tipp: Zeichne Ziellinie und Mittel‑Linie als separate Sprites. Wähle klare Farben für Straße (Grau) und Offroad (Grün).

🧱 Variablen & Nachrichten

Pro Auto

SPEED_P1 LAP_P1 MID_P1 LAPTIME_P1
SPEED_P2 LAP_P2 MID_P2 LAPTIME_P2

Global

BEST_P1 BEST_P2 RACE_ON COUNTDOWN
StartRace LapDone_P1 LapDone_P2

🏁 Start & Countdown

Logik

  1. Beide Autos auf Startposition, Richtung zur Strecke.
  2. 3‑2‑1‑Go! – erst dann RACE_ON=1, Timer starten.

Pseudoblöcke

[Wenn grüne Flagge angeklickt]
setze [RACE_ON v] auf (0)
setze [COUNTDOWN v] auf (3)
setze [LAP_P1 v] auf (0) // ebenso P2
setze [BEST_P1 v] auf (0) // ebenso P2
positioniere Autos auf Start
wiederhole bis <(COUNTDOWN) = (0)>
  warte (1) Sek.; ändere [COUNTDOWN v] um (-1)
ende
setze [RACE_ON v] auf (1)
sende [StartRace v]

🎮 Steuerung & Physik

Auto 1 (WASD)

// Sprite: CAR_P1
[Wenn ich empfange (StartRace)] setze [SPEED_P1 v] auf (0)
immer
  wenn <Taste [w] gedrückt?> dann ändere [SPEED_P1 v] um (0.5)
  wenn <Taste [s] gedrückt?> dann ändere [SPEED_P1 v] um (-0.25)
  wenn <(SPEED_P1) > (0)> dann
    wenn <Taste [a] gedrückt?> drehe dich um (-4) Grad
    wenn <Taste [d] gedrückt?> drehe dich um (4) Grad
  ende
  setze [SPEED_P1 v] auf ((SPEED_P1) * (0.95)) // Reibung
  wenn <berührt Farbe [#2E7D32]?> dann setze [SPEED_P1 v] auf ((SPEED_P1) * (0.8))
  gehe (SPEED_P1) er Schritt(e)
end

Auto 2 (Pfeiltasten)

// Sprite: CAR_P2
[Wenn ich empfange (StartRace)] setze [SPEED_P2 v] auf (0)
immer
  wenn <Taste [Pfeil nach oben] gedrückt?> dann ändere [SPEED_P2 v] um (0.5)
  wenn <Taste [Pfeil nach unten] gedrückt?> dann ändere [SPEED_P2 v] um (-0.25)
  wenn <(SPEED_P2) > (0)> dann
    wenn <Taste [Pfeil nach links] gedrückt?> drehe dich um (-4) Grad
    wenn <Taste [Pfeil nach rechts] gedrückt?> drehe dich um (4) Grad
  ende
  setze [SPEED_P2 v] auf ((SPEED_P2) * (0.95))
  wenn <berührt Farbe [#2E7D32]?> dann setze [SPEED_P2 v] auf ((SPEED_P2) * (0.8))
  gehe (SPEED_P2) er Schritt(e)
end

Passe die Werte 0.5/−0.25/0.95/0.8 an deine Strecken‑Geometrie an (Grip, Bremse, Reibung, Offroad‑Faktor).

⏱️ Runden‑Logik mit Anti‑Cheat

Prinzip

  1. Mittel‑Linie setzt MID_P1/MID_P2 auf 1.
  2. Ziellinie zählt Runde nur, wenn MID=1 war.
  3. LAPTIME je Auto hochzählen; BEST aktualisieren, wenn schneller.

Pseudoblöcke

// Sprite: MIDLINE
immer
  wenn <berührt [CAR_P1 v]?> dann setze [MID_P1 v] auf (1)
  wenn <berührt [CAR_P2 v]?> dann setze [MID_P2 v] auf (1)
end

// Sprite: FINISH
immer
  wenn <berührt [CAR_P1 v]?> dann
    wenn <(MID_P1) = (1)> dann
      ändere [LAP_P1 v] um (1)
      wenn <(BEST_P1) = (0) oder (LAPTIME_P1) < (BEST_P1)> dann setze [BEST_P1 v] auf (LAPTIME_P1)
      sende [LapDone_P1 v]
      setze [LAPTIME_P1 v] auf (0); setze [MID_P1 v] auf (0)
    ende
  ende
  // analog für CAR_P2
end

// Szene: Timer
immer wenn <(RACE_ON) = (1)> dann
  ändere [LAPTIME_P1 v] um (0.02)
  ändere [LAPTIME_P2 v] um (0.02)
  warte (0.02) Sek.
end

💥 Kollisionen & Fair‑Play

// Beispiel Auto‑Kontakt (im jeweiligen Auto)
wenn <berührt [CAR_P2 v]?> dann
  setze [SPEED_P1 v] auf ((SPEED_P1) * (0.6))
  drehe dich um (zufällig von (-12) bis (12)) Grad
end

🖥️ HUD & Reset

// Reset (Szene)
wenn Taste [r] gedrückt? dann
  sende [Reset v]
end

// Auto bei Reset
[Wenn ich empfange (Reset)]
  gehe zu Start; setze [SPEED_* v] auf (0); setze [MID_* v] auf (0)

✅ Test‑Checkliste

🧰 Häufige Fehler & Fixes

🚀 Erweiterungen