Spiel Mastermind programmieren... Hab ein Problem!



  • Hey,

    ich möchte das Spiel Mastermind Programmieren, bzw eine abgespeckte Version davon.

    Es geht ja darum, eine vorhandene Farbkombination richtig zu erraten.

    Mein Problem dabei ist die if bedingung in folgender Schleife:

    for (i=1;i<=3;i++)
    {
       printf("\nPosition %i:",i);
    
       fgets(buffer,200,stdin);
       sscanf(buffer,"%s",&geraten[i-1]);
    
       if (farbe[i-1]==geraten[i-1]) richtig = richtig + 1;
    
    }
    

    In der Schleife soll es darum gehen, dass der Spieler aufgefordert wird, zur jeweiligen Position einen Tip abzugeben.

    Die geratene Farbe wird mit der zu erratenden Farbe verglichen und bei richtigem Tip wird richtig um eins erhöht.

    farbe und geraten sind arrays:

    char buffer[200],farbe[3][100],geraten[3][100];
    

    Wenn farbe[0] zum beispiel 'blau' ist und ich 'blau' tippe, also geraten[0] zuweise, sollte die Bedingung 'blau'=='blau' doch erfüllt sein, demzufolge die Variable richtig um eins erhöht werden, wird es aber leider nicht, richtig bleibt =0.

    Dass die farbe[0] und geraten[0] die selbe Farbe beinhalten, hab ich schon mit einer Bildschirmausgabe überprüft, also ich bin mir sicher, dass dort 'blau'=='blau' zum Beispiel steht.

    Was hab ich falsch gemacht? Wenn ihr mehr infos braucht, zbsp komplette Programmtexte, sagt Bescheid.

    Gruß ser_u



  • Zum vergleichen von Strings nimmt man in C die Funktion strcmp.



  • Und in einfachen Anführungszeichen werden einzelne Zeichen angegeben.
    Strings gibt man in doppelten Anführungszeichen an.

    Dazwischen ist ein großer Unterschied.

    "b" ist etwas anderes als 'b'



  • Genau, also:

    if (!strcmp(farbe[i-1], geraten[i-1]) richtig = richtig + 1;
    

    Besser wäre es allerdings, so etwas zu machen:

    /*
     blau = 0
     rot  = 1
     gelb = 2
     usw.
    */
    int farben[4] = {0, 1, 2, 3};
    int geraten[4];
    ...
    


  • Danke für eure Hinweise, ich probier es gleich mal aus.

    Belli schrieb:

    Genau, also:

    if (!strcmp(farbe[i-1], geraten[i-1]) richtig = richtig + 1;
    

    Besser wäre es allerdings, so etwas zu machen:

    /*
     blau = 0
     rot  = 1
     gelb = 2
     usw.
    */
    int farben[4] = {0, 1, 2, 3};
    int geraten[4];
    ...
    

    Die Sache ist die, dass die Farbkombination aus einer beliebigen Datei eingelesen.
    Außerdem kann man in einem Unterprogramm auch Dateien mit Farbkombination erstellen, die dann eingelesen werden könnten.

    Evtl könnte man trotzdem den Farben integer-werte zuordnen.

    Muss ich mal drüber nachdenken.

    Gruß ser_u



  • Jetzt funktioniert alles so wie ich es wollte, danke nochmal, wieder was neues gelernt 🙂

    gruß ser_u


Log in to reply