Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 4 Gewinnt: Siegerermittlung (https://www.delphipraxis.net/15949-4-gewinnt-siegerermittlung.html)

geisi 7. Feb 2004 13:02


4 Gewinnt: Siegerermittlung
 
Also, ich muss für die Schule ein 4 gewinnt-spiel programmieren:

Gib es einen besonderen Trick, um 4 gleiche Feldelemente in waagrechter, senkrechter und diagonalen richtung zu finden, oder muss ich dass alles mit if-abfragen durchforsten?

devnull 7. Feb 2004 13:07

Re: 4 Gewinnt: Siegerermittlung
 
Wie groß ist dein gesamtes Spielfeld (5 * 5 Spielfelder) ?

Ich hatte alle Spielsteine, die gesetzt wurden, in ein Array gespeichert und
diesen dann (bei der Ermittlung der waagrechten und senkrechten Spielsteine)
mit einer for - Schleife überprüft; bei den Diagonalen geht das auch, da hab
ichs aber mit einzelnen if-Abfragen gemacht.

Ich such mal die for-Schleifen raus ...

devnull

MikeS 7. Feb 2004 13:23

Re: 4 Gewinnt: Siegerermittlung
 
moin

habe ich jetzt zwar nicht weiter ausprobeirt, aber versuche doch das nach devnull
mit einem Array. Dann gibst du jedem farbstein bestimmte werte, so daß du dann nur noch die reihen
waagerecht, senkrecht und diagonal auf bestimmte summen überprüfen mußt und so weißt ob jemand gewonnen hat!

:gruebel:

ist glaube ich einfacher als wenn der gleich rot und der gleich rot und der gleich rot und der gleich rot dann
gewonnen.

du solltest dann natürlich berücksichtigen das die auch nebeneinander liegen!

p.s. ist nur so eine Idee!

geisi 7. Feb 2004 15:45

Re: 4 Gewinnt: Siegerermittlung
 
Ja, das hab ich schon so gemacht

Ich habe für einen Spielstein des Spieler 1 den wert 1 in das 2dimensionale Array geschreiben(Spieler2 wert2 und kein Spielstein hat den Wert 0);

Ich wollte nur wissen ob es einen trick gibt, um im array(7*7) herauszufinden, ob 4 gleiche spielsteine hintereinander lingen.

Jens Schumann 7. Feb 2004 16:19

Re: 4 Gewinnt: Siegerermittlung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Geisi,
ja es gibt einen sehr einfachen Trick.
Gehe von dem zuletzt gesetzten Stein in alle möglichen Richtungen
und zähle die gleichfarbigen. Bist Du bei vier ist das Spiel gewonnen.
Das wäre die Routine
Delphi-Quellcode:
function TForm1.Win2(Stone : TStone) : Boolean;
var
  iCnt      : Integer;
  aStone    : TStone;
  StoneCount : Integer;
begin
  For iCnt:=0 to 7 do // iteriere über die relativen Koordinaten
    begin
    aStone:=Stone; // Startpunkt merken
    StoneCount:=0;
    While aStone<>Nil do
      begin
      If aStone.Color=Stone.Color then // hat der Stein die gesuchte Farbe ?
        Inc(StoneCount)
         else
           Break; // neue Richtung einschlagen
      If StoneCount=4 then
        begin
        Result:=True;
        Exit;
        end; // If StoneCount=4 then
      aStone:=FStones[aStone.X+FRelCoords[iCnt].X,aStone.Y+FRelCoords[iCnt].Y];
      end; // While Stone<>Nil do
    end; // For iCnt:=0 to 7 do
end;
In das Anlage habe ich den Source kommentiert und ein kleines Beispiel zu gebastelt.
Nur für's Verständnis

MikeS 7. Feb 2004 17:13

Re: 4 Gewinnt: Siegerermittlung
 
Zitat:

Zitat von geisi
Ja, das hab ich schon so gemacht

Ich habe für einen Spielstein des Spieler 1 den wert 1 in das 2dimensionale Array geschreiben(Spieler2 wert2 und kein Spielstein hat den Wert 0);

Ich wollte nur wissen ob es einen trick gibt, um im array(7*7) herauszufinden, ob 4 gleiche spielsteine hintereinander lingen.

das meinte ich ja! wenn du den steinen schon bestimmte werte gibst dann kannst du doch auch durch geschickte berechnung der summen einer reihe herausfinden ob 4 gleiche steine nebeneinander liegen!

Jens Schumann 8. Feb 2004 12:05

Re: 4 Gewinnt: Siegerermittlung
 
Zitat:

Zitat von MikeS
das meinte ich ja! wenn du den steinen schon bestimmte werte gibst dann kannst du doch auch durch geschickte berechnung der summen einer reihe herausfinden ob 4 gleiche steine nebeneinander liegen!

Ich glaube nicht dass Du das meinst was ich vorgeschlagen habe.
Du hast vorgeschlagen mit For-Schleifen das Spielfeld senkrecht und waagerecht zu durchlaufen.

Das macht mein Vorschlag definitiv nicht.

Da jeder Stein seine Koordinaten kennt, kann sich der Algorithmus innerhalb des Array's von einem Stein zum nächsten Stein bewegen. Das wird durch die Addition der relativen Koordinaten aus TRelCoords erreicht. Dabei wird mitgezählt wieviel gleichartige Steine besucht wurden. Bei 4 besuchten gleichartigen Steinen ist das Spiel gewonnen. Ausgangspunkt für die Suche ist immer der zuletzt gesetzte Stein.

MikeS 8. Feb 2004 12:12

Re: 4 Gewinnt: Siegerermittlung
 
@Jens Schumann
mein letzer beitrag war nicht auf dich bezogen!

da ich geisi zitiert habe, dachte ich das es eindeutig ist das ich mich mit meiner nächsten
Äußerung auch auf ihn beziehe!

Ich wollte dir deinen gedanken keinesfalls streitig machen.
Es tut mir leid wenn das so rüber gekommen ist.

Jens Schumann 8. Feb 2004 12:14

Re: 4 Gewinnt: Siegerermittlung
 
Zitat:

Zitat von MikeS
da ich geisi zitiert habe, dachte ich das es eindeutig ist das ich mich mit meiner nächsten Äußerung auch auf ihn beziehe!

Habe ich übersehen.

DP-Maintenance 8. Feb 2004 13:59

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz