Schleifenabbruchbedingung + Zufallssahlen



  • case 3: while (player1_pos[0]!=player2_pos[0]!=player1_pos[1]!=player2_pos[1]!=player1_pos[2]!=player2_pos[2])
            {
             player1_pos[0] = random(12);
             player2_pos[0] = random(12);
             player1_pos[1] = random(12);
             player2_pos[1] = random(12);
             player1_pos[2] = random(12);
             player2_pos[2] = random(12);
            }
            break;
    

    Ist dieser Code korrekt um in die 2 Arrays 6 verschiedene Werte einzuspeichern welche alle verschieden sind, das heißt kein Wert darf mehr als einmal vorkommen? Kann man als meine While-Abbrechbedingung eleganter lösen bzw. ist sie überhaupt korrekt in diesem zusammenhang benutzt?
    Ich frage so, weil ich einen Fehler in meinem "Game" habe und irgendwo ein Fehler steckt und ich ihn nicht finde. Ich vermute aber er liegtin diesen Zeilen (s.o.)
    Bedanke mich schon mal für eure Antworten mfg



  • Hier findest du einen aktuellen Thread, in dem es um das Erzeugen von "einzigartigen" Zufallszahlen geht.



  • polarbaer,

    polarbaer schrieb:

    Ist dieser Code korrekt ...

    korrekt schon, aber wahnsinnig ineffizient. Der von Jansen empfohlene Thread wird Dir vermutlich nicht weiterhelfen. Hier ein Vorschlag (nur leicht angetestet):

    int vorrat[12]={0,1,2,3,4,5,6,7,8,9,10,11};
    int length = 12;
    randomize();
    int iz; //index
    int z;  //Zufalls-Wert
    while (length > 0)
    {
        int iz = random(length);
        int z = vorrat[iz];
        //aufräumen
        for (int i = iz; i < length - 1; i++)
        {
            vorrat[i] = vorrat[i + 1];
        }
        length--;
    }
    

    Das "Aufräumen" läßt sich auch eleganter mit einer Liste lösen. Es gibt auch gänzlich andere Lösungen für dieses Problem ...



  • polarbaer schrieb:

    case 3: while (player1_pos[0]!=player2_pos[0]!=player1_pos[1]!=player2_pos[1]!=player1_pos[2]!=player2_pos[2])
    

    Entschuldigt die ungewöhnliche Frage, aber ist so ein Konstrukt wirklich zulässig? Ich kann mich entsinnen, dass mein Compiler bald durchgedreht ist, wenn ich sowas versucht habe...


Anmelden zum Antworten