Kojote Geschrieben 21. September 2017 Melden Share Geschrieben 21. September 2017 Grüße! Ich sitze nun schon seit Tagen immer wieder an einem Problem und mir fällt keine Lösung ein. Ich bastel an einem kleinen Knobelspiel, bei dem man Zahlen eingeben werden. In dem Raster, ähnlich wie bei Sudoku, dürfen keine doppelten Zahlen vorkommen. Um abzufragen, ob doppelte Zahlen im Spiel sind, nutze ich diese Schleife: Array.Copy(zahlenArray, loesungZahlenArray, zahlenArray.Length); int doppelteInZahlen = 0; for (int i = 0; i < zahlenArray.Length - 1; i++) { for (int j = i + 1; j < loesungZahlenArray.Length; j++) { if (zahlenArray[i] == loesungZahlenArray[j]) { doppelteInZahlen++; } } } Falls doppelte Zahlen vorkommen, wird meine Variable "doppelteInZahlen" mir das verraten. So, nun wollte ich dem Spieler eine Hilfe geben und diejenigen Zahlen farblich markieren, die doppelt sind und bin nun so weit: Array.Copy(zahlenArray, loesungZahlenArray, zahlenArray.Length); int doppelteInZahlen = 0; for (int i = 0; i < zahlenArray.Length - 1; i++) { for (int j = i + 1; j < loesungZahlenArray.Length; j++) { if (zahlenArray[i] == loesungZahlenArray[j]) { doppelteInZahlen++; if (hauptsteuerung.einstellungZahlHilfe == 1) { if (zahlenSperre[i] == false) { zahlenTextArray[i].color = new Color32(232, 0, 0, 255); } if (zahlenSperre[j] == false) { zahlenTextArray[j].color = new Color32(232, 0, 0, 255); } } } } } Falls nun zahlen doppelt sind, werden diese markiert. So weit so gut, jedoch, wenn sich die Zahlen ändern, wird der Spieler an den Punkt kommen, wo es keine doppelten Zahlen mehr gibt, also muss die Markierung die ich angebracht habe, wieder verschwinden. Problem ist nun, ich kann ja nicht einfach sagen, wenn zahlenArray != loesungsZahlenArray dann Farbe ändern. Das berücksichtigt viele Möglichkeiten nicht. Ach ja, da einige Zahlen im Spiel vorgegeben sind, wie eben auch bei Sudoku, kann der Spieler dies auch nicht ändern. Deswegen die Abfrage mit der Zahlensperre. Diese gesperrten Zahlen haben eine eigene Farbe und sollen sich bei doppelten nicht mit färben. Habe ihr eine zündene Idee für mich? Grüße von Kojote Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Hellhound Geschrieben 22. September 2017 Melden Share Geschrieben 22. September 2017 Hi, ich würde Dein Design überarbeiten. Eine Zahl ist bei Dir mehr als ein nummerischer Wert, sondern eher ein komplexes Objekt, das verschiedene Ausprägungen und Status annehmen kann. Ich würde mir daher eher eine Klasse oder Struct bauen, was genau diese verschiedenen Status und davon abhängigen Ausprägungen und Werte für genau eine Zahl abbildet. Dieses kannst Du dann beliebig erweitern und z.B. auch mit Events versehen auf die Du an anderer Stelle reagieren kannst. Auch die Visualisierung sollte diese Klasse selbst steuern. Nur so bekommst Du alles sauber unter einen Hut ... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 22. September 2017 Melden Share Geschrieben 22. September 2017 Ich würde jeweils zu Beginn alle Zahlen mit ihrer normalen Farbe einfärben und dann erst alle doppelten mit rot markieren. So werden bei jedem "Durchlauf" die Doppelten auch wieder zurückgesetzt. Wenn sich das Array "zahlenArray" verändert, so musst du den unten stehenden Code natürlich nochmals durchlaufen. Array.Copy(zahlenArray, loesungZahlenArray, zahlenArray.Length); // Erst einmal alles in schwarz einfärben (Default) for (int i = 0; i < zahlenArray.Length - 1; i++) { zahlenTextArray[i].color = new Color32(0, 0, 0, 255); } // Nun alle doppelten Zahlen in rot einfärben int doppelteInZahlen = 0; for (int i = 0; i < zahlenArray.Length - 1; i++) { for (int j = i + 1; j < loesungZahlenArray.Length; j++) { if (zahlenArray[i] == loesungZahlenArray[j]) { doppelteInZahlen++; if (hauptsteuerung.einstellungZahlHilfe == 1) { if (zahlenSperre[i] == false) { zahlenTextArray[i].color = new Color32(232, 0, 0, 255); } if (zahlenSperre[j] == false) { zahlenTextArray[j].color = new Color32(232, 0, 0, 255); } } } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 22. September 2017 Autor Melden Share Geschrieben 22. September 2017 Hellhound - wäre eine Option, da das Spiel aber zu 95% fertig ist und ansonsten sehr gut funktioniert, würde ich jetzt nicht noch einmal alles umbauen. Hab jetzt selbst auch eine ähnliche Version wie du, ZerOCool, aber meine scheint noch etwas zu buggen, werd ich auf jeden Fall mal testen! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 23. September 2017 Autor Melden Share Geschrieben 23. September 2017 Danke @ZerOCool, die Idee ist richtig gut, mit dem Default Wert vor der Schleife. Bei mir hatte es zwar auch geklappt, aber deine Version spart mir 2 Schleifen und 3 Abfragen, danke! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.