AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

4-Gewinnt

Ein Thema von hummer · begonnen am 14. Jun 2003 · letzter Beitrag vom 15. Jun 2003
Antwort Antwort
Benutzerbild von hummer
hummer

Registriert seit: 27. Mai 2003
Ort: Hattingen
437 Beiträge
 
Delphi 7 Enterprise
 
#1

4-Gewinnt

  Alt 14. Jun 2003, 13:45
Hallo
Ich möchte das Spiel 4-Gewinnt programmieren, aber ich habe einfach keine Ahnung wie ich den Algorithmus schreiben soll, der erkennt, wann sich 4 Felder einer Farbe waagerecht, senkrecht oder diagonal hintereinander befinden und dann das Spiel beendet.

Vielleicht kann mir da einer mal nen Tipp geben, der schon so nen Algorithmus programmiert hat.

Vielen Dank schon im Vorraus.
Manuel
unser Infolehrer -> Wissen ist Macht. Wir wissen nichts. Macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#2
  Alt 14. Jun 2003, 13:51
Ich hab so was zwar noch nicht gemacht, aber ich denke, du müsstest einfach die ganzen Felder durchnummerieren. Wenn sich der Inhalt eines Feldes ändern (also wenn ein Stein eingeworfen wird), müsstest du schrittweise in alle Richtungen überprüfen, ob die Farbe des nächsten Steins auch die Farbe des aktuellen Feldes hat. Wenn das der Fall ist, kannst du das nächst eüberprüfen und wenn das wieder mit dem aktuellen übereinstimmt, das nächste. Falls nicht, müsstest du das ganze dann in die andere Richtung machen.

Hoffe dasdas irgendwer verstanden hat
Man liest sich, Stanlay
  Mit Zitat antworten Zitat
Benutzerbild von hummer
hummer

Registriert seit: 27. Mai 2003
Ort: Hattingen
437 Beiträge
 
Delphi 7 Enterprise
 
#3
  Alt 14. Jun 2003, 14:10
Danke,
ich werd das mal ausprobieren.
Manuel
unser Infolehrer -> Wissen ist Macht. Wir wissen nichts. Macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#4
  Alt 15. Jun 2003, 17:16
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.
Angehängte Dateien
Dateityp: zip viergewinnt_126.zip (234,0 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz