random int & char sollen nicht doppelt vorkommen



  • Hallo Leute,

    ich habe folgendes Problem in meinem C++ Code:
    Ich entwerfe das Spiel Schiffeversenken mit den mir bekannten Möglichkeiten.
    In dieser Funktion, versteckt die "KI" ihre Schiffe. Das funktioniert auch, doch sobald eine Koordinate (z.B. 3A) doppelt vorkommt, werden am Ende anzahlSchiffe-1 ausgegeben.

    Ich habe schon versucht, mit einer do-while Schleife und der while-Bedingung "bool" eine Lösung zu finden. Leider wurde der Code compiliert, doch ohne die Ausgabe des Koordinatensystems am Ende.
    Auch mit einer if-Bedingung bin ich nicht weiter gekommen.

    ich vermute mal, dass ich der Lösung nahe bin, doch hoffe ich hier einen Hinweis, oder eine Lösungsmöglichkeit zu bekommen.

    void spielfeldKI() {
        int X {0};
        int Y {0};
    
        string buchstabe;
    
        if(anzahlSchiffe==3) {
            X = 5;
            Y = 5;
            buchstabe = "ABCDE";
        }
        else if(anzahlSchiffe==5) {
            X = 5;
            Y = 6;
            buchstabe = "ABCDEF";
        }
        else {
            X = 5;
            Y = 8;
            buchstabe = "ABCDEFGH";
        }
    
        char Spielfeld[X][Y];
        int x, y;
        for(x = 0; x < X; x++) {
            for(y = 0; y <  Y; y++) {
                Spielfeld[x][y] = '.';
            }
        }
    
        srand(time(0));
        int koordinateX;
        char koordinateY;
        for(int i = 0; i <= anzahlSchiffe; i++) {
            koordinateX = rand() % X + 1;
            koordinateY = buchstabe[rand()%buchstabe.size()];
            int schiffX = koordinateX;
            int schiffY = koordinateY - 'A';
            Spielfeld[schiffX][schiffY] = 'x';
            }
    
            cout << "     1  2  3  4  5\n";
            for(y = 0; y < Y; y++) {
                cout << (char)('A'+y) << "  ";
                for(x = 0; x < X; x++) {
                    cout << "  " << Spielfeld[x][y];
                }
                cout << endl;
    
        }
    }
    

  • Mod

    Dann musst du eben entweder prüfen, ob das Feld bereits besetzt ist; oder du musst eine Liste mit den noch freien Feldern führen, aus der du die zu setzenden Koordinaten ziehst. Wenn das nicht funktioniert, wirst du wohl was falsch gemacht haben, aber ohne Code können wir dir wohl kaum sagen, was genau.


Anmelden zum Antworten