![]() |
"Reihen" auf Spielfeld finden
Hi,
ein weiteres Problem ( ![]() 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. |
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 |
Re: "Reihen" auf Spielfeld finden
HiHo,
Du suchst zuerst nach vertikalen Reihen. Dazu gehst du spaltenweise
Delphi-Quellcode:
vor. Anschließend prüfst du, ob Reihen existieren. À la:
For ACol := 0 to StingGrid.ColCount -1 do
Delphi-Quellcode:
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
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;
Delphi-Quellcode:
oder entsprechenden Klassen arbeiten. Letzteres ist natürlich viel mehr schikkimikki! :warn:
TSchlange = record
Laenge :Integer; StartPosX :Integer; StartPosY :Integer: end; 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 |
Re: "Reihen" auf Spielfeld finden
Delphi-Quellcode:
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.
TSchlange = record
Laenge :Integer; StartPosX :Integer; StartPosY :Integer: end; |
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? |
Re: "Reihen" auf Spielfeld finden
Zitat:
|
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. |
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