Jump to content
Unity Insider Forum

Zündende Idee für Array und Schleife


Kojote

Recommended Posts

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

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

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...