Verkehrssimulation in Pizza Tycoon: Flüssig bei 25 MHz
In Pizza Tycoon wird der Verkehr mit einem einfachen System abgewickelt, das auf einem 386-Prozessor mit 25 MHz läuft. Jedes Fahrzeug bewegt sich einen Pixel pro Spiel-Tick. Die Hauptschleife prüft Hindernisse und passt Koordinaten an: +1 zur X-Achse bei Ostfahrt, -1 zur Y-Achse bei Nordfahrt.
Der progress-Zähler zählt von 16 runter auf 0. Bei Null wird er auf 16 zurückgesetzt und löst die Kachelgrenzlogik aus: Richtung wählen und Sprite aktualisieren. 16x16-Pixel-Kacheln halten alles synchron – aufwendige Berechnungen passieren 16-mal seltener als Pixel-für-Pixel-Bewegungen.
Beim Spawn wird progress zufällig (1–16) gesetzt, um die Last über Frames zu verteilen.
Straßenlayout und Fahrtrichtungsregeln
Karten sind ein 160x120-Gitter aus Kacheln der Datei landsym.vga. Straßen sind einbahnig: Kachel 0x16 führt ostwärts, 0x06 westwärts, 0x26/0x36 für vertikale Wege.
Ecken erlauben Verzweigungen. Kachel 0x56 (CORNER_SW) lässt west- oder südwärts fahren. Wahl: 50 % Abbiegen/Geradeaus. Verbot zweier Linkskurven hintereinander sorgt für Natürlichkeit.
Karten sind logisch gestaltet – benachbarte Kacheln erlauben immer gültige Wege.
- Gerade Kacheln: Feste Richtung.
- Ecken: Wahrscheinliche Wahl mit Anti-Schleifen.
- T/X-Kreuzungen: Eckkombinationen.
Kollisionen durch Paarweise Prüfungen
O(n²) für 25 Fahrzeuge bedeutet 625 Prüfungen pro Frame. Optimierung: Frühes Aussteigen nach Richtung. Ost+West-Paare werden ohne Koordinatenprüfung abgebrochen, da Einbahnstraßen Frontalzusammenstöße verhindern.
Prüfungen:
- Richtungen (halbiert die Paare).
- Spur (gleiche Straße).
- Koordinatenrechnung (selten, <10 Paare).
Kollision → Pause 10 Ticks. Staus lösen sich natürlich: Führfahrzeug bewegt sich zuerst.
Bugs (Durchdringen) sind Nebenwirkung der Optimierungen, akzeptabel für visuelle Simulation.
Fahrzeug-Spawning und Recycling
Beim Betreten des Straßenszenenmodus: Scannen von 132 Kacheln (12x11). Bei Straßen Würfeln basierend auf Nachbarschaftsdichte. Ecken ausgeschlossen.
Beim Verlassen des Bildschirms: Ersetze durch neues Fahrzeug in Gegenrichtung/Farbe auf gleicher Kachel. Scrollen behandelt neue Spuren ähnlich.
// Spawn-Pseudocode
for each road_tile in viewport:
if random(traffic_density) > threshold:
spawn_car(tile, random_direction, random_progress)
Assembly-Analyse und moderne Fallstricke
Der Pizza-Legacy-Autor verbrachte 14 Jahre mit übertriebenen Graphen, A* und Kollisionen. Original ist simpler: Kacheln diktieren Pfade, keine Physik/Geschwindigkeiten.
Assembly-Analyse + KI offenbarten die Mechanik. Restaurierung: Switch in decide_desired_direction (Car.cpp) nach Kacheltypen.
| Ansatz | Komplexität | Effizienz |
|-----------|-------------|--------------------|
| Original | Einfache Regeln | 25 MHz, 30 Fahrzeuge |
| Modern | Graphen, Physik | Deadlocks auf 2010+ CPUs |
Wichtige Erkenntnisse
- Einbahnkacheln machen Pfadsuche überflüssig.
- Frühe Kollisionsausstiege minimieren Schleifen.
- Pixel-für-Pixel-Bewegung + seltene Updates = geringe CPU-Last.
- Wahrscheinliche Abbiege + Anti-Schleifen = Realismus ohne KI.
- Fahrzeug-Recycling spart Listenmanagement.
— Editorial Team
Noch keine Kommentare.