Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "Reihen" auf Spielfeld finden (https://www.delphipraxis.net/50732-reihen-auf-spielfeld-finden.html)

Yheeky 30. Jul 2005 18:11


"Reihen" auf Spielfeld finden
 
Hi,

ein weiteres Problem (Anderes Problem siehe hier).
Das Spielfeld ist nach wie vor 10x10 groß. Meine Aufgabe ist nun "Reihen" im Spielfeld zu erkennen.

Beispiel:

0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0
0 0 0 0 0 0 2 0 0 0
0 0 0 0 0 0 2 0 0 0
0 0 0 0 0 0 2 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 3 0 0 0 0 0 0
0 0 3 3 3 0 0 0 0 0
0 0 0 3 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

Dies ist nur eine Veranschaulichung, um die Reihen deutlich zu machen. Bei mir gibt es natürlich auch einzelne Zahlen, was eben keiner Reihe enspricht.
Wie würdet ihr das anstellen (gerade bei den 3en)? Würdet ihr mit for-Schleifen oder while...do arbeiten? Mein erster Versuch funktioniert zwar bisher, aber ist sehr umfangreich und ich bin nicht wirklich zufrieden. Ich verwende sehr viele Variablen, was natürlich Speicher belegt.

arnold mueller 30. Jul 2005 18:26

Re: "Reihen" auf Spielfeld finden
 
Im ersten Durchlauf von links nach rechts und oben nach unten,
und im zweiten Durchlauf von Oben nach unten und links nach rechts.

For oder While Schleife ist doch egal, oder? Halt in zwei Schleifen ...

Bye,
Arno

hanselmansel 30. Jul 2005 18:38

Re: "Reihen" auf Spielfeld finden
 
HiHo,

Du suchst zuerst nach vertikalen Reihen. Dazu gehst du spaltenweise
Delphi-Quellcode:
For ACol := 0 to StingGrid.ColCount -1 do
vor. Anschließend prüfst du, ob Reihen existieren. À la:
Delphi-Quellcode:
var
  SchlangenV : Array of Integer;
  SchlangenIndex :Integer;
  Vergleich : String;

begin
SchlangenIndex := 0;
Vergleich := StringGrid.Cells[ACol,0];
For ARow := 1 to StingGrid.RowCount -1 do
  Begin
  If StingGrid.Cells[ACol, ARow] = Vergleich then
    Inc(SchlangenV[SchlangenIndex]);
  // Bei neuer Schlange SchlangenIndex erhöhen
  End;
Den "SchlangenIndex" müsstest du dann erhöhen, wenn das aktuelle Zeichen verschieden zur letzten Schlange ist. Irgendwie bekommst du dann in dem Array die Längen heraus. Wenn du natürlich noch Anfangspositionen der Schlangen suchst, solltest du mit strukturierten Datentypen
Delphi-Quellcode:
TSchlange = record
  Laenge :Integer;
  StartPosX :Integer;
  StartPosY :Integer:
end;
oder entsprechenden Klassen arbeiten. Letzteres ist natürlich viel mehr schikkimikki! :warn:

Was noch zu sagen wäre ist, dass der Code absolut nicht geprüft, unvollständig und dazu noch falsch formatiert ist, er soll aber eine grobe Überlegungsrichtung angeben.

Um deine Frage mit einem Wort zu beantworten: FOR-Schleifen

Hoffe, ich war mehr konstruktiv denn destruktiv.

MfG,

hanselmansel

Yheeky 30. Jul 2005 20:25

Re: "Reihen" auf Spielfeld finden
 
Delphi-Quellcode:
TSchlange = record
  Laenge :Integer;
  StartPosX :Integer;
  StartPosY :Integer:
end;
Mhmm, das funtkioniert aber nur richtig, wenn ich weiss, wielange die Schlange ist. Sonst muss ich die Daten ja im Nachhinein eintragen, dann geht das auch über eine einfache Funktion. Im Ansatz hast du mir nun aber weitergeholfen. Ich weiss nun, wo ich ansetzen muss. Danke.

Yheeky 31. Jul 2005 22:31

Re: "Reihen" auf Spielfeld finden
 
Bei horizontalen und vertikalen Reihen habe ich keine Schwierigkeiten mehr. Nun kommt es zu weiteren Mustern. Wie kann ich nun diese Muster erkennen. Hier 2 Beispiele:

1.Beispiel:

0 0 1 0 0 1 0 0
0 0 1 0 0 1 0 0
0 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0

2.Beispiel:
0 0 1 0 0 1 0 0
0 0 1 0 0 2 0 0
0 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0

Das 2.Beispiel soll er nicht als Muster erkennen, weil die Kette ja zerbrochen wurde. Wie kann ich das verwirklichen?

Mystic 1. Aug 2005 00:33

Re: "Reihen" auf Spielfeld finden
 
Zitat:

Zitat von Yheeky
Das 2.Beispiel soll er nicht als Muster erkennen, weil die Kette ja zerbrochen wurde. Wie kann ich das verwirklichen?

Die 2 nicht als 1 behandeln.

Yheeky 1. Aug 2005 11:26

Re: "Reihen" auf Spielfeld finden
 
Du wirst es nicht glauben, aber genau diese Idee hatte ich auch schon ;)
Die Frage ist nun, wie ich das verwirkliche.

hanselmansel 4. Aug 2005 10:47

Re: "Reihen" auf Spielfeld finden
 
Damit wir dir mit unqualifizierten Ratschlägen zur Seite stehen können, sollten wir etwas über deine Cource erfahren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 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