Zitat von
Hansa:
Da hat er zwar Recht, aaaber
soweit ich weiß werden die Karten im Quadrat angeordnet. Wird eine Anweisung gebraucht "drehe Karte in Reihe 2 Spalte 4 hoch", dann sollte man das 2-dimensional nachbilden.
Und was hat das mit einem zwei dimensionalen Array zu tun?
Delphi-Quellcode:
procedure TMemoryField.IniTMemoryField;
var
i : Integer;
Card : TCard;
begin
for i := 0 to FCountCards - 1 do
begin
Card := TCard.Create(nil);
Card.Parent := FParent;
Card.Font.Style := [fsBold];
Card.Font.Size := 14;
Card.OnFlip := OnFlip;
Card.Height := 50;
Card.Width := 50;
Card.Left := (Card.Width + FPadding) * (i div Trunc(sqrt(FCountCards)));
Card.Top := (Card.Height + FPadding) * (i mod Trunc(sqrt(FCountCards)));
if not Odd(i) then
Card.Value := i
else
Card.Value := i - 1;
Add(Card);
end;
end;
Und schon sind sie quadratisch angeordnet.
Zitat:
Allerdings wäre es tatsächlich nicht schlecht, wenn die Karte selber wüsste, ob sie schon umgedreht ist oder nicht, wie sie angezeigt wird usw. Also wirklich
OOP-mäßig. Was bietet sich da nun am besten an ? Wer hätte es gedacht ? Ein Stringgrid. Man könnte auch eine Stringliste nehmen, aber die hat keine bereits eingebauten Spalten und Zeilen. Die Funktion des Spiels kann man da ganz einfach in die Objects-Eigenschaft reinpacken.
Ich habe Panels genommen.
Lös dich endlich mal von deinem Zeilen und Spalten. Die sind für die Logik vollkommen unerheblich.
Ich habe es noch etwas ausgearbeitet. Ich werde es gleich hier vorstellen in der OpenSource-Sparte.