Hallo Hummer,
der folgene Code realisiert einen 4-Gewinnt Algorithmus
TRelCoords = Array[0..7] of TPoint;
FRelCoords : TRelCoords;
Delphi-Quellcode:
procedure TForm4Wins.FormCreate(Sender: TObject);
begin
FStones:=TStones.Create;
FRelCoords[0]:=Point(-1,-1); // LO
FRelCoords[1]:=Point(0,-1); // O
FRelCoords[2]:=Point(1,-1); // RO
FRelCoords[3]:=Point(1,0); // R
FRelCoords[4]:=Point(1,1); // RU
FRelCoords[5]:=Point(0,1); // U
FRelCoords[6]:=Point(-1,1); // LU
FRelCoords[7]:=Point(-1,0); // L
end;
Delphi-Quellcode:
function TForm4Wins.SearchForWin(Color : TColor) : Boolean;
var
X : Integer;
Y : Integer;
iCnt : Integer;
Cell : TAGRasterCell;
begin
For Y:=0 to Raster.Grid.RowCount-1 do // Durchlaufe alle Spalten
begin
For X:=0 to Raster.Grid.RowCount-1 do // Durchlaufe alle Zeile
begin
For iCnt:=0 to 7 do // Iteriere über TRelCoords
begin
FStoneCounter:=0;
Cell:=Raster.Grid.Cells[X,Y]; // hole die Zelle
// Die Cell.Data Eigenschaft zeigt auf den Spielstein
// Solange die Zelle nicht Nil und die Data Eigenschaft auf einen
// Spielstein zeigt durchlaufe die While-Schleife
While (Cell<>Nil) and (Cell.Data<>Nil) do
begin
If TStone(Cell.Data).Color=Color then // Het der Spielstein die passende Farbe
Inc(FStoneCounter) // Ja -> Zähler um eins erhöhen
else
Break; // Nein -> Schleife abbrechen
If FStoneCounter=4 then
begin
Result:=True;
Exit;
end; // If FStoneCounter=4 then
// Hole jetzt die nächte Zelle
// Jede Zelle der Raster-Komponente hat in den Eigenschaften X und Y
// ihre Koordinaten gespeichert. Um an die nächste Zelle zu kommen
// werden jetzt die relativen Koordinaten aus FRelCoords zu den
// Zellkoordinaten addiert. Dadurch erhält man eine Nachbarzelle
Cell:=Raster.Grid.Cells[Cell.X+FRelCoords[iCnt].X,Cell.Y+FRelCoords[iCnt].Y];
end; // While Cell<>Nil do
end; // For iCnt:=0 to 7 do
end; // For X:=0 to Raster.Grid.RowCount-1 do
end; // For Y:=0 to Raster.Grid.RowCount-1 do
end;
Raster ist eine Spielfeldrasterkomponente die ich mir mal gebastelt habe. (Siehe Anhang)
Die Sourcen und die Komponente sind im Anhang enthalten. Für die Komponente gibt es keine Dokumentation.
Nur ein Tip: Die Komponente hat die Eigenschaft SelectionMode. Wenn diese True ist, kann man durch drücken der linken Maustaste und ziehen der Maus Zellen selektieren. Mit Event OnSelection werden die selektierten Zellen im Parameter Selection übergeben. Nur Zellen, die vollständig erfasst wurden sind in Selection enthalten.