Fang doch erst mal etwas einfacher an und arbeite dich hin. Stell dir vor du hast eine Liste von Musiktiteln und möchtest diese zufällig abspielen. Dabei soll jeder Titel ein mal abgespielt werden bevor sich ein Song wiederholt. Eine Möglichkeit wäre die Liste der Songs zu nehmen und zufällig einen Song daraus zu entfernen und in eine neue Liste zu übertragen. Das machst du so lange bis deine erste Liste leer ist. Die neue Liste enthält nun alle Lieder in zufälliger Reihenfolge.
Das kann man jetzt ein wenig abwandeln. Ich bin mir nicht sicher ob du dich schon mit Listen auskennst. Das ganze funktioniert auch mit einem Array. Und anstatt jetzt mit zwei Arrays zu werkeln kann man das ganze auch mit einem lösen. Als erstes wählst du 1 Element aus dem gesamten Array zufällig aus und tauscht es mit dem Element an der ersten Stelle im Array. Jetzt wählst du als nächstes ein Element zwischen der 2ten und der letzten Stelle aus dem Array aus und tauschst es mit dem Element an der 2ten Stelle. Dann ab der dritten und so weiter bis du das gesamte Array durchlaufen hast. Danach ist das Array gemischt. Als Beispiel:
|
Quellcode
|
1
2
3
4
5
|
[1, 2, 3, 4, 5]
[3, 2, 1, 4, 5]
[3, 5, 1, 4, 2]
[3, 5, 1, 4, 2]
[3, 5, 1, 2, 4]
|
Stell dir vor in jede Zeile entspricht dem Array nach einem Schritt. Am Anfang hast du die Zahlen von 1 bis 5. Dann wird zufällig ein Element aus dem Array gewählt. In diesem Fall die 3. Diese wird mit dem Element an erster Stelle getauscht. Danach sieht das Array wie in der zweiten Zeile aus. Jetzt nimmst du zufällig ein Element nach dem ersten Element, in diesem Fall die 5 und tauschst sie mit der 2. Dann nimmst du zufällig ein Element nach dem zweiten Element, in diesem Fall die 1. Diese tauschst du mit sich selbst da sie schon an 3ter Stelle steht. Jetzt machst du das ganze noch ein mal für die Elemente nach dem dritten Element wobei die 2 gewählt wurde. Dann bist du beim letzten Element im Array welches du mit sich selbst tauschen würdest weshalb du hier nicht mehr zufällig wählen musst.
Ich hoffe es ist einigermaßen rüber gekommen was ich meine.
Überleg dann danach noch mal wie du an dein Problem herangehen könntest.