hi,
ich würde in der function pruefen als erstes mal x mit dx bzw y mit dy vergleichen,
um raus zu bekommen, ob du die waagerechten, horizontalen oder diagonalen überprüfen musst.
dann natürlich die randwerte, also den ersten und letzten stein.
und an der spielfeldClick procedure würde ich auch nochmal was verändern.
Delphi-Quellcode:
if feld[spielfeld.Col, spielfeld.Row]=1 then // wieso 1, nimm doch rot
begin
dransein:=1; // bringt zwischen case dransein of rot: begin ... end; end; auch nicht sehr viel, wenn die konstante rot = 1 ist.
feld[spielfeld.Col, spielfeld.Row]:=1; // is doch überflüssig
end;
damit wäre dann die ganze abfrage mehr oder weniger überflüssig.
da das auch noch für den fall, dass dransein = blau ist vorkam,
konnte man den code deutlich vereinfachen.
statt deinen 28 zeilen wären es so nur 11;
Delphi-Quellcode:
if (feld[spielfeld.Col, spielfeld.Row] = 0) then
begin
feld[spielfeld.Col, spielfeld.Row] := dransein;
case dransein of
rot : dransein := blau;
blau: dransein := rot;
end;
spielfeld.Refresh;
end
else if (feld[spielfeld.Col, spielfeld.Row] <> dransein) then
Application.MessageBox('Das Feld ist schon belegt!', 'Fehler');