C++ Wortsuchrätsel



  • Hallo,
    brauche auch für eine weitere Aufgabe dringend Hilfe.
    Es soll ein Programm in C++ geschrieben werden, das die Erstellen eines Wortsuchrätsels automatisiert. 25 vorgegebene Wörter unterschiedlicher Länge sind dabei in einem Feld von 30*20Buchstaben versteckt, wobei die Wörter auf-/abwärts und nach rechts/links sowie diagonal geschreiben sein könne.
    Es soll ein zweidimensionales Char Array das wie folgt deklariert werden kann benutzt werden: char Raetsel[30][20]
    Der Zufallsgenerator random(n) soll genutze werden um die zufällige Anfangsposition und Schreibrichtung innerhalb des Feldes auszuwürfeln.
    Das Programm soll auch wenn keine Lösung des Rätsels möglich ist (finden der versteckten Wörter) nach einer akzeptablen Rechenzeit stoppen.
    Dann soll eine Fehlermeldung erscheinen oder ein Neuversuch möglich sein.

    Ich hoffe es kann mir jemand helfen.
    Vielen Dank schon mal.
    Gruss
    Langis



  • Beschreib mal wo Du die Probleme hast.

    Die Lösung wird Dir hier keiner Programmieren, aber bei Problemen wird Dir sicherlich gerne jemand helfen.



  • also gut wenn ich das richtig sehe nur Großbuchstaben
    als erstes füllen wir erstmal alle Felder Irgendwie also:

    randomize //starten des Zufallsgenerators
    raetsel[30][20];//2D-Array
    char Buchstabe;
    for (int pos=0;pos < 20)
    for (int i=0;i < 30;i++) //30 Durchläufe 
    {
    Buchstabe = random(26)+65; //Alle Buchstaben von A - Z möglich (nicht getestet)
    raetsel[i][pos] = Buchstabe;
    }
    

    so damit ist das Quadrat mit zufälligen Buchstaben ausgefüllt.
    Jetzt müssen nur noch die Worte rein also die Worte liegen in einem Array von char*. Hier das Array Worte: char *Worte[25] in einem zweiten array ist die Länge gespeichert heir int Laenge[25];
    Jetzt das Reinsetzen:

    int Zufall, x,y;
    for (int Wort  = 0;i< 25;i++)  //für jedes Wort ein Durchlauf
    {
    Zufall = (random(89)+1)/10 // Damit das Ergebnis zufälliger ist
    switch (Zufall){
    case 1:              //Wort normal nach rechts schreiben
    x = random(30);
    char AktWort[Laenge[Wort]];
    strcpy (AktWort,Worte[Wort]);
    y = random(20);
    for (int i=0;i< Laenge[Wort];i++)
    {
    Raetsel[x][y] = AktWort[i]
    x++
    }
    break;
    case 2:              //Wort normal nach links schreiben
    x = random(30);
    char AktWort[Laenge[Wort]];
    strcpy (AktWort,Worte[Wort]);
    y = random(20);
    for (int i=0;i< Laenge[Wort];i++)
    {
    Raetsel[x][y] = AktWort[i]
    x--;
    }
    break;
    case 3:              //Wort normal nach unten schreiben
    x = random(30);
    char AktWort[Laenge[Wort]];
    strcpy (AktWort,Worte[Wort]);
    y = random(20);
    for (int i=0;i< Laenge[Wort];i++)
    {
    Raetsel[x][y] = AktWort[i]
    y++;
    }
    break;
    case 4:              //Wort normal nach links schreiben
    x = random(30);
    char AktWort[Laenge[Wort]];
    strcpy (AktWort,Worte[Wort]);
    y = random(20);
    for (int i=0;i< Laenge[Wort];i++)
    {
    Raetsel[x][y] = AktWort[i]
    y--;
    }
    break;
    case 5:              //Wort normal diagonal schreiben
    x = random(30);
    char AktWort[Laenge[Wort]];
    strcpy (AktWort,Worte[Wort]);
    y = random(20);
    for (int i=0;i< Laenge[Wort];i++)
    {
    Raetsel[x][y] = AktWort[i]
    x--;
    y--;
    }
    break;
    case 6:              //Wort normal diagonal schreiben
    x = random(30);
    char AktWort[Laenge[Wort]];
    strcpy (AktWort,Worte[Wort]);
    y = random(20);
    for (int i=0;i< Laenge[Wort];i++)
    {
    Raetsel[x][y] = AktWort[i]
    x--;
    y++;
    }
    break;
    case 7:              //Wort normal diagonal schreiben
    x = random(30);
    char AktWort[Laenge[Wort]];
    strcpy (AktWort,Worte[Wort]);
    y = random(20);
    for (int i=0;i< Laenge[Wort];i++)
    {
    Raetsel[x][y] = AktWort[i]
    x++;
    y--;
    }
    break;
    
    case 8:              //Wort normal diagonal schreiben
    x = random(30);
    char AktWort[Laenge[Wort]];
    strcpy (AktWort,Worte[Wort]);
    y = random(20);
    for (int i=0;i< Laenge[Wort];i++)
    {
    Raetsel[x][y] = AktWort[i]
    x++;
    y++;
    }
    break;
    
    }
    }
    

    So das ist eine Basis. Die if-Abfragen musst du schon selber einbauen. Außerdem ist das hier alles noch nicht getestet. Du solltest das schritt für schritt machen, evtl. laufen manche Schleifen noch zu oft oder zu wenig durch. Eine if Abfrage, ob das Wort in dem Schreibmodus überhaupt an die Stelle past wäre sinvoll. Wenn nicht einfach nur Wort-- machen. Dann wird die das solange wiederhaolt bis es passt. Auch darauf das ein Wort ein anderes überschreibt musst du noch was einbauen. Die Sache mit dem Abberchen ist einfach damit zu machen, das du mitzählst wie oft die wort-schleife durchläuft und du z.B. bei 400 abbrichst.


Anmelden zum Antworten