Ist schon da: TFahrzeug mit V als aktuelle Geschwindigkeit, aktuelle Position (Nr. der Zelle), VMax, Trödelwahrscheinlichkeit und den Methoden Beschleunigen und Bremsen.
Und fahren()! Das tut das Auto ja auch selbst.
Zitat:
Meine TStrasse erzeugt am Anfang sagen wir 10 Fahrzeuge
Das ist eigentlich nicht Aufgabe der Straße. Die Straße sollte von Außen die Autos bekommen (DependencyInjection) und vielleicht noch ein AddCar(car: TCar) oder so haben.
Zitat:
1. Anz freier Zellen zum Vordermann
Brauchst du erstmal nicht berechnen. Das passiert im "Bremsen"-Schritt.
Zitat:
Mein Problem: Nehmen wir an, ich möchte eine Strecke von 30 Kilometern simulieren. Jedes Strassen-Segment (Zelle) ist 7,5 m lang (es passt genau ein Fahrzeug rein) -- das hiesse 30.000 m / 7,5 m = 4000 Strassen-Segmente. Wo taucht jetzt diese 40000 auf, wenn ich die Zellen selbst nicht modeliere?
Implizit über die Position der Autos. Und du kannst ja die Autos von der Straße entfernen, wenn die 4000 überschritten sind. Also TRoad.OnCarLeaving oder sowas.
Zitat:
Ich hoffe meine Frage ist klar geworden: Ja, Zellen selbst nicht modellieren ist gut -- aber so ganz geht das doch nicht. Ich denke immer noch, ich bräuchte ein Array mit diesen Zellen. Jede dieser Zellen kann drei verschiedene Werte annehmen: 0 = frei, 1 = Auto steht, 2 Auto fährt mit V.
Du brauchst das gar nicht. Die Autos müssen nur ihren Vordermann kennen. Wie lang die Straße ist, wie viele Autos noch da sind und was die tun ist denen doch egal.
Zitat:
So als Gerüst in etwa sowas:
Das geht, aber wie gesagt: eigentlich ist die Info gar nicht nötig. Und sie beraubt einem der Optimierungsmöglichkeiten. Wenn es nämlich - so wie ich oben vorgeschlagen hatte - nur eine Methode getNextCar() gibt, die einfach den Vordermann ausspuckt, ist es egal wie das implementiert wird. Man kann da schön optimieren. Beispielsweise ne HashMap nehmen, was den linearen in konstanten Aufwand verwandeln würde. Man könnte auch über verkettete Listen oder sowas nachdenken... Möglichkeiten gibts da viele. Wenn aber über die Array-Property zugegriffen wird, hat man kaum ne andere Wahl als die hier gezeigte. Nur mal so als Denkanstoß...
mfg
Christian