Diese Werte kannst du dir doch aus einer "virtuellen Zellen-ID" ableiten. Jedes Auto merkt sich seine ganz aktuelle ID, und über entsprechende Properties der Straßenklasse (die ja ihre Autos kennt) iterierst du dann drüber und ermittelst live den Wert.
So als Gerüst in etwa sowas:
Delphi-Quellcode:
type
TStrasse = class
private
FAutos: TList<TAuto>;
function GetIsCellFree(cellIndex: Integer): Boolean;
public
property IsCellFree[cellIndex: Integer]: Boolean read GetIsCellFree;
end;
implementation
TStrasse.GetIsCellFree(cellIndex: Integer): Boolean;
begin
result := true;
foreach a: TAuto in FAutos do
begin
if a.MyCurrentCellIndex = cellIndex then
begin
result := false;
Exit;
end;
end;
end;
Sieht von aussen aus wie ein Array über die (nicht existenten) Zellen, ist aber keines. Es spart das tatsächliche Modelieren der Zellen als eigene Daten, erzeugt aber natürlich Such-Overhead. Overhead hast du aber natürlich auch, an anderer Stelle und potenziell weniger, beim Mitführen separater Zellklassen, die ja auch bei jeder Bewegung ihre Inhalte neu berechnen müssen. Welche der Varianten in der Praxis mit weniger Verwaltung "hinter den Kulissen" auskommt vermag ich aber nicht ganz abzuschätzen gerade. Im Mittel könnte das ggf. sogar aufs gleiche rauskommen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)