ich hatte gedacht, die Würfel könnte man einfach als array oder Bool machen. Das was du da geschrieben hast, muss ich morgen mal in Ruhe nachvollziehen. Danke jedenfalls schon mal!
Die Würfel sind doch die Elemente, die andere Würfel/Klötze daran hindern auf dem Feld abgelegt zu werden. Und in der Realität passiert doch auch genau diese Interaktion zwischen den Würfeln. Darum würde ich die auch so mit in das Modell hineinnehmen. Und die Aufgabe ist quasi gelöst, wenn der Würfel seine Koordinaten im Feld bestimmen kann.
Kommst du mit einem neuen Klotz und einer gewünschten Position und Lage, dann fragst du für jeden Würfel die Koordinate zu dieser Position und Lage ab und fragst das Feld, ob alle diese Koordinaten noch frei sind.
Delphi-Quellcode:
function TKlotz.KannAnPosition( AFeld : TFeld; AIndex : Integer; ALage : TLage ) : Boolean;
begin
for LWürfel in Würfel do
if AFeld.IstZelleBelegt( LWürfel.GetKoordinate( AIndex, ALage ) ) then
Exit( False );
Result := True;
end;
Man braucht also eigentlich nur eine kleine Funktion im Würfel, der Rest ist geschicktes Abfragen dieser Funktion
PS: Anstatt der Koordinate vom Typ TPoint reicht es allerdings auch aus einfach einen Integer-Wert zurückzugeben 0..24 dadurch wird auch die Berechnung einfacher, schneller und auch der Vergleich insgesamt schneller.